فهرست منبع

Merge pull request #13998 from lafirest/fix/oidc_clause

fix(sso): isolates OIDC workers and the SSO manager
lafirest 1 سال پیش
والد
کامیت
75d0c59070

+ 1 - 1
apps/emqx_conf/src/emqx_conf.app.src

@@ -1,6 +1,6 @@
 {application, emqx_conf, [
     {description, "EMQX configuration management"},
-    {vsn, "0.4.0"},
+    {vsn, "0.4.1"},
     {registered, []},
     {mod, {emqx_conf_app, []}},
     {applications, [kernel, stdlib]},

+ 1 - 1
apps/emqx_dashboard_sso/src/emqx_dashboard_sso.app.src

@@ -1,6 +1,6 @@
 {application, emqx_dashboard_sso, [
     {description, "EMQX Dashboard Single Sign-On"},
-    {vsn, "0.1.7"},
+    {vsn, "0.1.8"},
     {registered, [emqx_dashboard_sso_sup]},
     {applications, [
         kernel,

+ 4 - 4
apps/emqx_dashboard_sso/src/emqx_dashboard_sso_oidc_session.erl

@@ -46,7 +46,7 @@ start_link(Cfg) ->
 
 start(Name, #{issuer := Issuer, session_expiry := SessionExpiry0}) ->
     case
-        emqx_dashboard_sso_sup:start_child(
+        emqx_dashboard_sso_oidc_sup:start_child(
             oidcc_provider_configuration_worker,
             [
                 #{
@@ -63,12 +63,12 @@ start(Name, #{issuer := Issuer, session_expiry := SessionExpiry0}) ->
             Error;
         _ ->
             SessionExpiry = timer:seconds(SessionExpiry0),
-            emqx_dashboard_sso_sup:start_child(?MODULE, [SessionExpiry])
+            emqx_dashboard_sso_oidc_sup:start_child(?MODULE, [SessionExpiry])
     end.
 
 stop() ->
-    _ = emqx_dashboard_sso_sup:stop_child(oidcc_provider_configuration_worker),
-    _ = emqx_dashboard_sso_sup:stop_child(?MODULE),
+    _ = emqx_dashboard_sso_oidc_sup:stop_child(oidcc_provider_configuration_worker),
+    _ = emqx_dashboard_sso_oidc_sup:stop_child(?MODULE),
     ok.
 
 new(Data) ->

+ 27 - 0
apps/emqx_dashboard_sso/src/emqx_dashboard_sso_oidc_sup.erl

@@ -0,0 +1,27 @@
+%%--------------------------------------------------------------------
+%% Copyright (c) 2024 EMQ Technologies Co., Ltd. All Rights Reserved.
+%%--------------------------------------------------------------------
+
+-module(emqx_dashboard_sso_oidc_sup).
+
+-behaviour(supervisor).
+
+-export([start_link/0, start_child/2, stop_child/1]).
+
+-export([init/1]).
+
+-define(CHILD(I, Args, Restart), {I, {I, start_link, Args}, Restart, 5000, worker, [I]}).
+
+start_link() ->
+    supervisor:start_link({local, ?MODULE}, ?MODULE, []).
+
+start_child(Mod, Args) ->
+    supervisor:start_child(?MODULE, ?CHILD(Mod, Args, transient)).
+
+stop_child(Mod) ->
+    _ = supervisor:terminate_child(?MODULE, Mod),
+    _ = supervisor:delete_child(?MODULE, Mod),
+    ok.
+
+init([]) ->
+    {ok, {{one_for_one, 0, 1}, []}}.

+ 24 - 14
apps/emqx_dashboard_sso/src/emqx_dashboard_sso_sup.erl

@@ -6,26 +6,36 @@
 
 -behaviour(supervisor).
 
--export([start_link/0, start_child/2, stop_child/1]).
+-export([start_link/0]).
 
 -export([init/1]).
 
--define(CHILD(I, Args, Restart), {I, {I, start_link, Args}, Restart, 5000, worker, [I]}).
--define(CHILD(I), ?CHILD(I, [], permanent)).
-
 start_link() ->
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).
 
-start_child(Mod, Args) ->
-    supervisor:start_child(?MODULE, ?CHILD(Mod, Args, transient)).
-
-stop_child(Mod) ->
-    _ = supervisor:terminate_child(?MODULE, Mod),
-    _ = supervisor:delete_child(?MODULE, Mod),
-    ok.
-
 init([]) ->
     {ok,
-        {{one_for_one, 5, 100}, [
-            ?CHILD(emqx_dashboard_sso_manager)
+        {{one_for_one, 10, 100}, [
+            sup_spec(emqx_dashboard_sso_oidc_sup),
+            child_spec(emqx_dashboard_sso_manager, permanent)
         ]}}.
+
+sup_spec(Mod) ->
+    #{
+        id => Mod,
+        start => {Mod, start_link, []},
+        restart => permanent,
+        shutdown => infinity,
+        type => supervisor,
+        modules => [Mod]
+    }.
+
+child_spec(Mod, Restart) ->
+    #{
+        id => Mod,
+        start => {Mod, start_link, []},
+        restart => Restart,
+        shutdown => 15000,
+        type => worker,
+        modules => [Mod]
+    }.

+ 1 - 0
changes/ee/fix-13998.en.md

@@ -0,0 +1 @@
+Fixed an issue where setting up the OIDC via an invalid configuration could cause the SSO feature to crash.