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 |
80 |
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, #{user := User, |
48 |
|
role_in_room := owner, |
49 |
|
jid := #jid{lserver = Server}, |
50 |
|
room_id := RoomID} = State) -> |
51 |
11 |
{ok, Body, Req2} = cowboy_req:read_body(Req), |
52 |
11 |
case mongoose_client_api:json_to_map(Body) of |
53 |
|
{ok, #{<<"user">> := UserToInvite}} when is_binary(UserToInvite) -> |
54 |
11 |
mod_muc_light_commands:change_affiliation(Server, RoomID, User, 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, |
65 |
|
user := User} = State) -> |
66 |
3 |
UserToRemove = cowboy_req:binding(user, Req), |
67 |
3 |
remove_user_from_room(User, UserToRemove, Req, State); |
68 |
|
delete_resource(Req, #{user := User} = State) -> |
69 |
1 |
UserToRemove = cowboy_req:binding(user, Req), |
70 |
1 |
case UserToRemove of |
71 |
|
User -> |
72 |
1 |
remove_user_from_room(User, User, Req, State); |
73 |
|
_ -> |
74 |
:-( |
mongoose_client_api:forbidden_request(Req, State) |
75 |
|
end. |
76 |
|
|
77 |
|
remove_user_from_room(Remover, Target, Req, |
78 |
|
#{jid := #jid{lserver = Server}, room_id := RoomID} = State) -> |
79 |
4 |
mod_muc_light_commands:change_affiliation(Server, RoomID, Remover, Target, <<"none">>), |
80 |
4 |
{true, Req, State}. |