1 |
|
-module(mongoose_graphql_muc_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, [make_error/2, format_result/2, null_to_default/2, |
11 |
|
null_to_undefined/1]). |
12 |
|
|
13 |
|
execute(_Ctx, _Obj, <<"createInstantRoom">>, Args) -> |
14 |
3 |
create_instant_room(Args); |
15 |
|
execute(_Ctx, _Obj, <<"inviteUser">>, Args) -> |
16 |
3 |
invite_user(Args); |
17 |
|
execute(_Ctx, _Obj, <<"kickUser">>, Args) -> |
18 |
3 |
kick_user(Args); |
19 |
|
execute(_Ctx, _Obj, <<"sendMessageToRoom">>, Args) -> |
20 |
2 |
send_message_to_room(Args); |
21 |
|
execute(_Ctx, _Obj, <<"sendPrivateMessage">>, Args) -> |
22 |
1 |
send_private_message(Args); |
23 |
|
execute(_Ctx, _Obj, <<"changeRoomConfiguration">>, Args) -> |
24 |
2 |
change_room_config(Args); |
25 |
|
execute(_Ctx, _Obj, <<"deleteRoom">>, Args) -> |
26 |
3 |
delete_room(Args); |
27 |
|
execute(_Ctx, _Obj, <<"setUserRole">>, Args) -> |
28 |
6 |
set_user_role(Args); |
29 |
|
execute(_Ctx, _Obj, <<"setUserAffiliation">>, Args) -> |
30 |
7 |
set_user_affiliation(Args); |
31 |
|
execute(_Ctx, _Obj, <<"enterRoom">>, Args) -> |
32 |
4 |
enter_room(Args); |
33 |
|
execute(_Ctx, _Obj, <<"exitRoom">>, Args) -> |
34 |
1 |
exit_room(Args). |
35 |
|
|
36 |
|
-spec create_instant_room(map()) -> {ok, map()} | {error, resolver_error()}. |
37 |
|
create_instant_room(#{<<"mucDomain">> := MUCDomain, <<"name">> := Name, |
38 |
|
<<"owner">> := OwnerJID, <<"nick">> := Nick}) -> |
39 |
3 |
case mod_muc_api:create_instant_room(MUCDomain, Name, OwnerJID, Nick) of |
40 |
|
{ok, Room} -> |
41 |
1 |
{ok, mongoose_graphql_muc_helper:make_room_desc(Room)}; |
42 |
|
Error -> |
43 |
2 |
make_error(Error, #{mucDomain => MUCDomain, |
44 |
|
owner => jid:to_binary(OwnerJID)}) |
45 |
|
end. |
46 |
|
|
47 |
|
-spec invite_user(map()) -> {ok, binary()} | {error, resolver_error()}. |
48 |
|
invite_user(#{<<"room">> := RoomJID, <<"sender">> := SenderJID, |
49 |
|
<<"recipient">> := RecipientJID, <<"reason">> := Reason}) -> |
50 |
3 |
Reason2 = null_to_default(Reason, mongoose_graphql_muc_helper:default_invite_reason("admin")), |
51 |
3 |
Res = mod_muc_api:invite_to_room(RoomJID, SenderJID, RecipientJID, Reason2), |
52 |
3 |
format_result(Res, #{room => jid:to_binary(RoomJID), |
53 |
|
sender => jid:to_binary(SenderJID)}). |
54 |
|
|
55 |
|
-spec kick_user(map()) -> {ok, binary()} | {error, resolver_error()}. |
56 |
|
kick_user(#{<<"room">> := RoomJID, <<"nick">> := Nick, <<"reason">> := Reason}) -> |
57 |
3 |
Reason2 = null_to_default(Reason, mongoose_graphql_muc_helper:default_kick_reason("admin")), |
58 |
3 |
Res = mod_muc_api:kick_user_from_room(RoomJID, Nick, Reason2), |
59 |
3 |
format_result(Res, #{room => jid:to_binary(RoomJID)}). |
60 |
|
|
61 |
|
-spec send_message_to_room(map()) -> {ok, binary()} | {error, resolver_error()}. |
62 |
|
send_message_to_room(#{<<"room">> := RoomJID, <<"from">> := SenderJID, <<"body">> := Message}) -> |
63 |
2 |
Res = mod_muc_api:send_message_to_room(RoomJID, SenderJID, Message), |
64 |
2 |
format_result(Res, #{room => jid:to_binary(RoomJID), |
65 |
|
from => jid:to_binary(SenderJID)}). |
66 |
|
|
67 |
|
-spec send_private_message(map()) -> {ok, binary()} | {error, resolver_error()}. |
68 |
|
send_private_message(#{<<"room">> := RoomJID, <<"from">> := SenderJID, |
69 |
|
<<"toNick">> := ToNick, <<"body">> := Message}) -> |
70 |
1 |
Res = mod_muc_api:send_private_message(RoomJID, SenderJID, ToNick, Message), |
71 |
1 |
format_result(Res, #{room => jid:to_binary(RoomJID), |
72 |
|
from => jid:to_binary(SenderJID)}). |
73 |
|
|
74 |
|
-spec change_room_config(map()) -> {ok, map()} | {error, resolver_error()}. |
75 |
|
change_room_config(#{<<"room">> := RoomJID, <<"config">> := ConfigInput}) -> |
76 |
2 |
Fun = fun(Config) -> mongoose_graphql_muc_helper:make_muc_room_config(ConfigInput, Config) end, |
77 |
2 |
case mod_muc_api:modify_room_config(RoomJID, Fun) of |
78 |
|
{ok, Config} -> |
79 |
1 |
{ok, mongoose_graphql_muc_helper:muc_room_config_to_map(Config)}; |
80 |
|
Error -> |
81 |
1 |
make_error(Error, #{room => jid:to_binary(RoomJID)}) |
82 |
|
end. |
83 |
|
|
84 |
|
-spec delete_room(map()) -> {ok, binary()} | {error, resolver_error()}. |
85 |
|
delete_room(#{<<"room">> := RoomJID, <<"reason">> := Reason}) -> |
86 |
3 |
Reason2 = null_to_default(Reason, |
87 |
|
mongoose_graphql_muc_helper:default_room_removal_reason("admin")), |
88 |
3 |
Res = mod_muc_api:delete_room(RoomJID, Reason2), |
89 |
3 |
format_result(Res, #{room => jid:to_binary(RoomJID)}). |
90 |
|
|
91 |
|
-spec set_user_role(map()) -> {ok, binary()} | {error, resolver_error()}. |
92 |
|
set_user_role(#{<<"room">> := RoomJID, <<"nick">> := Nick, <<"role">> := Role}) -> |
93 |
6 |
Result = mod_muc_api:set_role(RoomJID, Nick, Role), |
94 |
6 |
format_result(Result, #{room => jid:to_binary(RoomJID)}). |
95 |
|
|
96 |
|
-spec set_user_affiliation(map()) -> {ok, binary()} | {error, resolver_error()}. |
97 |
|
set_user_affiliation(#{<<"room">> := RoomJID, <<"user">> := UserJID, <<"affiliation">> := Aff}) -> |
98 |
7 |
Result = mod_muc_api:set_affiliation(RoomJID, UserJID, Aff), |
99 |
7 |
format_result(Result, #{room => jid:to_binary(RoomJID)}). |
100 |
|
|
101 |
|
-spec enter_room(map()) -> {ok, binary()} | {error, resolver_error()}. |
102 |
|
enter_room(#{<<"room">> := RoomJID, <<"user">> := UserJID, <<"nick">> := Nick, |
103 |
|
<<"password">> := Password}) -> |
104 |
4 |
RoomJIDRes = jid:replace_resource(RoomJID, Nick), |
105 |
4 |
Password2 = null_to_undefined(Password), |
106 |
4 |
Result = mod_muc_api:enter_room(RoomJIDRes, UserJID, Password2), |
107 |
4 |
format_result(Result, #{room => jid:to_binary(RoomJID)}). |
108 |
|
|
109 |
|
-spec exit_room(map()) -> {ok, binary()} | {error, resolver_error()}. |
110 |
|
exit_room(#{<<"room">> := RoomJID, <<"user">> := UserJID, <<"nick">> := Nick}) -> |
111 |
1 |
RoomJIDRes = jid:replace_resource(RoomJID, Nick), |
112 |
1 |
Result = mod_muc_api:exit_room(RoomJIDRes, UserJID), |
113 |
1 |
format_result(Result, #{room => jid:to_binary(RoomJID)}). |