]> granicus.if.org Git - ejabberd/commitdiff
Allow a room admin to unsubscribe another JID
authorBadlop <badlop@process-one.net>
Thu, 13 Apr 2017 20:37:39 +0000 (22:37 +0200)
committerBadlop <badlop@process-one.net>
Thu, 13 Apr 2017 20:37:39 +0000 (22:37 +0200)
src/mod_muc_room.erl

index a1817a6316091f8c28a44c1fc1898ef39deb8cfb..426b28a4e587f97f0a44b21db46d8df79f0a33ed 100644 (file)
@@ -3741,6 +3741,19 @@ process_iq_mucsub(From,
            SD2 = StateData#state{config = (StateData#state.config)#config{allow_subscription = true}},
            add_new_user(From, Nick, Packet, SD2)
     end;
+process_iq_mucsub(From, #iq{type = set, lang = Lang,
+                           sub_els = [#muc_unsubscribe{jid = UnsubJid}]},
+                 StateData) when UnsubJid /= <<>> ->
+    FAffiliation = get_affiliation(From, StateData),
+    FRole = get_role(From, StateData),
+    if FRole == moderator; FAffiliation == owner; FAffiliation == admin ->
+           FromUnsub = jid:from_string(UnsubJid),
+           process_iq_mucsub(FromUnsub, #iq{type = set, sub_els = [#muc_unsubscribe{jid = <<>>}]},
+                         StateData);
+       true ->
+           Txt = <<"Moderator privileges required">>,
+           {error, xmpp:err_forbidden(Txt, Lang)}
+    end;
 process_iq_mucsub(From, #iq{type = set, sub_els = [#muc_unsubscribe{}]},
                  StateData) ->
     LBareJID = jid:tolower(jid:remove_resource(From)),