./ct_report/coverage/mongoose_gen_auth.COVER.html

1 %%% @doc Behaviour and API for authentication backends
2 -module(mongoose_gen_auth).
3
4 -export([start/2,
5 stop/2,
6 config_spec/1,
7 supports_sasl_module/3,
8 authorize/2,
9 check_password/5,
10 check_password/7,
11 set_password/5,
12 try_register/5,
13 get_registered_users/4,
14 get_registered_users_number/4,
15 get_password/4,
16 get_password_s/4,
17 does_user_exist/4,
18 supported_features/1,
19 remove_user/4,
20 remove_domain/3]).
21
22 -ignore_xref([behaviour_info/1]).
23
24 -import(backend_module, [is_exported/3]).
25
26 %% Mandatory callbacks
27
28 -callback start(HostType :: mongooseim:host_type()) -> ok.
29
30 -callback stop(HostType :: mongooseim:host_type()) -> ok.
31
32 -callback config_spec() -> mongoose_config_spec:config_section().
33
34 -callback supports_sasl_module(HostType :: mongooseim:host_type(),
35 Module :: cyrsasl:sasl_module()) ->
36 boolean().
37
38 -callback does_user_exist(HostType :: mongooseim:host_type(),
39 User :: jid:luser(),
40 Server :: jid:lserver()) ->
41 boolean() | {error, atom()}.
42
43 %% credentials already contain host type
44 -callback authorize(mongoose_credentials:t()) -> {ok, mongoose_credentials:t()}
45 | {error, any()}.
46
47 %% Optional callbacks
48
49 -callback try_register(HostType :: mongooseim:host_type(),
50 User :: jid:luser(),
51 Server :: jid:lserver(),
52 Password :: binary()) ->
53 ok | {error, exists | not_allowed | term()}.
54
55 -callback get_registered_users(HostType :: mongooseim:host_type(),
56 Server :: jid:lserver(),
57 Opts :: list()) ->
58 [jid:simple_bare_jid()].
59
60 -callback get_registered_users_number(HostType :: mongooseim:host_type(),
61 Server :: jid:lserver(),
62 Opts :: list()) ->
63 non_neg_integer().
64
65 -callback get_password(HostType :: mongooseim:host_type(),
66 User :: jid:luser(),
67 Server :: jid:lserver()) ->
68 ejabberd_auth:passterm() | false.
69
70 -callback get_password_s(HostType :: mongooseim:host_type(),
71 User :: jid:luser(),
72 Server :: jid:lserver()) ->
73 binary().
74
75 -callback set_password(HostType :: mongooseim:host_type(),
76 User :: jid:luser(),
77 Server :: jid:lserver(),
78 Password :: binary()) ->
79 ok | {error, not_allowed | invalid_jid | user_not_found}.
80
81 -callback remove_user(HostType :: mongooseim:host_type(),
82 User :: jid:luser(),
83 Server :: jid:lserver()) ->
84 ok | {error, not_allowed}.
85
86 -callback remove_domain(HostType :: mongooseim:host_type(), Server :: jid:lserver()) ->
87 ok | {error, term()}.
88
89 -callback supported_features() -> [Feature::atom()].
90
91 %% Implementation of check_password callbacks is required
92 %% for the corresponding check_password interfaces of ejabberd_auth module.
93 %%
94 %% With the help of ejabberd_auth:authorize_with_check_password/2 function,
95 %% these callbacks can be reused to simplify implementation of the M:authorize/1 interface.
96 -callback check_password(HostType :: mongooseim:host_type(),
97 LUser :: jid:luser(),
98 LServer :: jid:lserver(),
99 Password :: binary()) -> boolean().
100
101 -callback check_password(HostType :: mongooseim:host_type(),
102 LUser :: jid:luser(),
103 LServer :: jid:lserver(),
104 Password :: binary(),
105 Digest :: binary(),
106 DigestGen :: fun()) -> boolean().
107
108 %% See the API function definitions below for default values
109 -optional_callbacks([config_spec/0,
110 try_register/4,
111 get_registered_users/3,
112 get_registered_users_number/3,
113 get_password/3,
114 get_password_s/3,
115 set_password/4,
116 remove_user/3,
117 remove_domain/2,
118 supported_features/0,
119 check_password/4,
120 check_password/6]).
121
122 -include("mongoose_config_spec.hrl").
123
124 %% API
125
126 -spec start(ejabberd_auth:authmodule(), mongooseim:host_type()) -> ok.
127 start(Mod, HostType) ->
128 430 Mod:start(HostType).
129
130 -spec stop(ejabberd_auth:authmodule(), mongooseim:host_type()) -> ok.
131 stop(Mod, HostType) ->
132 1 Mod:stop(HostType).
133
134 -spec config_spec(ejabberd_auth:authmodule()) -> mongoose_config_spec:config_section().
135 config_spec(Mod) ->
136 1660 case is_exported(Mod, config_spec, 0) of
137 1328 true -> Mod:config_spec();
138 332 false -> #section{items = #{},
139 format_items = map}
140 end.
141
142 -spec supports_sasl_module(ejabberd_auth:authmodule(), mongooseim:host_type(),
143 cyrsasl:sasl_module()) -> boolean().
144 supports_sasl_module(Mod, HostType, SASLModule) ->
145 74197 Mod:supports_sasl_module(HostType, SASLModule).
146
147 -spec does_user_exist(ejabberd_auth:authmodule(), mongooseim:host_type(),
148 jid:luser(), jid:lserver()) ->
149 boolean() | {error, atom()}.
150 does_user_exist(Mod, HostType, LUser, LServer) ->
151 3692 Mod:does_user_exist(HostType, LUser, LServer).
152
153 -spec authorize(ejabberd_auth:authmodule(), mongoose_credentials:t()) ->
154 {ok, mongoose_credentials:t()} | {error, any()}.
155 authorize(Mod, Creds) ->
156 3085 Mod:authorize(Creds).
157
158 -spec try_register(ejabberd_auth:authmodule(), mongooseim:host_type(),
159 jid:luser(), jid:lserver(), binary()) ->
160 ok | {error, exists | not_allowed | term()}.
161 try_register(Mod, HostType, LUser, LServer, Password) ->
162 2406 case is_exported(Mod, try_register, 4) of
163 2406 true -> Mod:try_register(HostType, LUser, LServer, Password);
164
:-(
false -> {error, not_allowed}
165 end.
166
167 -spec get_registered_users(ejabberd_auth:authmodule(), mongooseim:host_type(),
168 jid:lserver(), list()) ->
169 [jid:simple_bare_jid()].
170 get_registered_users(Mod, HostType, LServer, Opts) ->
171 219 case is_exported(Mod, get_registered_users, 3) of
172 219 true -> Mod:get_registered_users(HostType, LServer, Opts);
173
:-(
false -> []
174 end.
175
176 -spec get_registered_users_number(ejabberd_auth:authmodule(), mongooseim:host_type(),
177 jid:lserver(), list()) ->
178 non_neg_integer().
179 get_registered_users_number(Mod, HostType, LServer, Opts) ->
180 161 case is_exported(Mod, get_registered_users_number, 3) of
181 161 true -> Mod:get_registered_users_number(HostType, LServer, Opts);
182
:-(
false -> 0
183 end.
184
185 -spec get_password(ejabberd_auth:authmodule(), mongooseim:host_type(),
186 jid:luser(), jid:lserver()) ->
187 ejabberd_auth:passterm() | false.
188 get_password(Mod, HostType, LUser, LServer) ->
189
:-(
case is_exported(Mod, get_password, 3) of
190
:-(
true -> Mod:get_password(HostType, LUser, LServer);
191
:-(
false -> false
192 end.
193
194 -spec get_password_s(ejabberd_auth:authmodule(), mongooseim:host_type(),
195 jid:luser(), jid:lserver()) ->
196 binary().
197 get_password_s(Mod, HostType, LUser, LServer) ->
198 1 case is_exported(Mod, get_password_s, 3) of
199
:-(
true -> Mod:get_password_s(HostType, LUser, LServer);
200 1 false -> <<>>
201 end.
202
203 -spec set_password(ejabberd_auth:authmodule(), mongooseim:host_type(),
204 jid:luser(), jid:lserver(), binary()) ->
205 ok | {error, not_allowed | invalid_jid}.
206 set_password(Mod, HostType, LUser, LServer, Password) ->
207 21 case is_exported(Mod, set_password, 4) of
208 21 true -> Mod:set_password(HostType, LUser, LServer, Password);
209
:-(
false -> {error, not_allowed}
210 end.
211
212 -spec remove_user(ejabberd_auth:authmodule(), mongooseim:host_type(),
213 jid:luser(), jid:lserver()) ->
214 ok | {error, not_allowed}.
215 remove_user(Mod, HostType, LUser, LServer) ->
216 2457 case is_exported(Mod, remove_user, 3) of
217 2457 true -> Mod:remove_user(HostType, LUser, LServer);
218
:-(
false -> {error, not_allowed}
219 end.
220
221 -spec remove_domain(ejabberd_auth:authmodule(), mongooseim:host_type(), jid:lserver()) ->
222 ok | {error, term()}.
223 remove_domain(Mod, HostType, Domain) ->
224 1 case is_exported(Mod, remove_domain, 2) of
225 1 true -> Mod:remove_domain(HostType, Domain);
226
:-(
false -> ok
227 end.
228
229 -spec supported_features(ejabberd_auth:authmodule()) -> [atom()].
230 supported_features(Mod) ->
231 180 case is_exported(Mod, supported_features, 0) of
232 180 true -> Mod:supported_features();
233
:-(
false -> []
234 end.
235
236 -spec check_password(ejabberd_auth:authmodule(), mongooseim:host_type(),
237 jid:luser(), jid:lserver(), binary()) -> boolean().
238 check_password(Mod, HostType, LUser, LServer, Password) ->
239 3039 case is_exported(Mod, check_password, 4) of
240 3039 true -> Mod:check_password(HostType, LUser, LServer, Password);
241
:-(
false -> false
242 end.
243
244 -spec check_password(ejabberd_auth:authmodule(), mongooseim:host_type(),
245 jid:luser(), jid:lserver(), binary(), binary(), fun()) -> boolean().
246 check_password(Mod, HostType, LUser, LServer, Password, Digest, DigestGen) ->
247
:-(
case is_exported(Mod, check_password, 6) of
248
:-(
true -> Mod:check_password(HostType, LUser, LServer, Password, Digest, DigestGen);
249
:-(
false -> false
250 end.
Line Hits Source