./ct_report/coverage/mongoose_graphql_stanza_admin_mutation.COVER.html

1 -module(mongoose_graphql_stanza_admin_mutation).
2
3 -export([execute/4]).
4
5 -ignore_xref([execute/4]).
6
7 -include("../mongoose_graphql_types.hrl").
8 -include("mongoose_logger.hrl").
9 -include("jlib.hrl").
10
11 -type result() :: {ok, map()} | {error, term()}.
12
13 -spec execute(graphql:endpoint_context(), graphql:ast(), binary(), map()) ->
14 result().
15 execute(_Ctx, _Obj, <<"sendMessage">>, Opts) ->
16
:-(
send_message(Opts);
17 execute(_Ctx, _Obj, <<"sendMessageHeadLine">>, Opts) ->
18
:-(
send_message_headline(Opts);
19 execute(_Ctx, _Obj, <<"sendStanza">>, Opts) ->
20
:-(
send_stanza(Opts).
21
22 send_message(#{<<"from">> := From, <<"to">> := To, <<"body">> := Body}) ->
23
:-(
Packet = mongoose_stanza_helper:build_message(jid:to_binary(From), jid:to_binary(To), Body),
24
:-(
do_routing(From, To, Packet).
25
26 send_message_headline(Opts = #{<<"from">> := From, <<"to">> := To}) ->
27
:-(
Packet = build_message_with_headline(jid:to_binary(From), jid:to_binary(To), Opts),
28
:-(
do_routing(From, To, Packet).
29
30 send_stanza(#{<<"stanza">> := Packet}) ->
31
:-(
From = jid:from_binary(exml_query:attr(Packet, <<"from">>)),
32
:-(
To = jid:from_binary(exml_query:attr(Packet, <<"to">>)),
33
:-(
do_routing(From, To, Packet).
34
35 do_routing(From = #jid{lserver = LServer}, To, Packet) ->
36
:-(
case mongoose_graphql_helper:check_user(From) of
37 {ok, HostType} ->
38
:-(
do_routing2(HostType, LServer, From, To, Packet);
39 Error ->
40
:-(
Error
41 end.
42
43 do_routing2(HostType, LServer, From, To, Packet) ->
44 %% Based on mod_commands:do_send_packet/3
45
:-(
Acc = mongoose_acc:new(#{location => ?LOCATION,
46 host_type => HostType,
47 lserver => LServer,
48 element => Packet}),
49
:-(
Acc1 = mongoose_hooks:user_send_packet(Acc, From, To, Packet),
50
:-(
Acc2 = ejabberd_router:route(From, To, Acc1),
51
:-(
MessID = mod_mam_utils:get_mam_id_ext(Acc2),
52
:-(
{ok, #{ <<"id">> => MessID }}.
53
54 build_message_with_headline(FromBin, ToBin,
55 #{<<"body">> := Body, <<"subject">> := Subject}) ->
56
:-(
Children = maybe_cdata_elem(<<"subject">>, Subject) ++
57 maybe_cdata_elem(<<"body">>, Body),
58
:-(
Attrs = [{<<"type">>, <<"headline">>},
59 {<<"id">>, mongoose_bin:gen_from_crypto()},
60 {<<"from">>, FromBin},
61 {<<"to">>, ToBin}],
62
:-(
#xmlel{name = <<"message">>, attrs = Attrs, children = Children}.
63
64
:-(
maybe_cdata_elem(_, null) -> [];
65
:-(
maybe_cdata_elem(_, <<>>) -> [];
66 maybe_cdata_elem(Name, Text) when is_binary(Text) ->
67
:-(
[cdata_elem(Name, Text)].
68
69 cdata_elem(Name, Text) when is_binary(Name), is_binary(Text) ->
70
:-(
#xmlel{name = Name, children = [#xmlcdata{content = Text}]}.
Line Hits Source