diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-09-06 19:06:02 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-09-06 19:06:02 +0300 |
commit | c6afb9731b6d2e0de33eba4f239e27c236477039 (patch) | |
tree | df8af0707067b7126857f114ae0f77d0a228dd21 /src/mod_muc_room.erl | |
parent | Do not update muc_online_users table on MUC/Sub operations (diff) |
Handle <subscriptions/> request to list MUC subscribers
Diffstat (limited to '')
-rw-r--r-- | src/mod_muc_room.erl | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/mod_muc_room.erl b/src/mod_muc_room.erl index 6280d75a..f86b990d 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) -> |