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<I>.json (also uses keys<I>.json) - Updated setup files - Fixed bugs in SQL schema
This commit is contained in:
parent
7dbe78c1cc
commit
52a1b3077d
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,7 +1,6 @@
|
|||||||
/node_modules/
|
/node_modules/
|
||||||
/package-lock.json
|
/package-lock.json
|
||||||
/args/app-config.json
|
/args/config*.json
|
||||||
/args/backup-config.json
|
|
||||||
/args/param.json
|
/args/param.json
|
||||||
/args/keys.json
|
/args/keys*.json
|
||||||
*test*
|
*test*
|
||||||
@ -121,11 +121,11 @@ PRIMARY KEY(floID)
|
|||||||
|
|
||||||
CREATE TABLE trustedList(
|
CREATE TABLE trustedList(
|
||||||
floID CHAR(34) NOT NULL,
|
floID CHAR(34) NOT NULL,
|
||||||
FOREIGN KEY (floID) REFERENCES Users(floID),
|
PRIMARY KEY(floID),
|
||||||
|
FOREIGN KEY (floID) REFERENCES Users(floID)
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE TagList (
|
CREATE TABLE TagList (
|
||||||
id INT NOT NULL AUTO_INCREMENT,
|
|
||||||
tag VARCHAR(50) NOT NULL,
|
tag VARCHAR(50) NOT NULL,
|
||||||
sellPriority INT,
|
sellPriority INT,
|
||||||
buyPriority INT,
|
buyPriority INT,
|
||||||
@ -171,7 +171,7 @@ CREATE TABLE sinkShares(
|
|||||||
floID CHAR(34) NOT NULL,
|
floID CHAR(34) NOT NULL,
|
||||||
share TEXT,
|
share TEXT,
|
||||||
time_ DATETIME DEFAULT CURRENT_TIMESTAMP,
|
time_ DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||||
PRIMARY KEY(floID, share)
|
PRIMARY KEY(floID)
|
||||||
);
|
);
|
||||||
|
|
||||||
/* Backup feature (Table and Triggers) */
|
/* Backup feature (Table and Triggers) */
|
||||||
|
|||||||
@ -19,9 +19,6 @@
|
|||||||
"configure": "node setup/configure-settings.js",
|
"configure": "node setup/configure-settings.js",
|
||||||
"reset-password": "node setup/reset-password.js",
|
"reset-password": "node setup/reset-password.js",
|
||||||
"create-schema": "node setup/create-schema.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"
|
"start": "node start.js"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|||||||
@ -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;
|
|
||||||
@ -3,7 +3,7 @@ const getInput = require('./getInput');
|
|||||||
|
|
||||||
var config, flag_new;
|
var config, flag_new;
|
||||||
try {
|
try {
|
||||||
config = require('../args/app-config.json');
|
config = require(`../args/config${process.env.I || ""}.json`);
|
||||||
flag_new = false;
|
flag_new = false;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
config = {
|
config = {
|
||||||
@ -13,12 +13,7 @@ try {
|
|||||||
"sql_user": null,
|
"sql_user": null,
|
||||||
"sql_pwd": null,
|
"sql_pwd": null,
|
||||||
"sql_db": "exchange",
|
"sql_db": "exchange",
|
||||||
"sql_host": "localhost",
|
"sql_host": "localhost"
|
||||||
|
|
||||||
"backup-port": "8081",
|
|
||||||
"backup-floIDs": [],
|
|
||||||
|
|
||||||
"trusted-floIDs": []
|
|
||||||
};
|
};
|
||||||
flag_new = true;
|
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() {
|
function configurePort() {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
getInput.Text('Enter port', config["port"]).then(port => {
|
getInput.Text('Enter port', config["port"]).then(port => {
|
||||||
config["port"] = port;
|
config["port"] = port;
|
||||||
configureBackup()
|
resolve(true);
|
||||||
.then(_ => configureTrustedIDs()
|
|
||||||
.then(_ => resolve(true)));
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -175,7 +84,7 @@ function configure() {
|
|||||||
configurePort().then(port_result => {
|
configurePort().then(port_result => {
|
||||||
randomizeSessionSecret().then(secret_result => {
|
randomizeSessionSecret().then(secret_result => {
|
||||||
configureSQL().then(sql_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) {
|
if (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return reject(false);
|
return reject(false);
|
||||||
@ -205,6 +114,6 @@ function configure() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!module.parent)
|
if (!module.parent)
|
||||||
configure().then(_ => null).catch(_ => null);
|
configure().then(_ => null).catch(error => console.error(error));
|
||||||
else
|
else
|
||||||
module.exports = configure;
|
module.exports = configure;
|
||||||
@ -1,2 +0,0 @@
|
|||||||
const createSchema = require('./create-schema');
|
|
||||||
createSchema(false);
|
|
||||||
@ -1,8 +1,8 @@
|
|||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
let Database = require('../src/database');
|
let Database = require('../src/database');
|
||||||
|
|
||||||
function createSchema(app = true) {
|
function createSchema() {
|
||||||
const config = require('../args/' + (app ? 'app' : 'backup') + "-config.json");
|
const config = require(`../args/config${process.env.I || ""}.json`);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
fs.readFile(__dirname + '/../args/schema.sql', 'utf8', (err, data) => {
|
fs.readFile(__dirname + '/../args/schema.sql', 'utf8', (err, data) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|||||||
@ -41,7 +41,7 @@ function getPassword() {
|
|||||||
getPassword()
|
getPassword()
|
||||||
.then(result => resolve(result))
|
.then(result => resolve(result))
|
||||||
.catch(error => reject(error))
|
.catch(error => reject(error))
|
||||||
} else
|
} else
|
||||||
resolve(value1);
|
resolve(value1);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -57,7 +57,7 @@ function resetPassword() {
|
|||||||
let encrypted = Crypto.AES.encrypt(privKey, password);
|
let encrypted = Crypto.AES.encrypt(privKey, password);
|
||||||
let randNum = floCrypto.randInt(10, 15);
|
let randNum = floCrypto.randInt(10, 15);
|
||||||
let splitShares = floCrypto.createShamirsSecretShares(encrypted, randNum, randNum);
|
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) {
|
if (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
return reject(false);
|
return reject(false);
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
const config = require('../args/app-config.json');
|
|
||||||
global.floGlobals = require('../public/floGlobals');
|
global.floGlobals = require('../public/floGlobals');
|
||||||
require('./set_globals');
|
require('./set_globals');
|
||||||
require('./lib');
|
require('./lib');
|
||||||
@ -9,7 +8,6 @@ require('./tokenAPI');
|
|||||||
|
|
||||||
const Database = require("./database");
|
const Database = require("./database");
|
||||||
const App = require('./app');
|
const App = require('./app');
|
||||||
const PORT = config['port'];
|
|
||||||
|
|
||||||
const backup = require('./backup/head');
|
const backup = require('./backup/head');
|
||||||
|
|
||||||
@ -133,8 +131,9 @@ function setDB(db) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
module.exports = function startServer(public_dir) {
|
module.exports = function startServer(public_dir) {
|
||||||
|
const config = require(`../args/config${process.env.I || ""}.json`);
|
||||||
try {
|
try {
|
||||||
var _tmp = require('../args/keys.json');
|
var _tmp = require(`../args/keys${process.env.I || ""}.json`);
|
||||||
_tmp = floCrypto.retrieveShamirSecret(_tmp);
|
_tmp = floCrypto.retrieveShamirSecret(_tmp);
|
||||||
var _pass = process.env.PASSWORD;
|
var _pass = process.env.PASSWORD;
|
||||||
if (!_pass) {
|
if (!_pass) {
|
||||||
@ -162,7 +161,7 @@ module.exports = function startServer(public_dir) {
|
|||||||
setDB(db);
|
setDB(db);
|
||||||
app = new App(config['secret'], DB);
|
app = new App(config['secret'], DB);
|
||||||
refreshData(true).then(_ => {
|
refreshData(true).then(_ => {
|
||||||
app.start(PORT).then(result => {
|
app.start(config['port']).then(result => {
|
||||||
console.log(result);
|
console.log(result);
|
||||||
backup.init(app);
|
backup.init(app);
|
||||||
}).catch(error => console.error(error))
|
}).catch(error => console.error(error))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user