1 |
|
-module(mongoose_client_api_rooms_config). |
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 |
|
|
13 |
|
-export([from_json/2]). |
14 |
|
|
15 |
|
-ignore_xref([from_json/2, trails/0]). |
16 |
|
|
17 |
|
-include("mongoose.hrl"). |
18 |
|
-include("jlib.hrl"). |
19 |
|
-include("mongoose_rsm.hrl"). |
20 |
|
-include_lib("exml/include/exml.hrl"). |
21 |
|
|
22 |
|
trails() -> |
23 |
80 |
mongoose_client_api_rooms_config_doc:trails(). |
24 |
|
|
25 |
|
init(Req, Opts) -> |
26 |
3 |
mongoose_client_api:init(Req, Opts). |
27 |
|
|
28 |
|
is_authorized(Req, State) -> |
29 |
3 |
mongoose_client_api:is_authorized(Req, State). |
30 |
|
|
31 |
|
content_types_provided(Req, State) -> |
32 |
3 |
mongoose_client_api_rooms:content_types_provided(Req, State). |
33 |
|
|
34 |
|
content_types_accepted(Req, State) -> |
35 |
3 |
mongoose_client_api_rooms:content_types_accepted(Req, State). |
36 |
|
|
37 |
|
allowed_methods(Req, State) -> |
38 |
3 |
{[<<"OPTIONS">>, <<"PUT">>], Req, State}. |
39 |
|
|
40 |
|
resource_exists(Req, State) -> |
41 |
3 |
mongoose_client_api_rooms:resource_exists(Req, State). |
42 |
|
|
43 |
|
from_json(Req, State = #{was_replied := true}) -> |
44 |
:-( |
{true, Req, State}; |
45 |
|
from_json(Req, State) -> |
46 |
3 |
Method = cowboy_req:method(Req), |
47 |
3 |
{ok, Body, Req2} = cowboy_req:read_body(Req), |
48 |
3 |
case mongoose_client_api:json_to_map(Body) of |
49 |
|
{ok, #{<<"name">> := N, <<"subject">> := S} = JSONData} when is_binary(N), is_binary(S) -> |
50 |
3 |
handle_request(Method, JSONData, Req2, State); |
51 |
|
_ -> |
52 |
:-( |
{false, Req, State} |
53 |
|
end. |
54 |
|
|
55 |
|
handle_request(Method, JSONData, Req, State) -> |
56 |
3 |
case handle_request_by_method(Method, JSONData, Req, State) of |
57 |
|
ok -> |
58 |
2 |
{true, Req, State}; |
59 |
|
{error, internal, not_allowed} -> |
60 |
1 |
mongoose_client_api:forbidden_request(Req, State); |
61 |
|
{error, internal, _} -> |
62 |
:-( |
{false, Req, State} |
63 |
|
end. |
64 |
|
|
65 |
|
handle_request_by_method(<<"PUT">>, |
66 |
|
#{<<"name">> := Name, <<"subject">> := Subject}, |
67 |
|
Req, State) -> |
68 |
3 |
mongoose_client_api_rooms:assert_room_id_set(Req, State), |
69 |
3 |
#{user := User, jid := #jid{lserver = Server}, room_id := RoomID} = State, |
70 |
3 |
mod_muc_light_commands:change_room_config(Server, RoomID, Name, User, Subject). |