From 1b60e4a013fe9d627faf573c09d80da03a1d404a Mon Sep 17 00:00:00 2001 From: Cohee <18619528+Cohee1207@users.noreply.github.com> Date: Fri, 26 Apr 2024 14:09:40 +0300 Subject: [PATCH] Init user storage module before server listening --- server.js | 59 ++++++++++++++++++++++++++-------------------------- src/users.js | 11 ++++++++++ 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/server.js b/server.js index cbb74d900..86b48e578 100644 --- a/server.js +++ b/server.js @@ -543,22 +543,13 @@ const setupTasks = async function () { } console.log(); - // TODO: do endpoint init functions depend on certain directories existing or not existing? They should be callable - // in any order for encapsulation reasons, but right now it's unknown if that would break anything. - await userModule.initUserStorage(dataRoot); - - if (listen && !basicAuthMode && enableAccounts) { - await userModule.checkAccountsProtection(); - } - - await settingsEndpoint.init(); - const directories = await userModule.ensurePublicDirectoriesExist(); - await userModule.migrateUserData(); + const directories = await userModule.getUserDirectoriesList(); await contentManager.checkForNewContent(directories); await ensureThumbnailCache(); cleanUploads(); await loadTokenizers(); + await settingsEndpoint.init(); await statsEndpoint.init(); const cleanupPlugins = await loadPlugins(); @@ -581,7 +572,6 @@ const setupTasks = async function () { exitProcess(); }); - console.log('Launching...'); if (autorun) open(autorunUrl.toString()); @@ -601,6 +591,9 @@ const setupTasks = async function () { } } + if (listen && !basicAuthMode && enableAccounts) { + await userModule.checkAccountsProtection(); + } }; /** @@ -642,21 +635,27 @@ function setWindowTitle(title) { } } -if (cliArguments.ssl) { - https.createServer( - { - cert: fs.readFileSync(cliArguments.certPath), - key: fs.readFileSync(cliArguments.keyPath), - }, app) - .listen( - Number(tavernUrl.port) || 443, - tavernUrl.hostname, - setupTasks, - ); -} else { - http.createServer(app).listen( - Number(tavernUrl.port) || 80, - tavernUrl.hostname, - setupTasks, - ); -} +// User storage module needs to be initialized before starting the server +userModule.initUserStorage(dataRoot) + .then(userModule.ensurePublicDirectoriesExist) + .then(userModule.migrateUserData) + .finally(() => { + if (cliArguments.ssl) { + https.createServer( + { + cert: fs.readFileSync(cliArguments.certPath), + key: fs.readFileSync(cliArguments.keyPath), + }, app) + .listen( + Number(tavernUrl.port) || 443, + tavernUrl.hostname, + setupTasks, + ); + } else { + http.createServer(app).listen( + Number(tavernUrl.port) || 80, + tavernUrl.hostname, + setupTasks, + ); + } + }); diff --git a/src/users.js b/src/users.js index 023ddca07..b16863962 100644 --- a/src/users.js +++ b/src/users.js @@ -112,6 +112,16 @@ async function ensurePublicDirectoriesExist() { return directoriesList; } +/** + * Gets a list of all user directories. + * @returns {Promise} - The list of user directories + */ +async function getUserDirectoriesList() { + const userHandles = await getAllUserHandles(); + const directoriesList = userHandles.map(handle => getUserDirectories(handle)); + return directoriesList; +} + /** * Perform migration from the old user data format to the new one. */ @@ -707,6 +717,7 @@ module.exports = { toAvatarKey, initUserStorage, ensurePublicDirectoriesExist, + getUserDirectoriesList, getAllUserHandles, getUserDirectories, setUserDataMiddleware,