./ct_report/coverage/mongoose_graphql_stanza_user_mutation.COVER.html

1 -module(mongoose_graphql_stanza_user_mutation).
2 -behaviour(mongoose_graphql).
3
4 -export([execute/4]).
5
6 -ignore_xref([execute/4]).
7
8 -include("../mongoose_graphql_types.hrl").
9 -include("mongoose_logger.hrl").
10 -include("jlib.hrl").
11
12 execute(Ctx, _Obj, <<"sendMessage">>, Args) ->
13 4 send_message(Ctx, Args);
14 execute(Ctx, _Obj, <<"sendMessageHeadLine">>, Args) ->
15 2 send_message_headline(Ctx, Args);
16 execute(Ctx, _Obj, <<"sendStanza">>, Args) ->
17 2 send_stanza(Ctx, Args).
18
19 send_message(Ctx, Args) ->
20 4 with_from(Ctx, Args, fun send_message2/1).
21
22 send_message_headline(Ctx, Args) ->
23 2 with_from(Ctx, Args, fun send_message_headline2/1).
24
25 send_message2(#{<<"from">> := From, <<"to">> := To, <<"body">> := Body}) ->
26 3 Packet = mongoose_stanza_helper:build_message(jid:to_binary(From), jid:to_binary(To), Body),
27 %% SkipAuth = false, because we already checked if From exists
28 3 mongoose_stanza_helper:route(From, To, Packet, false).
29
30 send_message_headline2(Args = #{<<"from">> := From, <<"to">> := To}) ->
31 1 Packet = mongoose_stanza_helper:build_message_with_headline(
32 jid:to_binary(From), jid:to_binary(To), Args),
33 1 mongoose_stanza_helper:route(From, To, Packet, false).
34
35 send_stanza(#{user := User}, #{<<"stanza">> := Packet}) ->
36 2 From = jid:from_binary(exml_query:attr(Packet, <<"from">>)),
37 2 To = jid:from_binary(exml_query:attr(Packet, <<"to">>)),
38 2 case compare_bare_jids(User, From) of
39 true ->
40 1 mongoose_stanza_helper:route(From, To, Packet, false);
41 false ->
42 1 {error, #{what => bad_from_jid}}
43 end.
44
45 4 compare_bare_jids(#jid{luser = U, lserver = S}, #jid{luser = U, lserver = S}) -> true;
46 3 compare_bare_jids(_, _) -> false.
47
48 with_from(_Ctx = #{user := User}, Args, Next) ->
49 6 case maps:get(<<"from">>, Args, null) of
50 null ->
51 1 Next(Args#{<<"from">> => User});
52 From ->
53 5 case compare_bare_jids(User, From) of
54 true ->
55 %% We still can allow a custom resource
56 3 Next(Args#{<<"from">> => From});
57 false ->
58 2 ?LOG_ERROR(#{what => bad_from_jid,
59
:-(
user_jid => User, from_jid => From}),
60 2 {error, #{what => bad_from_jid}}
61 end
62 end.
Line Hits Source