1 |
|
%% @doc Provide an interface for frontends (like graphql or ctl) to manage sessions. |
2 |
|
-module(mongoose_session_api). |
3 |
|
|
4 |
|
-export([prepare_reason/1, |
5 |
|
kick_session/2, |
6 |
|
kick_session/4, |
7 |
|
kick_sessions/2]). |
8 |
|
|
9 |
|
-spec kick_sessions(jid:jid(), binary()) -> [ok]. |
10 |
|
kick_sessions(JID, Reason) -> |
11 |
3 |
lists:map( |
12 |
|
fun(Resource) -> |
13 |
2 |
service_admin_extra_sessions:kick_session( |
14 |
|
jid:replace_resource(JID, Resource), Reason) |
15 |
|
end, |
16 |
|
ejabberd_sm:get_user_resources(JID)). |
17 |
|
|
18 |
|
-spec kick_session(jid:user(), jid:server(), jid:resource(), list() | binary()) -> ok. |
19 |
|
kick_session(User, Server, Resource, ReasonText) -> |
20 |
1 |
kick_session(jid:make(User, Server, Resource), prepare_reason(ReasonText)). |
21 |
|
|
22 |
|
-spec kick_session(jid:jid(), binary() | list()) -> ok. |
23 |
|
kick_session(JID, ReasonText) -> |
24 |
3 |
ejabberd_c2s:terminate_session(JID, prepare_reason(ReasonText)), |
25 |
3 |
ok. |
26 |
|
|
27 |
|
-spec prepare_reason(binary() | string()) -> binary(). |
28 |
|
prepare_reason(<<>>) -> |
29 |
:-( |
<<"Kicked by administrator">>; |
30 |
|
prepare_reason([Reason]) -> |
31 |
:-( |
prepare_reason(Reason); |
32 |
|
prepare_reason(Reason) when is_list(Reason) -> |
33 |
:-( |
list_to_binary(Reason); |
34 |
|
prepare_reason(Reason) when is_binary(Reason) -> |
35 |
7 |
Reason. |