Changing env-var to arguments

- Changes console.log and console.debug to relevant types
- PASSWORD and I environment variables are now passed as arguments to npm commands
- Added optional argument `--debug`. when passed, console.debug is also logged, else console.debug are turned off
This commit is contained in:
sairajzero 2022-10-25 03:16:59 +05:30
parent 4b26ad60bd
commit 48609bd1b7
15 changed files with 66 additions and 47 deletions

2
.gitignore vendored
View File

@ -3,5 +3,7 @@
/args/config*.json /args/config*.json
/args/param.json /args/param.json
/args/keys*.json /args/keys*.json
/log.txt
/bash_start*
*test* *test*
*.tmp* *.tmp*

View File

@ -15,24 +15,17 @@ npm run create-schema - Create schema in MySQL database.
npm start - Start the application (main). npm start - Start the application (main).
``` ```
**NOTE:** **NOTE:**
env variable `PASSWORD` required for `npm start`. Argument `PASSWORD` required for `npm start`.
Windows:
``` ```
$env:PASSWORD="<password>"; npm start npm start -- -PASSWORD=<password>
```
Linux:
```
PASSWORD="<password"> npm start
``` ```
*(Optional)* *(Optional)*
Multiple instance can be run/setup on the same dir with different config files by using env variable 'I'. Multiple instance can be run/setup on the same dir with different config files by using argument 'I'.
Windows:
``` ```
$env:I="<instance_ID>"; <command> <command> -- -I=<instance_ID>
``` ```
Linux: *(Optional)*
``` `console.debug` is now turned off by default. pass argument `--debug` to turn it on
I="<instance_ID>" <command>
``` ```
npm start -- -PASSWORD=<password> --debug
```

View File

@ -1,10 +1,8 @@
const floGlobals = { const floGlobals = {
//Required for all
blockchain: "FLO", blockchain: "FLO",
application: "exchange", application: "exchange",
adminID: "FMxYC7gYZhouzqtHZukGnPiQ8nvG4CMzXM", adminID: "FMxYC7gYZhouzqtHZukGnPiQ8nvG4CMzXM",
currency: "rupee" currency: "rupee"
}; };
('object' === typeof module) ? module.exports = floGlobals: null; ('object' === typeof module) ? module.exports = floGlobals : null;

View File

