From adae905953bcf3c8c183d49f996d1dd0e5763739 Mon Sep 17 00:00:00 2001 From: advplyr Date: Mon, 7 Feb 2022 16:58:11 -0600 Subject: [PATCH] Move SSOSettings to settings db & initialize with env vars --- client/store/sso.js | 5 +---- index.js | 12 ++++++------ njodb.properties | 17 +++++++++++++++++ server/Db.js | 17 ++++++++++++----- server/objects/SSOSettings.js | 25 +++++++++++++------------ 5 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 njodb.properties diff --git a/client/store/sso.js b/client/store/sso.js index 047a151d8..7cb806c15 100644 --- a/client/store/sso.js +++ b/client/store/sso.js @@ -1,6 +1,3 @@ - -import Vue from 'vue' - const defaultSSOSettings = { oidc: { issuer: "", @@ -10,7 +7,7 @@ const defaultSSOSettings = { clientID: "", clientSecret: "", callbackURL: "/oidc/callback", - scope: "openid email profile" + scope: "openid email profile" }, user: { createNewUser: false, diff --git a/index.js b/index.js index 1e551ab6f..d142342e8 100644 --- a/index.js +++ b/index.js @@ -13,12 +13,12 @@ if (isDev) { process.env.AUDIOBOOK_PATH = devEnv.AudiobookPath process.env.FFMPEG_PATH = devEnv.FFmpegPath process.env.FFPROBE_PATH = devEnv.FFProbePath - process.env.OIDC_CLIENT_ID = devEnv.OIDC.ClientID - process.env.OIDC_CLIENT_SECRET = devEnv.OIDC.ClientSecret - process.env.OIDC_ISSUER = devEnv.OIDC.Issuer - process.env.OIDC_AUTHORIZATION_URL = devEnv.OIDC.AuthorizationURL - process.env.OIDC_TOKEN_URL = devEnv.OIDC.TokenURL - process.env.OIDC_USER_INFO_URL = devEnv.OIDC.UserInfoURL + process.env.OIDC_CLIENT_ID = devEnv.OIDC ? devEnv.OIDC.ClientID : '' + process.env.OIDC_CLIENT_SECRET = devEnv.OIDC ? devEnv.OIDC.ClientSecret : '' + process.env.OIDC_ISSUER = devEnv.OIDC ? devEnv.OIDC.Issuer : '' + process.env.OIDC_AUTHORIZATION_URL = devEnv.OIDC ? devEnv.OIDC.AuthorizationURL : '' + process.env.OIDC_TOKEN_URL = devEnv.OIDC ? devEnv.OIDC.TokenURL : '' + process.env.OIDC_USER_INFO_URL = devEnv.OIDC ? devEnv.OIDC.UserInfoURL : '' } const PORT = process.env.PORT || 80 diff --git a/njodb.properties b/njodb.properties new file mode 100644 index 000000000..340c250fa --- /dev/null +++ b/njodb.properties @@ -0,0 +1,17 @@ +{ + "datadir": "data", + "dataname": "data", + "datastores": 2, + "tempdir": "tmp", + "lockoptions": { + "stale": 5000, + "update": 1000, + "retries": { + "retries": 5000, + "minTimeout": 250, + "maxTimeout": 5000, + "factor": 0.15, + "randomize": false + } + } +} \ No newline at end of file diff --git a/server/Db.js b/server/Db.js index d005612b5..50221c3b4 100644 --- a/server/Db.js +++ b/server/Db.js @@ -31,7 +31,6 @@ class Db { this.sessionsDb = new njodb.Database(this.SessionsPath) this.librariesDb = new njodb.Database(this.LibrariesPath, { datastores: 2 }) this.settingsDb = new njodb.Database(this.SettingsPath, { datastores: 2 }) - this.SSODb = new njodb.Database(this.SSODb, { datastores: 2 }) this.collectionsDb = new njodb.Database(this.CollectionsPath, { datastores: 2 }) this.authorsDb = new njodb.Database(this.AuthorsPath) @@ -132,6 +131,11 @@ class Db { this.serverSettings = new ServerSettings() await this.insertEntity('settings', this.serverSettings) } + + if (!this.SSOSettings) { + this.SSOSettings = new SSOSettings() + await this.insertEntity('settings', this.SSOSettings) + } } async load() { @@ -150,6 +154,7 @@ class Db { let p4 = this.settingsDb.select(() => true).then((results) => { if (results.data && results.data.length) { this.settings = results.data + let serverSettings = this.settings.find(s => s.id === 'server-settings') if (serverSettings) { this.serverSettings = new ServerSettings(serverSettings) @@ -159,6 +164,11 @@ class Db { this.previousVersion = this.serverSettings.version || '1.0.0' } } + + let ssoSettings = this.settings.find(s => s.id === 'sso-settings') + if (ssoSettings) { + this.SSOSettings = new SSOSettings(ssoSettings) + } } }) let p5 = this.collectionsDb.select(() => true).then((results) => { @@ -169,10 +179,7 @@ class Db { this.authors = results.data.map(l => new Author(l)) Logger.info(`[DB] ${this.authors.length} Authors Loaded`) }) - let p7 = this.SSODb.select(() => true).then((results) => { - this.SSOSettings = new SSOSettings(results.data) - }) - await Promise.all([p1, p2, p3, p4, p5, p6, p7]) + await Promise.all([p1, p2, p3, p4, p5, p6]) // Update server version in server settings if (this.previousVersion) { diff --git a/server/objects/SSOSettings.js b/server/objects/SSOSettings.js index 60a114005..ba5c44b64 100644 --- a/server/objects/SSOSettings.js +++ b/server/objects/SSOSettings.js @@ -4,14 +4,14 @@ const User = require('./User') const defaultSettings = { oidc: { - issuer: "", - authorizationURL: "", - tokenURL: "", - userInfoURL: "", - clientID: "", - clientSecret: "", + issuer: process.env.OIDC_ISSUER || '', + authorizationURL: process.env.OIDC_AUTHORIZATION_URL || '', + tokenURL: process.env.OIDC_TOKEN_URL || '', + userInfoURL: process.env.OIDC_USER_INFO_URL || '', + clientID: process.env.OIDC_CLIENT_ID || '', + clientSecret: process.env.OIDC_CLIENT_SECRET || '', callbackURL: "/oidc/callback", - scope: "openid email profile" + scope: "openid email profile" }, user: { createNewUser: false, @@ -38,16 +38,17 @@ const defaultSettings = { } class SSOSettings { - constructor(settings=defaultSettings) { + constructor(settings = defaultSettings) { this.id = 'sso-settings' - this.oidc = {...settings.oidc} - this.user = {...settings.user} + this.oidc = { ...settings.oidc } + this.user = { ...settings.user } } toJSON() { return { - oidc: {...this.oidc}, - user: {...this.user} + id: this.id, + oidc: { ...this.oidc }, + user: { ...this.user } } }