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 @@
-
+
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/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"
+ }
+}
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);