1 |
|
-module(mongoose_client_api_rooms_users). |
2 |
|
-behaviour(cowboy_rest). |
3 |
|
|
4 |
|
-export([trails/0]). |
5 |
|
|
6 |
|
-export([init/2]). |
7 |
|
-export([content_types_provided/2]). |
8 |
|
-export([content_types_accepted/2]). |
9 |
|
-export([is_authorized/2]). |
10 |
|
-export([allowed_methods/2]). |
11 |
|
-export([resource_exists/2]). |
12 |
|
-export([allow_missing_post/2]). |
13 |
|
|
14 |
|
-export([from_json/2]). |
15 |
|
-export([delete_resource/2]). |
16 |
|
|
17 |
|
-ignore_xref([from_json/2, trails/0]). |
18 |
|
|
19 |
|
-include("mongoose.hrl"). |
20 |
|
-include("jlib.hrl"). |
21 |
|
-include_lib("exml/include/exml.hrl"). |
22 |
|
|
23 |
|
trails() -> |
24 |
82 |
mongoose_client_api_rooms_users_doc:trails(). |
25 |
|
|
26 |
|
init(Req, Opts) -> |
27 |
16 |
mongoose_client_api:init(Req, Opts). |
28 |
|
|
29 |
|
is_authorized(Req, State) -> |
30 |
16 |
mongoose_client_api:is_authorized(Req, State). |
31 |
|
|
32 |
|
content_types_provided(Req, State) -> |
33 |
16 |
mongoose_client_api_rooms:content_types_provided(Req, State). |
34 |
|
|
35 |
|
content_types_accepted(Req, State) -> |
36 |
12 |
mongoose_client_api_rooms:content_types_accepted(Req, State). |
37 |
|
|
38 |
|
allowed_methods(Req, State) -> |
39 |
16 |
{[<<"OPTIONS">>, <<"POST">>, <<"DELETE">>], Req, State}. |
40 |
|
|
41 |
|
resource_exists(Req, State) -> |
42 |
16 |
mongoose_client_api_rooms:resource_exists(Req, State). |
43 |
|
|
44 |
|
allow_missing_post(Req, State) -> |
45 |
:-( |
{false, Req, State}. |
46 |
|
|
47 |
|
from_json(Req, #{role_in_room := owner, |
48 |
|
jid := UserJID, |
49 |
|
room := #{jid := RoomJID}} = State) -> |
50 |
11 |
{ok, Body, Req2} = cowboy_req:read_body(Req), |
51 |
11 |
case mongoose_client_api:json_to_map(Body) of |
52 |
|
{ok, #{<<"user">> := UserToInvite}} when is_binary(UserToInvite) -> |
53 |
11 |
mod_muc_light_api:change_affiliation(RoomJID, UserJID, |
54 |
|
jid:from_binary(UserToInvite), <<"member">>), |
55 |
11 |
{true, Req2, State}; |
56 |
|
_ -> |
57 |
:-( |
{false, Req, State} |
58 |
|
end; |
59 |
|
from_json(Req, State) -> |
60 |
1 |
mongoose_client_api:forbidden_request(Req, State). |
61 |
|
|
62 |
|
delete_resource(Req, #{role_in_room := none} = State) -> |
63 |
:-( |
mongoose_client_api:forbidden_request(Req, State); |
64 |
|
delete_resource(Req, #{role_in_room := owner} = State) -> |
65 |
3 |
UserToRemove = cowboy_req:binding(user, Req), |
66 |
3 |
remove_user_from_room(UserToRemove, Req, State); |
67 |
|
delete_resource(Req, #{user := User} = State) -> |
68 |
1 |
UserToRemove = cowboy_req:binding(user, Req), |
69 |
1 |
case UserToRemove of |
70 |
|
User -> |
71 |
1 |
remove_user_from_room(User, Req, State); |
72 |
|
_ -> |
73 |
:-( |
mongoose_client_api:forbidden_request(Req, State) |
74 |
|
end. |
75 |
|
|
76 |
|
remove_user_from_room(Target, Req, |
77 |
|
#{jid := UserJID, room := #{jid := RoomJID}} = State) -> |
78 |
4 |
mod_muc_light_api:change_affiliation(RoomJID, UserJID, jid:from_binary(Target), <<"none">>), |
79 |
4 |
{true, Req, State}. |