From: Evgeniy Khramtsov Date: Tue, 6 Sep 2016 16:06:02 +0000 (+0300) Subject: Handle request to list MUC subscribers X-Git-Tag: 16.09~26 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c6afb9731b6d2e0de33eba4f239e27c236477039;p=ejabberd Handle request to list MUC subscribers --- diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index 6280d75ad..f86b990d3 100644 --- a/src/mod_muc_room.erl +++ b/src/mod_muc_room.erl @@ -4695,11 +4695,28 @@ process_iq_mucsub(From, _Packet, _ -> {result, [], StateData} end; -process_iq_mucsub(_From, _Packet, #iq{type = set, lang = Lang}, _StateData) -> +process_iq_mucsub(From, _Packet, + #iq{type = get, lang = Lang, + sub_el = #xmlel{name = <<"subscriptions">>}}, + StateData) -> + FAffiliation = get_affiliation(From, StateData), + FRole = get_role(From, StateData), + if FRole == moderator; FAffiliation == owner; FAffiliation == admin -> + Subs = dict:fold( + fun(_, #user{is_subscriber = true, jid = J}, Acc) -> + SJID = jid:to_string(jid:remove_resource(J)), + [#xmlel{name = <<"subscription">>, + attrs = [{<<"jid">>, SJID}]}|Acc]; + (_, _, Acc) -> + Acc + end, [], StateData#state.users), + {result, Subs, StateData}; + true -> + Txt = <<"Moderator privileges required">>, + {error, ?ERRT_FORBIDDEN(Lang, Txt)} + end; +process_iq_mucsub(_From, _Packet, #iq{lang = Lang}, _StateData) -> Txt = <<"Unrecognized subscription command">>, - {error, ?ERRT_BAD_REQUEST(Lang, Txt)}; -process_iq_mucsub(_From, _Packet, #iq{type = get, lang = Lang}, _StateData) -> - Txt = <<"Value 'get' of 'type' attribute is not allowed">>, {error, ?ERRT_BAD_REQUEST(Lang, Txt)}. remove_subscription(JID, #user{is_subscriber = true} = User, StateData) ->