diff --git a/client/pages/config/authentication.vue b/client/pages/config/authentication.vue
index acc0ac13..317364a2 100644
--- a/client/pages/config/authentication.vue
+++ b/client/pages/config/authentication.vue
@@ -26,6 +26,14 @@
+
+
+
+
+
+
Auto Launch
+
Redirect to the auth provider automatically when navigating to the /login page
+
diff --git a/client/pages/login.vue b/client/pages/login.vue
index 4ca7c302..724f5999 100644
--- a/client/pages/login.vue
+++ b/client/pages/login.vue
@@ -48,7 +48,7 @@
Login with Google
- Login with OpenId
+ {{ openIDButtonText }}
@@ -77,7 +77,8 @@ export default {
MetadataPath: '',
login_local: true,
login_google_oauth20: false,
- login_openid: false
+ login_openid: false,
+ authFormData: null
}
},
watch: {
@@ -116,6 +117,9 @@ export default {
},
openidAuthUri() {
return `${process.env.serverUrl}/auth/openid?callback=${location.toString()}`
+ },
+ openIDButtonText() {
+ return this.authFormData?.authOpenIDButtonText || 'Login with OpenId'
}
},
methods: {
@@ -221,7 +225,6 @@ export default {
this.$axios
.$get('/status')
.then((data) => {
- this.processing = false
this.isInit = data.isInit
this.showInitScreen = !data.isInit
this.$setServerLanguageCode(data.language)
@@ -229,14 +232,17 @@ export default {
this.ConfigPath = data.ConfigPath || ''
this.MetadataPath = data.MetadataPath || ''
} else {
+ this.authFormData = data.authFormData
this.updateLoginVisibility(data.authMethods || [])
}
})
.catch((error) => {
console.error('Status check failed', error)
- this.processing = false
this.criticalError = 'Status check failed'
})
+ .finally(() => {
+ this.processing = false
+ })
},
updateLoginVisibility(authMethods) {
if (authMethods.includes('local') || !authMethods.length) {
@@ -252,6 +258,11 @@ export default {
}
if (authMethods.includes('openid')) {
+ // Auto redirect unless query string ?autoLaunch=0
+ if (this.authFormData?.authOpenIDAutoLaunch && this.$route.query?.autoLaunch !== '0') {
+ window.location.href = this.openidAuthUri
+ }
+
this.login_openid = true
} else {
this.login_openid = false
diff --git a/server/Server.js b/server/Server.js
index 08f206dc..6c6a17b0 100644
--- a/server/Server.js
+++ b/server/Server.js
@@ -230,7 +230,8 @@ class Server {
const payload = {
isInit: Database.hasRootUser,
language: Database.serverSettings.language,
- authMethods: Database.serverSettings.authActiveAuthMethods
+ authMethods: Database.serverSettings.authActiveAuthMethods,
+ authFormData: Database.serverSettings.authFormData
}
if (!payload.isInit) {
payload.ConfigPath = global.ConfigPath
diff --git a/server/objects/settings/ServerSettings.js b/server/objects/settings/ServerSettings.js
index 301e38e4..71e2e05d 100644
--- a/server/objects/settings/ServerSettings.js
+++ b/server/objects/settings/ServerSettings.js
@@ -70,6 +70,8 @@ class ServerSettings {
this.authOpenIDUserInfoURL = ''
this.authOpenIDClientID = ''
this.authOpenIDClientSecret = ''
+ this.authOpenIDButtonText = 'Login with OpenId'
+ this.authOpenIDAutoLaunch = false
if (settings) {
this.construct(settings)
@@ -122,12 +124,14 @@ class ServerSettings {
this.authOpenIDUserInfoURL = settings.authOpenIDUserInfoURL || ''
this.authOpenIDClientID = settings.authOpenIDClientID || ''
this.authOpenIDClientSecret = settings.authOpenIDClientSecret || ''
+ this.authOpenIDButtonText = settings.authOpenIDButtonText || 'Login with OpenId'
+ this.authOpenIDAutoLaunch = !!settings.authOpenIDAutoLaunch
if (!Array.isArray(this.authActiveAuthMethods)) {
this.authActiveAuthMethods = ['local']
}
- // remove uninitialized methods
+ // remove uninitialized methods
// GoogleOauth20
if (this.authActiveAuthMethods.includes('google-oauth20') && (
this.authGoogleOauth20ClientID === '' ||
@@ -137,7 +141,7 @@ class ServerSettings {
this.authActiveAuthMethods.splice(this.authActiveAuthMethods.indexOf('google-oauth20', 0), 1)
}
- // remove uninitialized methods
+ // remove uninitialized methods
// OpenID
if (this.authActiveAuthMethods.includes('openid') && (
this.authOpenIDIssuerURL === '' ||
@@ -221,7 +225,9 @@ class ServerSettings {
authOpenIDTokenURL: this.authOpenIDTokenURL,
authOpenIDUserInfoURL: this.authOpenIDUserInfoURL,
authOpenIDClientID: this.authOpenIDClientID, // Do not return to client
- authOpenIDClientSecret: this.authOpenIDClientSecret // Do not return to client
+ authOpenIDClientSecret: this.authOpenIDClientSecret, // Do not return to client
+ authOpenIDButtonText: this.authOpenIDButtonText,
+ authOpenIDAutoLaunch: this.authOpenIDAutoLaunch
}
}
@@ -246,10 +252,21 @@ class ServerSettings {
authOpenIDTokenURL: this.authOpenIDTokenURL,
authOpenIDUserInfoURL: this.authOpenIDUserInfoURL,
authOpenIDClientID: this.authOpenIDClientID, // Do not return to client
- authOpenIDClientSecret: this.authOpenIDClientSecret // Do not return to client
+ authOpenIDClientSecret: this.authOpenIDClientSecret, // Do not return to client
+ authOpenIDButtonText: this.authOpenIDButtonText,
+ authOpenIDAutoLaunch: this.authOpenIDAutoLaunch
}
}
+ get authFormData() {
+ const clientFormData = {}
+ if (this.authActiveAuthMethods.includes('openid')) {
+ clientFormData.authOpenIDButtonText = this.authOpenIDButtonText
+ clientFormData.authOpenIDAutoLaunch = this.authOpenIDAutoLaunch
+ }
+ return clientFormData
+ }
+
/**
* Update server settings
*