aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_auth.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-24 12:05:47 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-24 12:05:47 +0300
commit67d6ca9f101ef5577468e32c730fa8341df2e080 (patch)
treec89c3d21058a25a5d6313ccc759a2200d8245088 /src/ejabberd_auth.erl
parentFix a case clause and run c2s_filter_send on send_error/3 (diff)
Improve startup procedure
Diffstat (limited to 'src/ejabberd_auth.erl')
-rw-r--r--src/ejabberd_auth.erl35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/ejabberd_auth.erl b/src/ejabberd_auth.erl
index fd5b6b244..1639a3a54 100644
--- a/src/ejabberd_auth.erl
+++ b/src/ejabberd_auth.erl
@@ -27,12 +27,13 @@
-module(ejabberd_auth).
+-behaviour(gen_server).
-behaviour(ejabberd_config).
-author('alexey@process-one.net').
%% External exports
--export([start/0, start/1, stop/1, set_password/3, check_password/4,
+-export([start_link/0, start/1, stop/1, set_password/3, check_password/4,
check_password/6, check_password_with_authmodule/4,
check_password_with_authmodule/6, try_register/3,
dirty_get_registered_users/0, get_vh_registered_users/1,
@@ -43,12 +44,17 @@
is_user_exists/2, is_user_exists_in_other_modules/3,
remove_user/2, remove_user/3, plain_password_required/1,
store_type/1, entropy/1, backend_type/1]).
+%% gen_server callbacks
+-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
+ terminate/2, code_change/3]).
-export([auth_modules/1, opt_type/1]).
-include("ejabberd.hrl").
-include("logger.hrl").
+-record(state, {}).
+
-type scrammed_password() :: {binary(), binary(), binary(), non_neg_integer()}.
-type password() :: binary() | scrammed_password().
-export_type([password/0]).
@@ -81,11 +87,34 @@
-callback get_password(binary(), binary()) -> false | password().
-callback get_password_s(binary(), binary()) -> password().
-start() ->
+-spec start_link() -> {ok, pid()} | {error, any()}.
+start_link() ->
+ gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
+
+init([]) ->
ets:new(ejabberd_auth_modules, [named_table, public]),
ejabberd_hooks:add(host_up, ?MODULE, start, 30),
ejabberd_hooks:add(host_down, ?MODULE, stop, 80),
- lists:foreach(fun start/1, ?MYHOSTS).
+ lists:foreach(fun start/1, ?MYHOSTS),
+ {ok, #state{}}.
+
+handle_call(_Request, _From, State) ->
+ Reply = ok,
+ {reply, Reply, State}.
+
+handle_cast(_Msg, State) ->
+ {noreply, State}.
+
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ejabberd_hooks:delete(host_up, ?MODULE, start, 30),
+ ejabberd_hooks:delete(host_down, ?MODULE, stop, 80),
+ lists:foreach(fun stop/1, ?MYHOSTS).
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
start(Host) ->
Modules = auth_modules_from_config(Host),