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"},
|
{:p1_utils, "~> 1.0"},
|
||||||
{:pkix, "~> 1.0"},
|
{:pkix, "~> 1.0"},
|
||||||
{:stringprep, ">= 1.0.26"},
|
{: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"}]
|
{:yconf, "~> 1.0"}]
|
||||||
++ cond_deps()
|
++ cond_deps()
|
||||||
end
|
end
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.29"}}},
|
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.29"}}},
|
||||||
{if_var_true, stun,
|
{if_var_true, stun,
|
||||||
{stun, ".*", {git, "https://github.com/processone/stun", {tag, "1.2.7"}}}},
|
{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"}}}
|
{yconf, ".*", {git, "https://github.com/processone/yconf", {tag, "1.0.15"}}}
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
|
|
@ -2153,11 +2153,22 @@ get_priority_from_presence(#presence{priority = Prio}) ->
|
||||||
_ -> Prio
|
_ -> Prio
|
||||||
end.
|
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) ->
|
find_nick_by_jid(JID, StateData) ->
|
||||||
LJID = jid:tolower(JID),
|
LJID = jid:tolower(JID),
|
||||||
#user{nick = Nick} = maps:get(LJID, StateData#state.users),
|
case maps:find(LJID, StateData#state.users) of
|
||||||
Nick.
|
{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().
|
-spec is_nick_change(jid(), binary(), state()) -> boolean().
|
||||||
is_nick_change(JID, Nick, StateData) ->
|
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) ->
|
remove_from_history(StanzaId, #state{history = #lqueue{queue = Queue} = LQueue} = StateData) ->
|
||||||
NewQ = p1_queue:foldl(
|
NewQ = p1_queue:foldl(
|
||||||
fun({_, Pkt, _, _, _} = Entry, Acc) ->
|
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 ->
|
V when V == StanzaId ->
|
||||||
Acc;
|
Acc;
|
||||||
_ ->
|
_ ->
|
||||||
|
@ -3448,7 +3459,7 @@ send_kickban_presence(UJID, JID, Reason, Code, NewAffiliation,
|
||||||
send_kickban_presence1(MJID, UJID, Reason, Code, Affiliation,
|
send_kickban_presence1(MJID, UJID, Reason, Code, Affiliation,
|
||||||
StateData) ->
|
StateData) ->
|
||||||
#user{jid = RealJID, nick = Nick} = maps:get(jid:tolower(UJID), StateData#state.users),
|
#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
|
%% TODO: optimize further
|
||||||
UserMap =
|
UserMap =
|
||||||
maps:merge(
|
maps:merge(
|
||||||
|
@ -3491,15 +3502,6 @@ send_kickban_presence1(MJID, UJID, Reason, Code, Affiliation,
|
||||||
end
|
end
|
||||||
end, ok, UserMap).
|
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()].
|
-spec convert_legacy_fields([xdata_field()]) -> [xdata_field()].
|
||||||
convert_legacy_fields(Fs) ->
|
convert_legacy_fields(Fs) ->
|
||||||
lists:map(
|
lists:map(
|
||||||
|
@ -5064,16 +5066,19 @@ process_iq_moderate(From, #iq{type = set, lang = Lang},
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
|
By = jid:replace_resource(JID, find_nick_by_jid(From, StateData)),
|
||||||
Packet = #message{type = groupchat,
|
Packet = #message{type = groupchat,
|
||||||
sub_els = [
|
sub_els = [
|
||||||
#fasten_apply_to{id = Id, sub_els = [
|
#fasten_apply_to{id = Id, sub_els = [
|
||||||
#message_moderated{reason = Reason,
|
#message_moderated{by = By, reason = Reason,
|
||||||
retract = #message_retract{}}
|
retract = #message_retract{}}
|
||||||
]}]},
|
]}]},
|
||||||
send_wrapped_multiple(JID,
|
send_wrapped_multiple(JID,
|
||||||
get_users_and_subscribers_with_node(?NS_MUCSUB_NODES_MESSAGES, StateData),
|
get_users_and_subscribers_with_node(?NS_MUCSUB_NODES_MESSAGES, StateData),
|
||||||
Packet, ?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 _:_ ->
|
catch _:_ ->
|
||||||
{error, xmpp:err_bad_request(
|
{error, xmpp:err_bad_request(
|
||||||
?T("Stanza id is not valid"), Lang)}
|
?T("Stanza id is not valid"), Lang)}
|
||||||
|
|
Loading…
Reference in New Issue