@ -1,4 +1,4 @@
(function(EXPORTS) { //floTokenAPI v1.0.3b (function(EXPORTS) { //floTokenAPI v1.0.3c
/* Token Operator to send/receive tokens via blockchain using API calls*/ /* Token Operator to send/receive tokens via blockchain using API calls*/
'use strict'; 'use strict';
const tokenAPI = EXPORTS; const tokenAPI = EXPORTS;
@ -29,7 +29,7 @@
const fetch_api = tokenAPI.fetch = function(apicall) { const fetch_api = tokenAPI.fetch = function(apicall) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
console.log(DEFAULT.apiURL + apicall); console.debug(DEFAULT.apiURL + apicall);
fetch(DEFAULT.apiURL + apicall).then(response => { fetch(DEFAULT.apiURL + apicall).then(response => {
if (response.ok) if (response.ok)
response.json().then(data => resolve(data)); response.json().then(data => resolve(data));

View File

@ -1,9 +1,16 @@
const fs = require('fs'); const fs = require('fs');
const getInput = require('./getInput'); const getInput = require('./getInput');
let _I = "";
for (let arg of process.argv)
if (/^-I=/.test(arg)) {
_I = arg.split(/=(.*)/s)[1];
break;
}
var config, flag_new; var config, flag_new;
try { try {
config = require(`../args/config${process.env.I || ""}.json`); config = require(`../args/config${_I}.json`);
flag_new = false; flag_new = false;
} catch (error) { } catch (error) {
config = { config = {
@ -24,8 +31,8 @@ function flaggedYesOrNo(text) {
resolve(true); resolve(true);
else else
getInput.YesOrNo(text) getInput.YesOrNo(text)
.then(result => resolve(result)) .then(result => resolve(result))
.catch(error => reject(error)) .catch(error => reject(error))
}) })
} }
@ -84,7 +91,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/config${process.env.I || ""}.json`, JSON.stringify(config), 'utf8', (err) => { fs.writeFile(__dirname + `/../args/config${_I}.json`, JSON.stringify(config), 'utf8', (err) => {
if (err) { if (err) {
console.error(err); console.error(err);
return reject(false); return reject(false);

View File

@ -1,8 +1,15 @@
const fs = require('fs'); const fs = require('fs');
let Database = require('../src/database'); let Database = require('../src/database');
let _I = "";
for (let arg of process.argv)
if (/^-I=/.test(arg)) {
_I = arg.split(/=(.*)/s)[1];
break;
}
function createSchema() { function createSchema() {
const config = require(`../args/config${process.env.I || ""}.json`); const config = require(`../args/config${_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) {

View File

@ -14,13 +14,9 @@ npm run backup - Run the backup-node.
npm start - Start the application (main). npm start - Start the application (main).
NOTE: env variable 'PASSWORD' required for 'npm start'. NOTE: argument 'PASSWORD' required for 'npm start'
npm start -- -PASSWORD=<password>
WINDOWS:
$env:PASSWORD="<password>"; npm start
LINUX:
PASSWORD="<password"> npm start
`; `;
console.log(message); console.log(message);

View File

@ -8,6 +8,13 @@ const floCrypto = require('../docs/scripts/floCrypto');
console.log(__dirname); console.log(__dirname);
let _I = "";
for (let arg of process.argv)
if (/^-I=/.test(arg)) {
_I = arg.split(/=(.*)/s)[1];
break;
}
function validateKey(privKey) { function validateKey(privKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
try { try {
@ -62,7 +69,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${process.env.I || ""}.json`, JSON.stringify(splitShares), 'utf8', (err) => { fs.writeFile(__dirname + `/../args/keys${_I}.json`, JSON.stringify(splitShares), 'utf8', (err) => {
if (err) { if (err) {
console.error(err); console.error(err);
return reject(false); return reject(false);

View File

@ -161,7 +161,7 @@ function collectShares(floID, sinkID, share) {
try { try {
let sinkKey = floCrypto.retrieveShamirSecret([].concat(...Object.values(shares_collected[sinkID].shares))); let sinkKey = floCrypto.retrieveShamirSecret([].concat(...Object.values(shares_collected[sinkID].shares)));
if (floCrypto.verifyPrivKey(sinkKey, sinkID)) { if (floCrypto.verifyPrivKey(sinkKey, sinkID)) {
console.log("Shares collected successfully for", sinkID); console.debug("Shares collected successfully for", sinkID);
shares_collected[sinkID].callbacks.forEach(fn => fn instanceof Function ? fn(sinkKey) : null); shares_collected[sinkID].callbacks.forEach(fn => fn instanceof Function ? fn(sinkKey) : null);
delete shares_collected[sinkID]; delete shares_collected[sinkID];
} }
@ -200,7 +200,7 @@ function connectToMaster(i = 0, init = false) {
//Node becomes master //Node becomes master
function serveAsMaster(init) { function serveAsMaster(init) {
console.debug('Starting master process'); console.info('Starting master process');
slave.stop(); slave.stop();
_mode = MASTER_MODE; _mode = MASTER_MODE;
informLiveNodes(init); informLiveNodes(init);
@ -208,7 +208,7 @@ function serveAsMaster(init) {
} }
function serveAsSlave(ws, init) { function serveAsSlave(ws, init) {
console.debug('Starting slave process'); console.info('Starting slave process');
app.pause(); app.pause();
slave.start(ws, init); slave.start(ws, init);
_mode = SLAVE_MODE; _mode = SLAVE_MODE;

View File

@ -153,7 +153,7 @@ function storeSinkShare(sinkID, keyShare, decrypt = true) {
if (decrypt) if (decrypt)
keyShare = floCrypto.decryptData(keyShare, global.myPrivKey) keyShare = floCrypto.decryptData(keyShare, global.myPrivKey)
let encryptedShare = Crypto.AES.encrypt(keyShare, global.myPrivKey); let encryptedShare = Crypto.AES.encrypt(keyShare, global.myPrivKey);
console.log(Date.now(), '|sinkID:', sinkID, '|EnShare:', encryptedShare); console.debug(Date.now(), '|sinkID:', sinkID, '|EnShare:', encryptedShare);
DB.query("INSERT INTO sinkShares (floID, share) VALUE (?) ON DUPLICATE KEY UPDATE share=?", [[sinkID, encryptedShare], encryptedShare]) DB.query("INSERT INTO sinkShares (floID, share) VALUE (?) ON DUPLICATE KEY UPDATE share=?", [[sinkID, encryptedShare], encryptedShare])
.then(_ => null).catch(error => console.error(error)); .then(_ => null).catch(error => console.error(error));
} }

View File

@ -98,7 +98,7 @@ function recursiveCoupling(asset, cur_rate, flag = false) {
}).catch(error => { }).catch(error => {
//noBuy = error[0], noSell = error[1], reason = error[2] //noBuy = error[0], noSell = error[1], reason = error[2]
price.noOrder(asset, error[0], error[1]); price.noOrder(asset, error[0], error[1]);
console.error(error[2]); error[3] ? console.debug(error[2]) : console.error(error[2]);
//set timeout for next coupling (if not order placement occurs) //set timeout for next coupling (if not order placement occurs)
if (flag) { if (flag) {
price.updateLastTime(asset); price.updateLastTime(asset);
@ -145,7 +145,7 @@ function processCoupling(asset, cur_rate) {
console.error(error.sell); console.error(error.sell);
noSell = null; noSell = null;
} }
reject([noBuy, noSell, `No valid ${noSell? 'sellOrders': ''} | ${noBuy? 'buyOrders': ''} for Asset: ${asset}`]); reject([noBuy, noSell, `No valid ${noSell ? 'sellOrders' : ''} | ${noBuy ? 'buyOrders' : ''} for Asset: ${asset}`, true]);
}); });
}) })
} }

View File

@ -5,7 +5,7 @@ require('../docs/scripts/lib');
global.floCrypto = require('../docs/scripts/floCrypto'); global.floCrypto = require('../docs/scripts/floCrypto');
global.floBlockchainAPI = require('../docs/scripts/floBlockchainAPI'); global.floBlockchainAPI = require('../docs/scripts/floBlockchainAPI');
global.floTokenAPI = require('../docs/scripts/floTokenAPI'); global.floTokenAPI = require('../docs/scripts/floTokenAPI');
global.btcOperator = require('../docs/scripts/btcOperator'); global.btcOperator = require('../docs/scripts/btcOperator');
const Database = require("./database"); const Database = require("./database");
const App = require('./app'); const App = require('./app');
@ -162,11 +162,17 @@ function setDB(db) {
} }
module.exports = function startServer(public_dir) { module.exports = function startServer(public_dir) {
const config = require(`../args/config${process.env.I || ""}.json`); let _pass, _I = "";
for (let arg of process.argv) {
if (/^-I=/.test(arg))
_I = arg.split(/=(.*)/s)[1];
else if (/^-password=/i.test(arg))
_pass = arg.split(/=(.*)/s)[1];
}
const config = require(`../args/config${_I}.json`);
try { try {
var _tmp = require(`../args/keys${process.env.I || ""}.json`); var _tmp = require(`../args/keys${_I}.json`);
_tmp = floCrypto.retrieveShamirSecret(_tmp); _tmp = floCrypto.retrieveShamirSecret(_tmp);
var _pass = process.env.PASSWORD;
if (!_pass) { if (!_pass) {
console.error('Password not entered!'); console.error('Password not entered!');
process.exit(1); process.exit(1);

View File

@ -501,7 +501,7 @@ function periodicProcess() {
if (lastSyncBlockHeight < result.blocks[0].height) { if (lastSyncBlockHeight < result.blocks[0].height) {
lastSyncBlockHeight = result.blocks[0].height; lastSyncBlockHeight = result.blocks[0].height;
background.process(); background.process();
console.debug("Last Block :", lastSyncBlockHeight); console.log("Last Block :", lastSyncBlockHeight);
} }
}).catch(error => console.error(error)); }).catch(error => console.error(error));
} }

View File

@ -144,7 +144,7 @@ function depositCurrencyFund(floID, txid, coin) {
if (result.length) if (result.length)
return reject(INVALID(eCode.DUPLICATE_ENTRY, "Transaction already in process")); return reject(INVALID(eCode.DUPLICATE_ENTRY, "Transaction already in process"));
DB.query("INSERT INTO ConvertFund(txid, mode, coin, r_status) VALUES (?)", [[txid, pCode.CONVERT_MODE_GET, coin, pCode.STATUS_PROCESSING]]) DB.query("INSERT INTO ConvertFund(txid, mode, coin, r_status) VALUES (?)", [[txid, pCode.CONVERT_MODE_GET, coin, pCode.STATUS_PROCESSING]])
.then(result => resolve("Add currency fund in process")) .then(result => resolve("Deposit currency fund in process"))
.catch(error => reject(error)) .catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
}) })
@ -160,7 +160,7 @@ function depositCoinFund(floID, txid, coin) {
if (result.length) if (result.length)
return reject(INVALID(eCode.DUPLICATE_ENTRY, "Transaction already in process")); return reject(INVALID(eCode.DUPLICATE_ENTRY, "Transaction already in process"));
DB.query("INSERT INTO ConvertFund(txid, mode, coin, r_status) VALUES (?)", [[txid, pCode.CONVERT_MODE_PUT, coin, pCode.STATUS_PROCESSING]]) DB.query("INSERT INTO ConvertFund(txid, mode, coin, r_status) VALUES (?)", [[txid, pCode.CONVERT_MODE_PUT, coin, pCode.STATUS_PROCESSING]])
.then(result => resolve("Add coin fund in process")) .then(result => resolve("Deposit coin fund in process"))
.catch(error => reject(error)) .catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
}) })
@ -178,7 +178,7 @@ function withdrawCurrencyFund(floID, coin, amount) {
if (available_amount < amount) if (available_amount < amount)
return reject(INVALID(eCode.INSUFFICIENT_BALANCE, "Insufficient convert-fund deposits to withdraw")); return reject(INVALID(eCode.INSUFFICIENT_BALANCE, "Insufficient convert-fund deposits to withdraw"));
DB.query("INSERT INTO ConvertFund(mode, coin, amount, r_status) VALUES (?)", [[pCode.CONVERT_MODE_PUT, coin, amount, pCode.STATUS_PENDING]]) DB.query("INSERT INTO ConvertFund(mode, coin, amount, r_status) VALUES (?)", [[pCode.CONVERT_MODE_PUT, coin, amount, pCode.STATUS_PENDING]])
.then(result => resolve("Add currency fund in process")) .then(result => resolve("Withdraw currency fund in process"))
.catch(error => reject(error)) .catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
@ -197,7 +197,7 @@ function withdrawCoinFund(floID, coin, quantity) {
if (available_quantity < quantity) if (available_quantity < quantity)
return reject(INVALID(eCode.INSUFFICIENT_BALANCE, "Insufficient convert-fund deposits to withdraw")); return reject(INVALID(eCode.INSUFFICIENT_BALANCE, "Insufficient convert-fund deposits to withdraw"));
DB.query("INSERT INTO ConvertFund(mode, coin, quantity, r_status) VALUES (?)", [[pCode.CONVERT_MODE_GET, coin, quantity, pCode.STATUS_PENDING]]) DB.query("INSERT INTO ConvertFund(mode, coin, quantity, r_status) VALUES (?)", [[pCode.CONVERT_MODE_GET, coin, quantity, pCode.STATUS_PENDING]])
.then(result => resolve("Add currency fund in process")) .then(result => resolve("Withdraw currency fund in process"))
.catch(error => reject(error)) .catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))

View File

@ -13,6 +13,9 @@ try {
global[p] = param[p]; global[p] = param[p];
} }
if (!process.argv.includes("--debug"))
global.console.debug = () => null;
/* /*
//Trace the debug logs in node js //Trace the debug logs in node js
var debug = console.debug; var debug = console.debug;