diff --git a/config/sso.example.js b/config/sso.example.js index 1393967d7..88dd7edb5 100644 --- a/config/sso.example.js +++ b/config/sso.example.js @@ -12,6 +12,8 @@ module.exports = { cpPassword: false, // You can also force your SSO users to add a CryptPad password forceCpPassword: false, + // Force redirect to first SSO provider + forceRedirect: true, // List of SSO providers list: [ /* diff --git a/customize.dist/pages/login.js b/customize.dist/pages/login.js index b45c4c5b2..732d3c8d3 100644 --- a/customize.dist/pages/login.js +++ b/customize.dist/pages/login.js @@ -14,7 +14,9 @@ define([ var ssoEnabled = (Config.sso && Config.sso.list && Config.sso.list.length) ?'': '.cp-hidden'; var ssoEnforced = (Config.sso && Config.sso.force) ? '.cp-hidden' : ''; - + if (Config.sso && Config.sso.list && Config.sso.forceRedirect === 1) { + return; + } return [h('div#cp-main', [ Pages.infopageTopbar(), h('div.container.cp-container', [ diff --git a/lib/http-worker.js b/lib/http-worker.js index eb5a0dd74..fbe15431f 100644 --- a/lib/http-worker.js +++ b/lib/http-worker.js @@ -602,6 +602,7 @@ var serveConfig = makeRouteCache(function () { Env.sso.list.map(function (obj) { return obj.name; }) || []; const ssoCfg = (SSOUtils && ssoList.length) ? { force: (Env.sso && Env.sso.enforced && 1) || 0, + forceRedirect: (Env.sso && Env.sso.forceRedirect && 1) || 0, password: (Env.sso && Env.sso.cpPassword && (Env.sso.forceCpPassword ? 2 : 1)) || 0, list: ssoList } : false; diff --git a/www/login/main.js b/www/login/main.js index 7e04ca4ba..c3b5195f7 100644 --- a/www/login/main.js +++ b/www/login/main.js @@ -31,6 +31,17 @@ define([ // Config.sso.password => cp password required or forbidden // Config.sso.list => list of configured identity providers var $sso = $('div.cp-login-sso'); + // Auto-redirect if only forceRedirect set to true + if (Config.sso && Config.sso.list && Config.sso.forceRedirect === 1) { + Login.ssoAuth(Config.sso.list[0], function (err, data) { + if (data && data.url) { + window.location.href = data.url; + } else { + console.error("SSO auto-redirect failed:", err || "no URL"); + } + }); + return; + } var list = Config.sso.list.map(function (name) { var b = h('button.btn.btn-secondary', name); var $b = $(b).click(function () {