From 6aaefc663b3fef5a176100a872d5bb67a8b5156c Mon Sep 17 00:00:00 2001 From: Holger Weiss Date: Sat, 24 Feb 2024 22:06:36 +0100 Subject: [PATCH] Fix XEP-0425: Message Moderation with SQL storage Use the correct server name and room JID when removing moderated messages from SQL. --- src/mod_mam.erl | 4 ++-- src/mod_mam_mnesia.erl | 11 +++++------ src/mod_mam_sql.erl | 2 ++ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 7363eb9f1..cde711f01 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -361,9 +361,9 @@ remove_mam_for_user_with_peer(User, Server, Peer) -> ok | {error, binary()}. remove_message_from_archive(User, Server, StanzaId) when is_binary(User) -> remove_message_from_archive({User, Server}, Server, StanzaId); -remove_message_from_archive({User, Host}, Server, StanzaId) -> +remove_message_from_archive({_User, _Host} = UserHost, Server, StanzaId) -> Mod = gen_mod:db_mod(Server, ?MODULE), - case Mod:remove_from_archive(User, Host, StanzaId) of + case Mod:remove_from_archive(UserHost, Server, StanzaId) of ok -> ok; {error, Bin} when is_binary(Bin) -> diff --git a/src/mod_mam_mnesia.erl b/src/mod_mam_mnesia.erl index 2371ee1a6..f643da1fc 100644 --- a/src/mod_mam_mnesia.erl +++ b/src/mod_mam_mnesia.erl @@ -77,14 +77,14 @@ remove_user(LUser, LServer) -> remove_room(_LServer, LName, LHost) -> remove_user(LName, LHost). -remove_from_archive(LUser, LServer, none) -> - US = {LUser, LServer}, +remove_from_archive(LUser, LHost, Key) when is_binary(LUser) -> + remove_from_archive({LUser, LHost}, LHost, Key); +remove_from_archive(US, _LServer, none) -> case mnesia:transaction(fun () -> mnesia:delete({archive_msg, US}) end) of {atomic, _} -> ok; {aborted, Reason} -> {error, Reason} end; -remove_from_archive(LUser, LServer, #jid{} = WithJid) -> - US = {LUser, LServer}, +remove_from_archive(US, _LServer, #jid{} = WithJid) -> Peer = jid:remove_resource(jid:split(WithJid)), F = fun () -> Msgs = mnesia:select( @@ -99,9 +99,8 @@ remove_from_archive(LUser, LServer, #jid{} = WithJid) -> {atomic, _} -> ok; {aborted, Reason} -> {error, Reason} end; -remove_from_archive(LUser, LServer, StanzaId) -> +remove_from_archive(US, _LServer, StanzaId) -> Timestamp = misc:usec_to_now(StanzaId), - US = {LUser, LServer}, F = fun () -> Msgs = mnesia:select( archive_msg, diff --git a/src/mod_mam_sql.erl b/src/mod_mam_sql.erl index 8bc27b65d..2646b0397 100644 --- a/src/mod_mam_sql.erl +++ b/src/mod_mam_sql.erl @@ -163,6 +163,8 @@ remove_room(LServer, LName, LHost) -> LUser = jid:encode({LName, LHost, <<>>}), remove_user(LUser, LServer). +remove_from_archive({LUser, LHost}, LServer, Key) -> + remove_from_archive(jid:encode({LUser, LHost, <<>>}), LServer, Key); remove_from_archive(LUser, LServer, none) -> case ejabberd_sql:sql_query(LServer, ?SQL("delete from archive where username=%(LUser)s and %(LServer)H")) of