mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-20 16:15:59 +01:00
Add by attribute to generated muc moderation messages
This commit is contained in:
parent
34420444db
commit
d12e5a44b8
2
mix.exs
2
mix.exs
@ -114,7 +114,7 @@ defmodule Ejabberd.MixProject do
|
||||
{:p1_utils, "~> 1.0"},
|
||||
{:pkix, "~> 1.0"},
|
||||
{:stringprep, ">= 1.0.26"},
|
||||
{:xmpp, git: "https://github.com/processone/xmpp.git", ref: "1107d05640ccd352613b2867ab24c5649603a470", override: true},
|
||||
{:xmpp, git: "https://github.com/processone/xmpp.git", ref: "9ba5f2b3a66f929c5a9e455e9124b8752ada4b43", override: true},
|
||||
{:yconf, "~> 1.0"}]
|
||||
++ cond_deps()
|
||||
end
|
||||
|
@ -73,7 +73,7 @@
|
||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.29"}}},
|
||||
{if_var_true, stun,
|
||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.2.7"}}}},
|
||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", "1107d05640ccd352613b2867ab24c5649603a470"}},
|
||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", "9ba5f2b3a66f929c5a9e455e9124b8752ada4b43"}},
|
||||
{yconf, ".*", {git, "https://github.com/processone/yconf", {tag, "1.0.15"}}}
|
||||
]}.
|
||||
|
||||
|
@ -2153,11 +2153,22 @@ get_priority_from_presence(#presence{priority = Prio}) ->
|
||||
_ -> Prio
|
||||
end.
|
||||
|
||||
-spec find_nick_by_jid(jid(), state()) -> binary().
|
||||
-spec find_nick_by_jid(jid() | undefined, state()) -> binary().
|
||||
find_nick_by_jid(undefined, _StateData) ->
|
||||
<<>>;
|
||||
find_nick_by_jid(JID, StateData) ->
|
||||
LJID = jid:tolower(JID),
|
||||
#user{nick = Nick} = maps:get(LJID, StateData#state.users),
|
||||
Nick.
|
||||
case maps:find(LJID, StateData#state.users) of
|
||||
{ok, #user{nick = Nick}} ->
|
||||
Nick;
|
||||
_ ->
|
||||
case maps:find(LJID, (StateData#state.muc_subscribers)#muc_subscribers.subscribers) of
|
||||
{ok, #subscriber{nick = Nick}} ->
|
||||
Nick;
|
||||
_ ->
|
||||
<<>>
|
||||
end
|
||||
end.
|
||||
|
||||
-spec is_nick_change(jid(), binary(), state()) -> boolean().
|
||||
is_nick_change(JID, Nick, StateData) ->
|
||||
@ -2890,7 +2901,7 @@ add_message_to_history(FromNick, FromJID, Packet, StateData) ->
|
||||
remove_from_history(StanzaId, #state{history = #lqueue{queue = Queue} = LQueue} = StateData) ->
|
||||
NewQ = p1_queue:foldl(
|
||||
fun({_, Pkt, _, _, _} = Entry, Acc) ->
|
||||
case xmpp:get_meta(Pkt, stanza_id, 0) of
|
||||
case xmpp:get_meta(Pkt, stanza_id, missing) of
|
||||
V when V == StanzaId ->
|
||||
Acc;
|
||||
_ ->
|
||||
@ -3448,7 +3459,7 @@ send_kickban_presence(UJID, JID, Reason, Code, NewAffiliation,
|
||||
send_kickban_presence1(MJID, UJID, Reason, Code, Affiliation,
|
||||
StateData) ->
|
||||
#user{jid = RealJID, nick = Nick} = maps:get(jid:tolower(UJID), StateData#state.users),
|
||||
ActorNick = get_actor_nick(MJID, StateData),
|
||||
ActorNick = find_nick_by_jid(MJID, StateData),
|
||||
%% TODO: optimize further
|
||||
UserMap =
|
||||
maps:merge(
|
||||
@ -3491,15 +3502,6 @@ send_kickban_presence1(MJID, UJID, Reason, Code, Affiliation,
|
||||
end
|
||||
end, ok, UserMap).
|
||||
|
||||
-spec get_actor_nick(undefined | jid(), state()) -> binary().
|
||||
get_actor_nick(undefined, _StateData) ->
|
||||
<<"">>;
|
||||
get_actor_nick(MJID, StateData) ->
|
||||
try maps:get(jid:tolower(MJID), StateData#state.users) of
|
||||
#user{nick = ActorNick} -> ActorNick
|
||||
catch _:{badkey, _} -> <<"">>
|
||||
end.
|
||||
|
||||
-spec convert_legacy_fields([xdata_field()]) -> [xdata_field()].
|
||||
convert_legacy_fields(Fs) ->
|
||||
lists:map(
|
||||
@ -5064,16 +5066,19 @@ process_iq_moderate(From, #iq{type = set, lang = Lang},
|
||||
_ ->
|
||||
ok
|
||||
end,
|
||||
By = jid:replace_resource(JID, find_nick_by_jid(From, StateData)),
|
||||
Packet = #message{type = groupchat,
|
||||
sub_els = [
|
||||
#fasten_apply_to{id = Id, sub_els = [
|
||||
#message_moderated{reason = Reason,
|
||||
#message_moderated{by = By, reason = Reason,
|
||||
retract = #message_retract{}}
|
||||
]}]},
|
||||
send_wrapped_multiple(JID,
|
||||
get_users_and_subscribers_with_node(?NS_MUCSUB_NODES_MESSAGES, StateData),
|
||||
Packet, ?NS_MUCSUB_NODES_MESSAGES, StateData),
|
||||
{result, undefined, remove_from_history(StanzaId, StateData)}
|
||||
NSD = add_message_to_history(<<"">>,
|
||||
StateData#state.jid, Packet, StateData),
|
||||
{result, undefined, remove_from_history(StanzaId, NSD)}
|
||||
catch _:_ ->
|
||||
{error, xmpp:err_bad_request(
|
||||
?T("Stanza id is not valid"), Lang)}
|
||||
|
Loading…
Reference in New Issue
Block a user