]> granicus.if.org Git - ejabberd/commitdiff
Re-read ACME certificates on config reload
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sun, 19 Nov 2017 06:56:05 +0000 (09:56 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Sun, 19 Nov 2017 06:56:05 +0000 (09:56 +0300)
src/ejabberd_acme.erl
src/ejabberd_pkix.erl

index 8eba9a352fdc44f6f4c72a9949bc2004d2e56278..9793b170eb0eee409b79edd5eacf18170e814809 100644 (file)
@@ -17,7 +17,7 @@
 %% gen_server callbacks
 -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
         terminate/2, code_change/3]).
--export([start_link/0, opt_type/1]).
+-export([start_link/0, opt_type/1, register_certfiles/0]).
 
 -include("ejabberd.hrl").
 -include("logger.hrl").
@@ -40,6 +40,7 @@ start_link() ->
 init([]) ->
     case filelib:ensure_dir(filename:join(acme_certs_dir(), "foo")) of
        ok ->
+           ejabberd_hooks:add(config_reloaded, ?MODULE, register_certfiles, 40),
            ejabberd_commands:register_commands(get_commands_spec()),
            register_certfiles(),
            {ok, #state{}};
@@ -61,6 +62,7 @@ handle_info(_Info, State) ->
     {noreply, State}.
 
 terminate(_Reason, _State) ->
+    ejabberd_hooks:delete(config_reloaded, ?MODULE, register_certfiles, 40),
     ejabberd_commands:unregister_commands(get_commands_spec()).
 
 code_change(_OldVsn, State, _Extra) ->
index 2fad9ea4ca41feb33213b554086a0e5e6e277138..37ec8b1cf6449df67e8ac8a2251b935ad4211906 100644 (file)
@@ -143,7 +143,7 @@ start_link() ->
     gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
 
 config_reloaded() ->
-    gen_server:cast(?MODULE, config_reloaded).
+    gen_server:call(?MODULE, config_reloaded, 60000).
 
 opt_type(ca_path) ->
     fun(Path) -> iolist_to_binary(Path) end;
@@ -219,18 +219,18 @@ handle_call({route_registered, Host}, _, State) ->
        {error, _} ->
            {reply, ok, State}
     end;
-handle_call(_Request, _From, State) ->
-    Reply = ok,
-    {reply, Reply, State}.
-
-handle_cast(config_reloaded, State) ->
+handle_call(config_reloaded, _From, State) ->
     State1 = State#state{paths = [], certs = #{}, keys = []},
     case add_certfiles(State1) of
        {ok, State2} ->
-           {noreply, State2};
-       {error, _} ->
-           {noreply, State}
+           {reply, ok, State2};
+       {error, _} = Err ->
+           {reply, Err, State}
     end;
+handle_call(_Request, _From, State) ->
+    Reply = ok,
+    {reply, Reply, State}.
+
 handle_cast(_Msg, State) ->
     {noreply, State}.