1 |
|
-module(mongoose_graphql_account_admin_mutation). |
2 |
|
-behaviour(mongoose_graphql). |
3 |
|
|
4 |
|
-export([execute/4]). |
5 |
|
|
6 |
|
-ignore_xref([execute/4]). |
7 |
|
|
8 |
|
-include("../mongoose_graphql_types.hrl"). |
9 |
|
|
10 |
|
-import(mongoose_graphql_helper, [format_result/2, make_error/2]). |
11 |
|
|
12 |
|
execute(_Ctx, _Obj, <<"registerUser">>, Args) -> |
13 |
3 |
register_user(Args); |
14 |
|
execute(_Ctx, _Obj, <<"removeUser">>, Args) -> |
15 |
2 |
remove_user(Args); |
16 |
|
execute(_Ctx, _Obj, <<"removeOldUsers">>, Args) -> |
17 |
2 |
remove_old_users(Args); |
18 |
|
execute(_Ctx, _Obj, <<"banUser">>, Args) -> |
19 |
2 |
ban_user(Args); |
20 |
|
execute(_Ctx, _Obj, <<"changeUserPassword">>, Args) -> |
21 |
3 |
change_user_password(Args). |
22 |
|
|
23 |
|
% Internal |
24 |
|
|
25 |
|
-spec register_user(map()) -> {ok, map()} | {error, resolver_error()}. |
26 |
|
register_user(#{<<"domain">> := Domain, <<"username">> := null, |
27 |
|
<<"password">> := Password}) -> |
28 |
1 |
case mongoose_account_api:register_generated_user(Domain, Password) of |
29 |
|
{{ok, Msg}, JID} -> |
30 |
1 |
{ok, make_user_payload(Msg, JID)}; |
31 |
|
{Result, JID} -> |
32 |
:-( |
format_result(Result, #{jid => JID}) |
33 |
|
end; |
34 |
|
register_user(#{<<"domain">> := Domain, <<"username">> := Username, |
35 |
|
<<"password">> := Password}) -> |
36 |
2 |
Result = mongoose_account_api:register_user(Username, Domain, Password), |
37 |
2 |
format_user_payload(Result, jid:make(Username, Domain, <<>>)). |
38 |
|
|
39 |
|
-spec remove_user(map()) -> {ok, map()} | {error, resolver_error()}. |
40 |
|
remove_user(#{<<"user">> := JID}) -> |
41 |
2 |
Result = mongoose_account_api:unregister_user(JID), |
42 |
2 |
format_user_payload(Result, JID). |
43 |
|
|
44 |
|
-spec remove_old_users(map()) -> {ok, map()} | {error, resolver_error()}. |
45 |
|
remove_old_users(#{<<"domain">> := null, <<"days">> := Days}) -> |
46 |
1 |
{{ok, Msg}, JIDs} = mongoose_account_api:delete_old_users(Days), |
47 |
1 |
{ok, make_old_users_payload(Msg, JIDs)}; |
48 |
|
remove_old_users(#{<<"domain">> := Domain, <<"days">> := Days}) -> |
49 |
1 |
{{ok, Msg}, JIDs} = mongoose_account_api:delete_old_users_for_domain(Domain, Days), |
50 |
1 |
{ok, make_old_users_payload(Msg, JIDs)}. |
51 |
|
|
52 |
|
-spec ban_user(map()) -> {ok, map()} | {error, resolver_error()}. |
53 |
|
ban_user(#{<<"user">> := JID, <<"reason">> := Reason}) -> |
54 |
2 |
Result = mongoose_account_api:ban_account(JID, Reason), |
55 |
2 |
format_user_payload(Result, JID). |
56 |
|
|
57 |
|
-spec change_user_password(map()) -> {ok, map()} | {error, resolver_error()}. |
58 |
|
change_user_password(#{<<"user">> := JID, <<"newPassword">> := Password}) -> |
59 |
3 |
Result = mongoose_account_api:change_password(JID, Password), |
60 |
3 |
format_user_payload(Result, JID). |
61 |
|
|
62 |
|
-spec format_user_payload({atom(), string()}, jid:jid()) -> {ok, map()} | {error, resolver_error()}. |
63 |
|
format_user_payload(InResult, JID) -> |
64 |
9 |
case InResult of |
65 |
|
{ok, Msg} -> |
66 |
4 |
{ok, make_user_payload(Msg, jid:to_binary(JID))}; |
67 |
|
Result -> |
68 |
5 |
make_error(Result, #{jid => JID}) |
69 |
|
end. |
70 |
|
|
71 |
|
-spec make_user_payload(string(), jid:literal_jid()) -> map(). |
72 |
|
make_user_payload(Msg, JID) -> |
73 |
5 |
#{<<"message">> => iolist_to_binary(Msg), <<"jid">> => JID}. |
74 |
|
|
75 |
|
-spec make_old_users_payload(string(), [jid:literal_jid()]) -> map(). |
76 |
|
make_old_users_payload(Msg, JIDs) -> |
77 |
2 |
Users = lists:map(fun(U) -> {ok, U} end, JIDs), |
78 |
2 |
#{<<"message">> => iolist_to_binary(Msg), <<"users">> => Users}. |