./ct_report/coverage/mongoose_admin_api_stanzas.COVER.html

1 -module(mongoose_admin_api_stanzas).
2
3 -behaviour(mongoose_admin_api).
4 -export([routes/1]).
5
6 -behaviour(cowboy_rest).
7 -export([init/2,
8 is_authorized/2,
9 content_types_accepted/2,
10 allowed_methods/2,
11 from_json/2]).
12
13 -ignore_xref([to_json/2, from_json/2]).
14
15 -import(mongoose_admin_api, [parse_body/1, try_handle_request/3, throw_error/2]).
16
17 -type req() :: cowboy_req:req().
18 -type state() :: mongoose_admin_api:state().
19
20 -spec routes(state()) -> mongoose_http_handler:routes().
21 routes(State) ->
22 15 [{"/stanzas", ?MODULE, State}].
23
24 -spec init(req(), state()) -> {cowboy_rest, req(), state()}.
25 init(Req, State) ->
26
:-(
mongoose_admin_api:init(Req, State).
27
28 -spec is_authorized(req(), state()) -> {true | {false, iodata()}, req(), state()}.
29 is_authorized(Req, State) ->
30
:-(
mongoose_admin_api:is_authorized(Req, State).
31
32 -spec content_types_accepted(req(), state()) ->
33 {[{{binary(), binary(), '*'}, atom()}], req(), state()}.
34 content_types_accepted(Req, State) ->
35
:-(
{[
36 {{<<"application">>, <<"json">>, '*'}, from_json}
37 ], Req, State}.
38
39 -spec allowed_methods(req(), state()) -> {[binary()], req(), state()}.
40 allowed_methods(Req, State) ->
41
:-(
{[<<"OPTIONS">>, <<"POST">>], Req, State}.
42
43 %% @doc Called for a method of type "POST"
44 -spec from_json(req(), state()) -> {true | stop, req(), state()}.
45 from_json(Req, State) ->
46
:-(
try_handle_request(Req, State, fun handle_post/2).
47
48 %% Internal functions
49
50 handle_post(Req, State) ->
51
:-(
Args = parse_body(Req),
52
:-(
Stanza = get_stanza(Args),
53
:-(
case mongoose_stanza_api:send_stanza(undefined, Stanza) of
54 {ok, _} ->
55
:-(
{true, Req, State};
56 {_Error, Msg} ->
57
:-(
throw_error(bad_request, Msg)
58 end.
59
60 get_stanza(#{stanza := BinStanza}) ->
61
:-(
case exml:parse(BinStanza) of
62 {ok, Stanza} ->
63
:-(
Stanza;
64 {error, _} ->
65
:-(
throw_error(bad_request, <<"Malformed stanza">>)
66 end;
67 get_stanza(#{}) ->
68
:-(
throw_error(bad_request, <<"Missing stanza">>).
Line Hits Source