Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2015-12-24 15:01:33 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2015-12-24 15:04:06 +0300
commitbabb484cfc7c1d89e84f5b821a2e3e873f74177e (patch)
treef199de2c26b18edd73bc816cda64e0435c30288f /src/mod_mam.erl
parentf3cb5e0d7714ca3f1784017b0000cd1baa9da04b (diff)
Restrict access to MAM archives for members-only rooms
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl22
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;