aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2021-12-03 12:16:20 +0100
committerBadlop <badlop@process-one.net>2021-12-03 16:09:55 +0100
commitdab4c0cc107d8e829f2e68fa37605fa07b26f831 (patch)
tree5c69050869d21ba5d6636e329ea5fe6f5fdbe395 /src
parentMinor improvements in conversejs documentation (diff)
New allow_modules option to restrict registration modules
Diffstat (limited to 'src')
-rw-r--r--src/mod_register.erl26
-rw-r--r--src/mod_register_web.erl2
2 files changed, 23 insertions, 5 deletions
diff --git a/src/mod_register.erl b/src/mod_register.erl
index 379318da6..0bb0978ef 100644
--- a/src/mod_register.erl
+++ b/src/mod_register.erl
@@ -32,11 +32,13 @@
-behaviour(gen_mod).
-export([start/2, stop/1, reload/3, stream_feature_register/2,
- c2s_unauthenticated_packet/2, try_register/4,
+ c2s_unauthenticated_packet/2, try_register/4, try_register/5,
process_iq/1, send_registration_notifications/3,
mod_opt_type/1, mod_options/1, depends/2,
format_error/1, mod_doc/0]).
+-deprecated({try_register, 4}).
+
-include("logger.hrl").
-include_lib("xmpp/include/xmpp.hrl").
-include("translate.hrl").
@@ -283,7 +285,7 @@ try_register_or_set_password(User, Server, Password,
_ when CaptchaSucceed ->
case check_from(From, Server) of
allow ->
- case try_register(User, Server, Password, Source, Lang) of
+ case try_register(User, Server, Password, Source, ?MODULE, Lang) of
ok ->
xmpp:make_iq_result(IQ);
{error, Error} ->
@@ -328,6 +330,13 @@ try_set_password(User, Server, Password, #iq{lang = Lang, meta = M} = IQ) ->
xmpp:make_error(IQ, xmpp:err_internal_server_error(format_error(Why), Lang))
end.
+try_register(User, Server, Password, SourceRaw, Module) ->
+ Modules = mod_register_opt:allow_modules(Server),
+ case (Modules == all) orelse lists:member(Module, Modules) of
+ true -> try_register(User, Server, Password, SourceRaw);
+ false -> {error, eaccess}
+ end.
+
try_register(User, Server, Password, SourceRaw) ->
case jid:is_nodename(User) of
false ->
@@ -363,8 +372,8 @@ try_register(User, Server, Password, SourceRaw) ->
end
end.
-try_register(User, Server, Password, SourceRaw, Lang) ->
- case try_register(User, Server, Password, SourceRaw) of
+try_register(User, Server, Password, SourceRaw, Module, Lang) ->
+ case try_register(User, Server, Password, SourceRaw, Module) of
ok ->
JID = jid:make(User, Server),
Source = may_remove_resource(SourceRaw),
@@ -597,6 +606,8 @@ mod_opt_type(access_from) ->
econf:acl();
mod_opt_type(access_remove) ->
econf:acl();
+mod_opt_type(allow_modules) ->
+ econf:either(all, econf:list(econf:atom()));
mod_opt_type(captcha_protected) ->
econf:bool();
mod_opt_type(ip_access) ->
@@ -623,6 +634,7 @@ mod_options(_Host) ->
[{access, all},
{access_from, none},
{access_remove, all},
+ {allow_modules, all},
{captcha_protected, false},
{ip_access, all},
{password_strength, 0},
@@ -661,6 +673,12 @@ mod_doc() ->
desc =>
?T("Specify rules to restrict access for user unregistration. "
"By default any user is able to unregister their account.")}},
+ {allow_modules,
+ #{value => "all | [Module, ...]",
+ desc =>
+ ?T("List of modules that can register accounts, or 'all'. "
+ "The default value is 'all', which is equivalent to "
+ "something like '[mod_register, mod_register_web]'.")}},
{captcha_protected,
#{value => "true | false",
desc =>
diff --git a/src/mod_register_web.erl b/src/mod_register_web.erl
index 1ac3b58dc..0cf4bcff8 100644
--- a/src/mod_register_web.erl
+++ b/src/mod_register_web.erl
@@ -521,7 +521,7 @@ register_account(Username, Host, Password, Ip) ->
end.
register_account2(Username, Host, Password, Ip) ->
- case mod_register:try_register(Username, Host, Password, Ip)
+ case mod_register:try_register(Username, Host, Password, Ip, ?MODULE)
of
ok ->
{success, ok, {Username, Host, Password}};