diff --git a/server/src/config/services.js b/server/src/config/services.js index 21608fd59..4fb9424cc 100644 --- a/server/src/config/services.js +++ b/server/src/config/services.js @@ -54,6 +54,7 @@ import MonitorStats from "../db/models/MonitorStats.js"; import NetworkCheck from "../db/models/NetworkCheck.js"; import Notification from "../db/models/Notification.js"; import RecoveryToken from "../db/models/RecoveryToken.js"; +import AppSettings from "../db/models/AppSettings.js"; import InviteModule from "../db/mongo/modules/inviteModule.js"; import CheckModule from "../db/mongo/modules/checkModule.js"; @@ -66,6 +67,7 @@ import NetworkCheckModule from "../db/mongo/modules/networkCheckModule.js"; import NotificationModule from "../db/mongo/modules/notificationModule.js"; import PageSpeedCheckModule from "../db/mongo/modules/pageSpeedCheckModule.js"; import RecoveryModule from "../db/mongo/modules/recoveryModule.js"; +import SettingsModule from "../db/mongo/modules/settingsModule.js"; export const initializeServices = async ({ logger, envSettings, settingsService }) => { const serviceRegistry = new ServiceRegistry({ logger }); @@ -101,6 +103,7 @@ export const initializeServices = async ({ logger, envSettings, settingsService const notificationModule = new NotificationModule({ Notification, Monitor }); const pageSpeedCheckModule = new PageSpeedCheckModule({ PageSpeedCheck }); const recoveryModule = new RecoveryModule({ User, RecoveryToken, crypto, stringService }); + const settingsModule = new SettingsModule({ AppSettings }); const db = new MongoDB({ logger, @@ -116,6 +119,7 @@ export const initializeServices = async ({ logger, envSettings, settingsService notificationModule, pageSpeedCheckModule, recoveryModule, + settingsModule, }); await db.connect(); diff --git a/server/src/controllers/settingsController.js b/server/src/controllers/settingsController.js index c66024025..7da724d23 100755 --- a/server/src/controllers/settingsController.js +++ b/server/src/controllers/settingsController.js @@ -55,7 +55,7 @@ class SettingsController extends BaseController { async (req, res) => { await updateAppSettingsBodyValidation.validateAsync(req.body); - const updatedSettings = await this.db.updateAppSettings(req.body); + const updatedSettings = await this.db.settingsModule.updateAppSettings(req.body); const returnSettings = this.buildAppSettings(updatedSettings); return res.success({ msg: this.stringService.updateAppSettings, diff --git a/server/src/db/mongo/MongoDB.js b/server/src/db/mongo/MongoDB.js index 49d54fc48..2e98a0335 100755 --- a/server/src/db/mongo/MongoDB.js +++ b/server/src/db/mongo/MongoDB.js @@ -44,20 +44,20 @@ class MongoDB { notificationModule, pageSpeedCheckModule, recoveryModule, + settingsModule, }) { this.logger = logger; this.envSettings = envSettings; this.userModule = userModule; this.inviteModule = inviteModule; this.recoveryModule = recoveryModule; - Object.assign(this, monitorModule); this.pageSpeedCheckModule = pageSpeedCheckModule; this.hardwareCheckModule = hardwareCheckModule; this.checkModule = checkModule; this.maintenanceWindowModule = maintenanceWindowModule; this.monitorModule = monitorModule; this.notificationModule = notificationModule; - Object.assign(this, settingsModule); + this.settingsModule = settingsModule; this.statusPageModule = statusPageModule; Object.assign(this, diagnosticModule); this.networkCheckModule = networkCheckModule; diff --git a/server/src/db/mongo/modules/settingsModule.js b/server/src/db/mongo/modules/settingsModule.js index df325d2fa..37b851bf2 100755 --- a/server/src/db/mongo/modules/settingsModule.js +++ b/server/src/db/mongo/modules/settingsModule.js @@ -1,41 +1,36 @@ -import AppSettings from "../../models/AppSettings.js"; +// import AppSettings from "../../models/AppSettings.js"; const SERVICE_NAME = "SettingsModule"; -const getAppSettings = async () => { - try { - const settings = AppSettings.findOne(); - return settings; - } catch (error) { - error.service = SERVICE_NAME; - error.method = "getSettings"; - throw error; +class SettingsModule { + constructor({ AppSettings }) { + this.AppSettings = AppSettings; } -}; -const updateAppSettings = async (newSettings) => { - try { - const update = { $set: { ...newSettings } }; + updateAppSettings = async (newSettings) => { + try { + const update = { $set: { ...newSettings } }; - if (newSettings.pagespeedApiKey === "") { - update.$unset = { pagespeedApiKey: "" }; - delete update.$set.pagespeedApiKey; + if (newSettings.pagespeedApiKey === "") { + update.$unset = { pagespeedApiKey: "" }; + delete update.$set.pagespeedApiKey; + } + + if (newSettings.systemEmailPassword === "") { + update.$unset = { systemEmailPassword: "" }; + delete update.$set.systemEmailPassword; + } + + await this.AppSettings.findOneAndUpdate({}, update, { + upsert: true, + }); + const settings = await this.AppSettings.findOne().select("-__v -_id -createdAt -updatedAt -singleton").lean(); + return settings; + } catch (error) { + error.service = SERVICE_NAME; + error.method = "updateAppSettings"; + throw error; } + }; +} - if (newSettings.systemEmailPassword === "") { - update.$unset = { systemEmailPassword: "" }; - delete update.$set.systemEmailPassword; - } - - await AppSettings.findOneAndUpdate({}, update, { - upsert: true, - }); - const settings = await AppSettings.findOne().select("-__v -_id -createdAt -updatedAt -singleton").lean(); - return settings; - } catch (error) { - error.service = SERVICE_NAME; - error.method = "updateAppSettings"; - throw error; - } -}; - -export { getAppSettings, updateAppSettings }; +export default SettingsModule; diff --git a/server/src/service/business/userService.js b/server/src/service/business/userService.js index d439a942b..0a965bced 100644 --- a/server/src/service/business/userService.js +++ b/server/src/service/business/userService.js @@ -37,7 +37,7 @@ class UserService { } else { // This is the first account, create JWT secret to use if one is not supplied by env const jwtSecret = this.crypto.randomBytes(64).toString("hex"); - await this.db.updateAppSettings({ jwtSecret }); + await this.db.settingsModule.updateAppSettings({ jwtSecret }); } const newUser = await this.db.userModule.insertUser({ ...user }, file);