]> granicus.if.org Git - ejabberd/commitdiff
New ejabberd command: disconnect_user/2
authorHolger Weiss <holger@zedat.fu-berlin.de>
Mon, 28 Apr 2014 22:50:43 +0000 (00:50 +0200)
committerHolger Weiss <holger@zedat.fu-berlin.de>
Mon, 28 Apr 2014 22:50:43 +0000 (00:50 +0200)
src/ejabberd_sm.erl

index b1673d4b96bb5da39618928512b4c6e71af3618e..060643af09e499853358244a6624b52dc3ba57ce 100644 (file)
@@ -52,6 +52,7 @@
         connected_users/0,
         connected_users_number/0,
         user_resources/2,
+        disconnect_user/2,
         get_session_pid/3,
         get_user_info/3,
         get_user_ip/3,
@@ -801,7 +802,13 @@ commands() ->
                        desc = "List user's connected resources",
                        module = ?MODULE, function = user_resources,
                        args = [{user, binary}, {host, binary}],
-                       result = {resources, {list, {resource, string}}}}].
+                       result = {resources, {list, {resource, string}}}},
+     #ejabberd_commands{name = disconnect_user,
+                       tags = [session],
+                       desc = "Disconnect user's active sessions",
+                       module = ?MODULE, function = disconnect_user,
+                       args = [{user, binary}, {host, binary}],
+                       result = {num_resources, integer}}].
 
 -spec connected_users() -> [binary()].
 
@@ -818,6 +825,15 @@ user_resources(User, Server) ->
     Resources = get_user_resources(User, Server),
     lists:sort(Resources).
 
+disconnect_user(User, Server) ->
+    Xmlelement = ?SERRT_POLICY_VIOLATION(<<"en">>, <<"has been kicked">>),
+    Resources = get_user_resources(User, Server),
+    lists:foreach(
+       fun(Resource) ->
+               PID = get_session_pid(User, Server, Resource),
+               PID ! {kick, kicked_by_admin, Xmlelement}
+       end, Resources),
+    length(Resources).
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%% Update Mnesia tables