diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2015-12-24 15:01:33 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2015-12-24 15:04:06 +0300 |
commit | babb484cfc7c1d89e84f5b821a2e3e873f74177e (patch) | |
tree | f199de2c26b18edd73bc816cda64e0435c30288f /src/mod_mam.erl | |
parent | f3cb5e0d7714ca3f1784017b0000cd1baa9da04b (diff) |
Restrict access to MAM archives for members-only rooms
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r-- | src/mod_mam.erl | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl index e989fba99..7124e2c6d 100644 --- a/src/mod_mam.erl +++ b/src/mod_mam.erl @@ -251,7 +251,7 @@ process_iq_v0_3(#jid{lserver = LServer} = From, process_iq_v0_3(From, To, IQ) -> process_iq(From, To, IQ). -muc_process_iq(#iq{type = set, +muc_process_iq(#iq{type = set, lang = Lang, sub_el = #xmlel{name = <<"query">>, attrs = Attrs} = SubEl} = IQ, MUCState, From, To) -> @@ -259,8 +259,24 @@ muc_process_iq(#iq{type = set, ?NS_MAM_0 -> LServer = MUCState#state.server_host, Role = mod_muc_room:get_role(From, MUCState), - process_iq(LServer, From, To, IQ, SubEl, - get_xdata_fields(SubEl), {groupchat, Role, MUCState}); + Config = MUCState#state.config, + if Config#config.members_only -> + case mod_muc_room:is_occupant_or_admin(From, MUCState) of + true -> + process_iq(LServer, From, To, IQ, SubEl, + get_xdata_fields(SubEl), + {groupchat, Role, MUCState}); + false -> + Text = <<"Only members are allowed to query " + "archives of this room">>, + Error = ?ERRT_FORBIDDEN(Lang, Text), + IQ#iq{type = error, sub_el = [SubEl, Error]} + end; + true -> + process_iq(LServer, From, To, IQ, SubEl, + get_xdata_fields(SubEl), + {groupchat, Role, MUCState}) + end; _ -> IQ end; |