From 914fae3d3edbe603aade2c21d9ec2e622a9d8631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= Date: Wed, 10 Oct 2018 18:02:45 +0200 Subject: [PATCH] Change logic for archiving mucsub messages This change should apply usual logic for message wrapped in mucsub except check for groupchat message, so messages without bodies for example should be rejected --- src/mod_mam.erl | 17 ++++++++++++++--- src/mod_muc_room.erl | 21 ++++++++++++++++++++- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/mod_mam.erl b/src/mod_mam.erl index 4581a6daa..ca2cbeb02 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -648,9 +648,20 @@ should_archive(#message{body = Body, subject = Subject, none when Type == headline -> false; none -> - xmpp:get_text(Body) /= <<>> orelse - xmpp:get_text(Subject) /= <<>> orelse - xmpp:has_subtag(Pkt, #ps_event{}) + case xmpp:get_text(Body) /= <<>> orelse + xmpp:get_text(Subject) /= <<>> of + true -> + true; + _ -> + case mod_muc_room:unwrap_mucsub_message(Pkt) of + #message{type = groupchat} = Msg -> + should_archive(Msg#message{type = chat}, LServer); + #message{} = Msg -> + should_archive(Msg, LServer); + _ -> + false + end + end end end; should_archive(_, _LServer) -> diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index ede3c8ebb..a7089bc10 100644 --- a/src/mod_muc_room.erl +++ b/src/mod_muc_room.erl @@ -39,7 +39,8 @@ is_occupant_or_admin/2, route/2, expand_opts/1, - config_fields/0]). + config_fields/0, + unwrap_mucsub_message/1]). %% gen_fsm callbacks -export([init/1, @@ -4459,6 +4460,24 @@ wrap(From, To, Packet, Node) -> id = p1_rand:get_string(), sub_els = [El]}]}}]}. +-spec unwrap_mucsub_message(xmpp_element()) -> message() | false. +unwrap_mucsub_message(#message{} = Packet) -> + case xmpp:get_subtag(Packet, #ps_event{}) of + #ps_event{ + items = #ps_items{ + node = Node, + items = [ + #ps_item{ + sub_els = [#message{} = Message]} | _]}} + when Node == ?NS_MUCSUB_NODES_MESSAGES; + Node == ?NS_MUCSUB_NODES_SUBJECT -> + Message; + _ -> + false + end; +unwrap_mucsub_message(_Packet) -> + false. + %% -spec send_multiple(jid(), binary(), [#user{}], stanza()) -> ok. %% send_multiple(From, Server, Users, Packet) -> %% JIDs = [ User#user.jid || {_, User} <- ?DICT:to_list(Users)],