From 52a1b3077d475e39a93f785206a557725e33407a Mon Sep 17 00:00:00 2001 From: sairajzero Date: Sun, 23 Jan 2022 03:24:27 +0530 Subject: [PATCH] multi-node support - Run multiple nodes in the same directory with diff config files - pass the env variable 'I' (optional) to run a diff node instance with config file config.json (also uses keys.json) - Updated setup files - Fixed bugs in SQL schema --- .gitignore | 5 +- args/schema.sql | 6 +- package.json | 3 - setup/configure-backup.js | 100 --------------------------------- setup/configure-settings.js | 101 ++-------------------------------- setup/create-backup-schema.js | 2 - setup/create-schema.js | 4 +- setup/reset-password.js | 4 +- src/main.js | 7 +-- 9 files changed, 17 insertions(+), 215 deletions(-) delete mode 100644 setup/configure-backup.js delete mode 100644 setup/create-backup-schema.js diff --git a/.gitignore b/.gitignore index 4ff1827..b6ee8df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ /node_modules/ /package-lock.json -/args/app-config.json -/args/backup-config.json +/args/config*.json /args/param.json -/args/keys.json +/args/keys*.json *test* \ No newline at end of file diff --git a/args/schema.sql b/args/schema.sql index ed8d0d5..fa5ab0d 100644 --- a/args/schema.sql +++ b/args/schema.sql @@ -121,11 +121,11 @@ PRIMARY KEY(floID) CREATE TABLE trustedList( floID CHAR(34) NOT NULL, -FOREIGN KEY (floID) REFERENCES Users(floID), +PRIMARY KEY(floID), +FOREIGN KEY (floID) REFERENCES Users(floID) ); CREATE TABLE TagList ( -id INT NOT NULL AUTO_INCREMENT, tag VARCHAR(50) NOT NULL, sellPriority INT, buyPriority INT, @@ -171,7 +171,7 @@ CREATE TABLE sinkShares( floID CHAR(34) NOT NULL, share TEXT, time_ DATETIME DEFAULT CURRENT_TIMESTAMP, -PRIMARY KEY(floID, share) +PRIMARY KEY(floID) ); /* Backup feature (Table and Triggers) */ diff --git a/package.json b/package.json index 9d6279a..00adc71 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,6 @@ "configure": "node setup/configure-settings.js", "reset-password": "node setup/reset-password.js", "create-schema": "node setup/create-schema.js", - "configure-backup": "node setup/configure-backup.js", - "create-backup-schema": "node setup/create-backup-schema.js", - "backup": "node src/backup/storage.js", "start": "node start.js" }, "repository": { diff --git a/setup/configure-backup.js b/setup/configure-backup.js deleted file mode 100644 index 04f4d20..0000000 --- a/setup/configure-backup.js +++ /dev/null @@ -1,100 +0,0 @@ -const fs = require('fs'); -const getInput = require('./getInput'); - -var config, flag_new; -try { - config = require('../args/backup-config.json'); - flag_new = false; -} catch (error) { - config = { - "sql_user": null, - "sql_pwd": null, - "sql_db": "exchange", - "sql_host": "localhost", - - "main_server_url": null, - "private_key": null - }; - flag_new = true; -} - -function flaggedYesOrNo(text) { - return new Promise((resolve) => { - if (flag_new) - resolve(true); - else - getInput.YesOrNo(text) - .then(result => resolve(result)) - .catch(error => reject(error)) - }) -} - -function configureMainServerURL() { - return new Promise(resolve => { - getInput.Text('Enter URL of main server', config["main_server_url"]).then(url => { - config["main_server_url"] = url; - resolve(true); - }) - }) -} - -function configureSQL() { - return new Promise(resolve => { - flaggedYesOrNo('Do you want to re-configure mySQL connection').then(value => { - if (value) { - console.log('Enter mySQL connection values: ') - getInput.Text('Host', config['sql_host']).then(host => { - config['sql_host'] = host; - getInput.Text('Database name', config['sql_db']).then(dbname => { - config['sql_db'] = dbname; - getInput.Text('MySQL username', config['sql_user']).then(sql_user => { - config['sql_user'] = sql_user; - getInput.Text('Mysql password', config['sql_pwd']).then(sql_pwd => { - config['sql_pwd'] = sql_pwd; - resolve(true); - }) - }) - }) - }) - } else - resolve(false); - }) - }) -} - -function configure() { - return new Promise((resolve, reject) => { - configureMainServerURL().then(port_result => { - configureSQL().then(sql_result => { - fs.writeFile(__dirname + '/../args/backup-config.json', JSON.stringify(config), 'utf8', (err) => { - if (err) { - console.error(err); - return reject(false); - } - console.log('Configuration successful!'); - if (sql_result) { - getInput.YesOrNo('Do you want to create schema in the database').then(value => { - if (value) { - const createSchema = require('./create-schema'); - createSchema(false).then(result => resolve(result)) - .catch(error => { - console.log('Retry using: \n' + 'npm run create-backup-schema'); - reject(error); - }); - } else { - console.log('To create schema, use: \n' + 'npm run create-backup-schema'); - resolve(true); - } - }); - } else - resolve(true); - }) - }) - }); - }) -} - -if (!module.parent) - configure().then(_ => null).catch(_ => null); -else - module.exports = configure; \ No newline at end of file diff --git a/setup/configure-settings.js b/setup/configure-settings.js index 4d7d0a5..abc1673 100644 --- a/setup/configure-settings.js +++ b/setup/configure-settings.js @@ -3,7 +3,7 @@ const getInput = require('./getInput'); var config, flag_new; try { - config = require('../args/app-config.json'); + config = require(`../args/config${process.env.I || ""}.json`); flag_new = false; } catch (error) { config = { @@ -13,12 +13,7 @@ try { "sql_user": null, "sql_pwd": null, "sql_db": "exchange", - "sql_host": "localhost", - - "backup-port": "8081", - "backup-floIDs": [], - - "trusted-floIDs": [] + "sql_host": "localhost" }; flag_new = true; } @@ -34,97 +29,11 @@ function flaggedYesOrNo(text) { }) } -function get_IDs(ids) { - return new Promise((resolve, reject) => { - getInput.Text("", "continue").then(id => { - if (id === "continue") - resolve(Array.from(new Set(ids))); - else { - ids.push(id); - get_IDs(ids) - .then(result => resolve(result)) - .catch(error => reject(error)); - } - }) - }) -} - -function configureBackup() { - return new Promise(resolve => { - getInput.Text('Enter backup port (N = No backup)', config["backup-port"]).then(backup_port => { - config["backup-port"] = (backup_port === 'N' || backup_port === 'n') ? null : backup_port; - if (!config["backup-port"]) - return resolve(true); - getInput.YesOrNo('Do you want to add/remove backup floIDs?').then(value => { - if (value) { - console.log("Enter floIDs to add as backup: "); - get_IDs(config["backup-floIDs"]).then(ids => { - //delete backup IDs - let tmp_obj = {}; - for (let i in ids) { - console.log(i + 1, ":", ids[i]); - tmp_obj[i + 1] = ids[i]; - } - getInput.Text("Enter numbers to delete (seperated by comma)", "continue").then(ri => { - if (ri === "continue") - config["backup-floIDs"] = ids; - else { - for (let i of ri.split(",")) - delete tmp_obj[parseInt(i)]; - let tmp_array = []; - for (let id of tmp_obj) - tmp_array.push(id); - config["backup-floIDs"] = tmp_array; - } - resolve(true); - }) - }) - } else - resolve(true); - }) - }) - }) -} - -function configureTrustedIDs() { - return new Promise((resolve, reject) => { - getInput.YesOrNo('Do you want to add/remove trusted floIDs?').then(value => { - if (value) { - console.log("Enter floIDs to add as trusted: "); - get_IDs(config["trusted-floIDs"]).then(ids => { - //delete trusted IDs - let tmp_obj = {}; - for (let i in ids) { - console.log(i + 1, ":", ids[i]); - tmp_obj[i + 1] = ids[i]; - } - getInput.Text("Enter numbers to delete (seperated by comma)", "continue").then(ri => { - if (ri === "continue") - config["trusted-floIDs"] = ids; - else { - for (let i of ri.split(",")) - delete tmp_obj[parseInt(i)]; - let tmp_array = []; - for (let id of tmp_obj) - tmp_array.push(id); - config["trusted-floIDs"] = tmp_array; - } - resolve(true); - }) - }) - } else - resolve(true); - }) - }) -} - function configurePort() { return new Promise(resolve => { getInput.Text('Enter port', config["port"]).then(port => { config["port"] = port; - configureBackup() - .then(_ => configureTrustedIDs() - .then(_ => resolve(true))); + resolve(true); }) }) } @@ -175,7 +84,7 @@ function configure() { configurePort().then(port_result => { randomizeSessionSecret().then(secret_result => { configureSQL().then(sql_result => { - fs.writeFile(__dirname + '/../args/app-config.json', JSON.stringify(config), 'utf8', (err) => { + fs.writeFile(__dirname + `/../args/config${process.env.I || ""}.json`, JSON.stringify(config), 'utf8', (err) => { if (err) { console.error(err); return reject(false); @@ -205,6 +114,6 @@ function configure() { } if (!module.parent) - configure().then(_ => null).catch(_ => null); + configure().then(_ => null).catch(error => console.error(error)); else module.exports = configure; \ No newline at end of file diff --git a/setup/create-backup-schema.js b/setup/create-backup-schema.js deleted file mode 100644 index ba67ef6..0000000 --- a/setup/create-backup-schema.js +++ /dev/null @@ -1,2 +0,0 @@ -const createSchema = require('./create-schema'); -createSchema(false); \ No newline at end of file diff --git a/setup/create-schema.js b/setup/create-schema.js index b8758e3..7bcea36 100644 --- a/setup/create-schema.js +++ b/setup/create-schema.js @@ -1,8 +1,8 @@ const fs = require('fs'); let Database = require('../src/database'); -function createSchema(app = true) { - const config = require('../args/' + (app ? 'app' : 'backup') + "-config.json"); +function createSchema() { + const config = require(`../args/config${process.env.I || ""}.json`); return new Promise((resolve, reject) => { fs.readFile(__dirname + '/../args/schema.sql', 'utf8', (err, data) => { if (err) { diff --git a/setup/reset-password.js b/setup/reset-password.js index be76064..299494b 100644 --- a/setup/reset-password.js +++ b/setup/reset-password.js @@ -41,7 +41,7 @@ function getPassword() { getPassword() .then(result => resolve(result)) .catch(error => reject(error)) - } else + } else resolve(value1); }) } @@ -57,7 +57,7 @@ function resetPassword() { let encrypted = Crypto.AES.encrypt(privKey, password); let randNum = floCrypto.randInt(10, 15); let splitShares = floCrypto.createShamirsSecretShares(encrypted, randNum, randNum); - fs.writeFile(__dirname + '/../args/keys.json', JSON.stringify(splitShares), 'utf8', (err) => { + fs.writeFile(__dirname + `/../args/keys${process.env.I || ""}.json`, JSON.stringify(splitShares), 'utf8', (err) => { if (err) { console.error(err); return reject(false); diff --git a/src/main.js b/src/main.js index 2c91482..243b168 100644 --- a/src/main.js +++ b/src/main.js @@ -1,5 +1,4 @@ 'use strict'; -const config = require('../args/app-config.json'); global.floGlobals = require('../public/floGlobals'); require('./set_globals'); require('./lib'); @@ -9,7 +8,6 @@ require('./tokenAPI'); const Database = require("./database"); const App = require('./app'); -const PORT = config['port']; const backup = require('./backup/head'); @@ -133,8 +131,9 @@ function setDB(db) { } module.exports = function startServer(public_dir) { + const config = require(`../args/config${process.env.I || ""}.json`); try { - var _tmp = require('../args/keys.json'); + var _tmp = require(`../args/keys${process.env.I || ""}.json`); _tmp = floCrypto.retrieveShamirSecret(_tmp); var _pass = process.env.PASSWORD; if (!_pass) { @@ -162,7 +161,7 @@ module.exports = function startServer(public_dir) { setDB(db); app = new App(config['secret'], DB); refreshData(true).then(_ => { - app.start(PORT).then(result => { + app.start(config['port']).then(result => { console.log(result); backup.init(app); }).catch(error => console.error(error))