From 3d89619929a515caffa97978ccd0d879c7d93baa Mon Sep 17 00:00:00 2001 From: "Damian A. Pastorini" Date: Tue, 23 Jul 2024 16:28:32 +0200 Subject: [PATCH 1/3] - Reldens - v4.0.0 - Include missing sample file. --- .../install-templates/data-package.json | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 lib/game/server/install-templates/data-package.json diff --git a/lib/game/server/install-templates/data-package.json b/lib/game/server/install-templates/data-package.json new file mode 100644 index 000000000..de09d0ddc --- /dev/null +++ b/lib/game/server/install-templates/data-package.json @@ -0,0 +1,29 @@ +{ + "name": "reldens-new-project", + "version": "0.1.0", + "description": "Reldens - New Project", + "main": "index.js", + "scripts": { + "start": "node ." + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "browserslist": [ + "> 0.5%, last 2 versions, not dead" + ], + "targets": { + "main": false + }, + "alias": { + "process": false + }, + "dependencies": { + "reldens": "^4.0.0-beta.37" + }, + "devDependencies": { + "@reldens/utils": "^0.32.0", + "@colyseus/loadtest": "^0.15.3" + } +} From d71d6ed4db1297d98cd468d2b328a99891391861 Mon Sep 17 00:00:00 2001 From: "Damian A. Pastorini" Date: Tue, 23 Jul 2024 17:16:05 +0200 Subject: [PATCH 2/3] - Reldens - v4.0.0 - Made administration panel secret required param. --- install/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/index.html b/install/index.html index 7a4e61da7..56cfb7b65 100644 --- a/install/index.html +++ b/install/index.html @@ -43,7 +43,7 @@

- App -

- +
From 1747cfdbcec03af02fc615937bfdcb1c06e8b2f3 Mon Sep 17 00:00:00 2001 From: "Damian A. Pastorini" Date: Tue, 23 Jul 2024 17:19:12 +0200 Subject: [PATCH 3/3] - Reldens - v4.0.0 - Fix TemplateEngine render missing await. - Fix installer redirect on success. --- lib/admin/server/admin-manager-config.js | 1 + lib/admin/server/admin-manager.js | 9 +++++++-- lib/game/server/installer.js | 22 ++++++++++++++-------- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/admin/server/admin-manager-config.js b/lib/admin/server/admin-manager-config.js index e4451ff51..a323f827a 100644 --- a/lib/admin/server/admin-manager-config.js +++ b/lib/admin/server/admin-manager-config.js @@ -18,6 +18,7 @@ class AdminManagerConfig extends PropertiesHandler this.dataServer = serverManager?.dataServer; this.dataServerConfig = serverManager?.dataServerConfig; this.gameServer = serverManager?.gameServer; + this.installer = serverManager?.installer; this.loginManager = serverManager?.loginManager; this.app = serverManager?.app; this.applicationFramework = serverManager?.appServerFactory?.applicationFramework; diff --git a/lib/admin/server/admin-manager.js b/lib/admin/server/admin-manager.js index ac469986a..48f3da529 100644 --- a/lib/admin/server/admin-manager.js +++ b/lib/admin/server/admin-manager.js @@ -27,6 +27,7 @@ class AdminManager session = null; broadcastCallback = null; gameServer = null; + installer = null; config = null; themeManager = null; secret = ''; @@ -65,6 +66,10 @@ class AdminManager async setupAdmin() { + if(!this.installer.isInstalled()){ + Logger.info('Reldens is not installed, administration panel will not be available.'); + return; + } this.secret = (process.env.RELDENS_ADMIN_SECRET || '').toString(); this.useSecureLogin = Boolean(Number(process.env.RELDENS_ADMIN_SECURE_LOGIN || 0) || false); this.rootPath = process.env.RELDENS_ADMIN_ROUTE_PATH || '/reldens-admin'; @@ -354,9 +359,9 @@ class AdminManager return driverResource.options.uploadProperties; } - render(content, params) + async render(content, params) { - return this.themeManager.templateEngine.render(content, params); + return await this.themeManager.templateEngine.render(content, params); } async renderRoute(pageContent, sideBar) diff --git a/lib/game/server/installer.js b/lib/game/server/installer.js index 68a005129..e81aae0fc 100644 --- a/lib/game/server/installer.js +++ b/lib/game/server/installer.js @@ -42,7 +42,7 @@ class Installer if(fs.existsSync(this.themeManager.installerPathIndex)){ await fs.rmSync(this.themeManager.installerPathIndex, {recursive: true}); } - Logger.info('Re-building installer.'); + Logger.info('Building installer...'); await this.themeManager.buildInstaller(); app.use(bodyParser.urlencoded({extended: true})); app.use(express.static( @@ -58,8 +58,8 @@ class Installer // Include "secure: true" for that case (that only works through SSL): // app.use(session({secret: this.secretKey, resave: true, saveUninitialized: true, cookie: {secure: true}})); app.use(session({secret: this.secretKey, resave: true, saveUninitialized: true})); - app.use((req, res, next) => { - return this.executeForEveryRequest(next, req, res); + app.use(async (req, res, next) => { + return await this.executeForEveryRequest(next, req, res); }); app.post('/install', async (req, res) => { return await this.executeInstallProcess(req, res); @@ -68,6 +68,9 @@ class Installer async executeInstallProcess(req, res) { + if(this.isInstalled()){ + return res.redirect('/?redirect=already-installed'); + } let templateVariables = req.body; this.setCheckboxesMissingValues(templateVariables); this.setSelectedOptions(templateVariables); @@ -117,18 +120,21 @@ class Installer if('' === templateVariables['app-admin-path']){ templateVariables['app-admin-path'] = '/reldens-admin'; } + if('' === templateVariables['app-admin-secret']){ + return res.redirect('/?error=db-installation-process-failed-missing-admin-secret'); + } try { let envDistTemplate = fs.readFileSync( this.themeManager.reldensModulePathInstallTemplateEnvDist, {encoding: this.encoding()} ); - let envFileContent = TemplateEngine.render(envDistTemplate, templateVariables); + let envFileContent = await TemplateEngine.render(envDistTemplate, templateVariables); fs.writeFileSync(path.join(this.themeManager.projectRoot, '.env'), envFileContent); let knexDistTemplate = fs.readFileSync( this.themeManager.reldensModulePathInstallTemplateKnexDist, {encoding: this.encoding()} ); - let knexFileContent = TemplateEngine.render(knexDistTemplate, templateVariables); + let knexFileContent = await TemplateEngine.render(knexDistTemplate, templateVariables); fs.writeFileSync(path.join(this.themeManager.projectRoot, 'knexfile.js'), knexFileContent); fs.writeFileSync(path.join(this.themeManager.projectRoot, 'install.lock'), ''); Logger.info('Installation success!'); @@ -143,10 +149,10 @@ class Installer } } - executeForEveryRequest(next, req, res) + async executeForEveryRequest(next, req, res) { if(this.isInstalled()){ - return res.sendFile(this.themeManager.installerPathIndex); + return next(); } if('' === req._parsedUrl.pathname || '/' === req._parsedUrl.pathname){ let installerIndexTemplate = fs.readFileSync( @@ -154,7 +160,7 @@ class Installer {encoding: this.encoding()} ); let templateVariables = req?.session?.templateVariables || this.fetchDefaults(); - return res.send(TemplateEngine.render(installerIndexTemplate, templateVariables)); + return res.send(await TemplateEngine.render(installerIndexTemplate, templateVariables)); } if(!req.url.endsWith('.html')){ return express.static(this.themeManager.installerPath)(req, res, next);