./ct_report/coverage/mongoose_graphql_muc_helper.COVER.html

1 -module(mongoose_graphql_muc_helper).
2
3 -export([make_rooms_payload/2, make_room_desc/1, muc_room_config_to_map/1, make_muc_room_config/2,
4 format_user/1, format_users/1, add_user_resource/2, format_affs/1]).
5
6 -export([default_kick_reason/1, default_invite_reason/1, default_room_removal_reason/1]).
7
8 -ignore_xref(format_user/1).
9
10 -include("mongoose_rsm.hrl").
11 -include("mod_muc_room.hrl").
12
13 -spec add_user_resource(jid:jid(), binary() | null) ->
14 {ok, jid:jid()} | {no_session, iolist()}.
15 add_user_resource(JID, null) ->
16 4 case mongoose_session_api:get_user_resource(JID, 1) of
17 {ok, Resource} ->
18 3 {ok, jid:replace_resource(JID, Resource)};
19 {wrong_res_number, _ErrMsg}->
20 1 {no_session, "Given user does not have any session"}
21 end;
22 add_user_resource(JID, Resource) ->
23 1 {ok, jid:replace_resource(JID, Resource)}.
24
25 make_rooms_payload(Rooms, #rsm_out{count = Count, index = Index, first = First, last = Last}) ->
26 6 Rooms2 = [{ok, make_room_desc(R)} || R <- Rooms],
27 6 #{<<"rooms">> => Rooms2, <<"count">> => Count, <<"index">> => Index,
28 <<"first">> => First, <<"last">> => Last}.
29
30 make_room_desc(#{jid := JID, title := Title} = Room) ->
31 92 Private = maps:get(private, Room, null),
32 92 UsersNumber = maps:get(users_number, Room, null),
33 92 #{<<"jid">> => JID, <<"title">> => Title,
34 <<"private">> => Private, <<"usersNumber">> => UsersNumber}.
35
36 default_invite_reason(EndpointName) ->
37 4 iolist_to_binary(io_lib:format("User invited through the ~s GraphQL API", [EndpointName])).
38
39 default_kick_reason(EndpointName) ->
40 6 iolist_to_binary(io_lib:format("User kicked through the ~s GraphQL API", [EndpointName])).
41
42 default_room_removal_reason(EndpointName) ->
43 6 iolist_to_binary(io_lib:format("Room deleted through the ~s GraphQL API", [EndpointName])).
44
45 format_users(Users) ->
46 3 [{ok, format_user(U)} || U <- Users].
47
48 format_user(#{jid := JID, role := Role, nick := Nick}) ->
49 6 #{<<"jid">> => JID, <<"role">> => Role, <<"nick">> => Nick}.
50
51 format_affs(Affs) ->
52 6 [{ok, format_aff(A)} || A <- Affs].
53
54 format_aff({JID, Aff}) ->
55 8 #{<<"jid">> => JID, <<"affiliation">> => Aff}.
56
57 -spec muc_room_config_to_map(mod_muc_room:config()) -> map().
58 muc_room_config_to_map(Conf) ->
59 4 #{<<"title">> => Conf#config.title,
60 <<"description">> => Conf#config.description,
61 <<"allowChangeSubject">> => Conf#config.allow_change_subj,
62 <<"allowQueryUsers">> => Conf#config.allow_query_users,
63 <<"allowPrivateMessages">> => Conf#config.allow_private_messages,
64 <<"allowVisitorStatus">> => Conf#config.allow_visitor_status,
65 <<"allowVisitorNickchange">> => Conf#config.allow_visitor_nickchange,
66 <<"public">> => Conf#config.public,
67 <<"publicList">> => Conf#config.public_list,
68 <<"persistent">> => Conf#config.persistent,
69 <<"moderated">> => Conf#config.moderated,
70 <<"membersByDefault">> => Conf#config.members_by_default,
71 <<"membersOnly">> => Conf#config.members_only,
72 <<"allowUserInvites">> => Conf#config.allow_user_invites,
73 <<"allowMultipleSession">> => Conf#config.allow_multiple_sessions,
74 <<"passwordProtected">> => Conf#config.password_protected,
75 <<"password">> => Conf#config.password,
76 <<"anonymous">> => Conf#config.anonymous,
77 <<"mayGetMemberList">> => format_maygetmemberlist(Conf#config.maygetmemberlist),
78 <<"maxUsers">> => Conf#config.max_users,
79 <<"logging">> => Conf#config.logging}.
80
81 -spec make_muc_room_config(map(), mod_muc_room:config()) -> mod_muc_room:config().
82 make_muc_room_config(Map, Conf) ->
83 2 #config{
84 title = maybe_value(<<"title">>, Conf#config.title, Map),
85 description = maybe_value(<<"description">>, Conf#config.description, Map),
86 allow_change_subj = maybe_value(<<"allowChangeSubject">>, Conf#config.allow_change_subj, Map),
87 allow_query_users = maybe_value(<<"allowQueryUsers">>, Conf#config.allow_query_users, Map),
88 allow_private_messages = maybe_value(<<"allowPrivateMessages">>,
89 Conf#config.allow_private_messages, Map),
90 allow_visitor_status = maybe_value(<<"allowVisitorStatus">>,
91 Conf#config.allow_visitor_status, Map),
92 allow_visitor_nickchange = maybe_value(<<"allowVisitorNickchange">>,
93 Conf#config.allow_visitor_nickchange, Map),
94 public = maybe_value(<<"public">>, Conf#config.public, Map),
95 public_list = maybe_value(<<"publicList">>, Conf#config.public_list, Map),
96 persistent = maybe_value(<<"persistent">>, Conf#config.persistent, Map),
97 moderated = maybe_value(<<"moderated">>, Conf#config.moderated, Map),
98 members_by_default = maybe_value(<<"membersByDefault">>, Conf#config.members_by_default, Map),
99 members_only = maybe_value(<<"membersOnly">>, Conf#config.members_only, Map),
100 allow_user_invites = maybe_value(<<"allowUserInvites">>, Conf#config.allow_user_invites, Map),
101 allow_multiple_sessions = maybe_value(<<"allowMultipleSession">>,
102 Conf#config.allow_multiple_sessions, Map),
103 password_protected = maybe_value(<<"passwordProtected">>,
104 Conf#config.password_protected, Map),
105 password = maybe_value(<<"password">>, Conf#config.password, Map),
106 anonymous = maybe_value(<<"anonymous">>, Conf#config.anonymous, Map),
107 maygetmemberlist = maybe_value(<<"mayGetMemberList">>, Conf#config.maygetmemberlist, Map),
108 max_users = maybe_value(<<"maxUsers">>, Conf#config.max_users, Map),
109 logging = maybe_value(<<"logging">>, Conf#config.logging, Map)
110 }.
111
112 maybe_value(Key, Default, Map) ->
113 42 case maps:get(Key, Map) of
114 36 null -> Default;
115 6 Val -> Val
116 end.
117
118 4 format_maygetmemberlist(Elements) -> [{ok, E} || E <- Elements].
Line Hits Source