Update database module

- Updated database module so that other modules can use it directly by require()
- use path module where-ever needed
- Fixed: public directory not viewed in browser when opening the link
This commit is contained in:
sairajzero 2022-11-12 04:29:28 +05:30
parent e4adaf7ed7
commit 178fcf4ce2
19 changed files with 128 additions and 176 deletions

View File

@ -1,4 +1,5 @@
const fs = require('fs'); const fs = require('fs');
const path = require('path');
const getInput = require('./getInput'); const getInput = require('./getInput');
let _I = ""; let _I = "";
@ -91,7 +92,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${_I}.json`, JSON.stringify(config), 'utf8', (err) => { fs.writeFile(path.resolve(__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,5 +1,6 @@
const fs = require('fs'); const fs = require('fs');
let Database = require('../src/database'); const path = require('path');
let DB = require('../src/database');
let _I = ""; let _I = "";
for (let arg of process.argv) for (let arg of process.argv)
@ -11,12 +12,12 @@ for (let arg of process.argv)
function createSchema() { function createSchema() {
const config = require(`../args/config${_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(path.resolve(__dirname, '..', 'args', `schema.sql`), 'utf8', (err, data) => {
if (err) { if (err) {
console.error(err); console.error(err);
return reject(null); return reject(null);
} }
Database(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(DB => { DB.connect(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(_ => {
let txQueries = data.split(';'); let txQueries = data.split(';');
txQueries.pop(); txQueries.pop();
txQueries = txQueries.map(q => q.trim().replace(/\n/g, ' ')); txQueries = txQueries.map(q => q.trim().replace(/\n/g, ' '));

View File

@ -5,8 +5,7 @@ global.floGlobals = require('../docs/scripts/floGlobals');
require('../src/set_globals'); require('../src/set_globals');
require('../docs/scripts/lib'); require('../docs/scripts/lib');
const floCrypto = require('../docs/scripts/floCrypto'); const floCrypto = require('../docs/scripts/floCrypto');
const path = require('path');
console.log(__dirname);
let _I = ""; let _I = "";
for (let arg of process.argv) for (let arg of process.argv)
@ -69,7 +68,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${_I}.json`, JSON.stringify(splitShares), 'utf8', (err) => { fs.writeFile(path.resolve(__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

@ -3,11 +3,13 @@ const express = require('express');
//const cookieParser = require("cookie-parser"); //const cookieParser = require("cookie-parser");
//const sessions = require('express-session'); //const sessions = require('express-session');
const Request = require('./request'); const Request = require('./request');
const path = require('path');
const PUBLIC_DIR = path.resolve(__dirname, '..', 'docs');
module.exports = function App(secret, DB) { module.exports = function App(secret) {
if (!(this instanceof App)) if (!(this instanceof App))
return new App(secret, DB); return new App(secret);
var server = null; var server = null;
const app = express(); const app = express();
@ -103,7 +105,6 @@ module.exports = function App(secret, DB) {
app.post('/add-distributor', Request.AddDistributor); app.post('/add-distributor', Request.AddDistributor);
app.post('/remove-distributor', Request.RemoveDistributor); app.post('/remove-distributor', Request.RemoveDistributor);
Request.DB = DB;
Request.secret = secret; Request.secret = secret;
//Properties //Properties

View File

@ -4,6 +4,7 @@ const conversion_rates = require('./services/conversion').getRate;
const bond_util = require('./services/bonds').util; const bond_util = require('./services/bonds').util;
const fund_util = require('./services/bobs-fund').util; const fund_util = require('./services/bobs-fund').util;
const pCode = require('../docs/scripts/floExchangeAPI').processCode; const pCode = require('../docs/scripts/floExchangeAPI').processCode;
const DB = require("./database");
const { const {
LAUNCH_SELLER_TAG, LAUNCH_SELLER_TAG,
@ -11,7 +12,7 @@ const {
REQUEST_TIMEOUT, REQUEST_TIMEOUT,
} = require('./_constants')["market"]; } = require('./_constants')["market"];
var DB, assetList; //container for database and allowed assets var assetList; //container and allowed assets
var updateBalance; // container for updateBalance function var updateBalance; // container for updateBalance function
const verifyTx = {}; const verifyTx = {};
@ -506,10 +507,6 @@ module.exports = {
set assetList(assets) { set assetList(assets) {
assetList = assets; assetList = assets;
}, },
set DB(db) {
DB = db;
blockchain.DB = db;
},
set updateBalance(f) { set updateBalance(f) {
updateBalance = f; updateBalance = f;
} }

View File

@ -4,12 +4,13 @@ const K_Bucket = require('../../docs/scripts/floExchangeAPI').K_Bucket;
const slave = require('./slave'); const slave = require('./slave');
const sync = require('./sync'); const sync = require('./sync');
const WebSocket = require('ws'); const WebSocket = require('ws');
const DB = require("../database");
const { const {
SHARE_THRESHOLD SHARE_THRESHOLD
} = require("../_constants")["backup"]; } = require("../_constants")["backup"];
var DB, app, wss, tokenList; //Container for database and app var app, wss, tokenList; //Container for app and wss
var nodeList, nodeURL, nodeKBucket; //Container for (backup) node list var nodeList, nodeURL, nodeKBucket; //Container for (backup) node list
const connectedSlaves = {}, const connectedSlaves = {},
shares_collected = {}, shares_collected = {},
@ -381,11 +382,6 @@ module.exports = {
set assetList(assets) { set assetList(assets) {
tokenList = assets.filter(a => a.toUpperCase() !== "FLO"); tokenList = assets.filter(a => a.toUpperCase() !== "FLO");
}, },
set DB(db) {
DB = db;
sync.DB = db;
slave.DB = db;
},
get wss() { get wss() {
return wss; return wss;
} }

View File

@ -1,5 +1,7 @@
'use strict'; 'use strict';
const DB = require("../database");
const { const {
BACKUP_INTERVAL, BACKUP_INTERVAL,
BACKUP_SYNC_TIMEOUT, BACKUP_SYNC_TIMEOUT,
@ -7,7 +9,6 @@ const {
HASH_N_ROW HASH_N_ROW
} = require("../_constants")["backup"]; } = require("../_constants")["backup"];
var DB; //Container for Database connection
var masterWS = null; //Container for Master websocket connection var masterWS = null; //Container for Master websocket connection
var intervalID = null; var intervalID = null;
@ -161,7 +162,7 @@ function storeSinkShare(sinkID, keyShare, decrypt = true) {
function sendSinkShare(sinkID, pubKey) { function sendSinkShare(sinkID, pubKey) {
DB.query("SELECT share FROM sinkShares WHERE floID=?", [sinkID]).then(result => { DB.query("SELECT share FROM sinkShares WHERE floID=?", [sinkID]).then(result => {
if (!result.length) if (!result.length)
return console.warn(`key-shares for ${sinkID} not found in DB!`); return console.warn(`key-shares for ${sinkID} not found in database!`);
let share = Crypto.AES.decrypt(result[0].share, global.myPrivKey); let share = Crypto.AES.decrypt(result[0].share, global.myPrivKey);
let response = { let response = {
type: "SINK_SHARE", type: "SINK_SHARE",
@ -421,9 +422,6 @@ function requestTableChunks(tables, ws) {
} }
module.exports = { module.exports = {
set DB(db) {
DB = db;
},
get masterWS() { get masterWS() {
return masterWS; return masterWS;
}, },

View File

@ -1,11 +1,11 @@
'use strict'; 'use strict';
const DB = require("../database");
const { const {
HASH_N_ROW HASH_N_ROW
} = require("../_constants")["backup"]; } = require("../_constants")["backup"];
var DB; //Container for database
//Backup Transfer //Backup Transfer
function sendBackupData(last_time, checksum, ws) { function sendBackupData(last_time, checksum, ws) {
if (!last_time) last_time = 0; if (!last_time) last_time = 0;
@ -263,8 +263,5 @@ function tableSync_checksum(tables, ws) {
module.exports = { module.exports = {
sendBackupData, sendBackupData,
sendTableHash, sendTableHash,
sendTableData, sendTableData
set DB(db) {
DB = db;
}
} }

View File

@ -1,10 +1,10 @@
'use strict'; 'use strict';
const pCode = require('../docs/scripts/floExchangeAPI').processCode; const pCode = require('../docs/scripts/floExchangeAPI').processCode;
const DB = require("./database");
var collectAndCall; //container for collectAndCall function from backup module var collectAndCall; //container for collectAndCall function from backup module
var chests; //container for blockchain ids (where assets are stored) var chests; //container for blockchain ids (where assets are stored)
var DB; //container for database
const TYPE_VAULT = "VAULT", const TYPE_VAULT = "VAULT",
TYPE_CONVERT = "CONVERT", TYPE_CONVERT = "CONVERT",
@ -102,7 +102,7 @@ function sendAsset(floID, asset, quantity, type, id) {
sendTx(floID, asset, quantity, sinkID, sinkKey, WITHDRAWAL_MESSAGE[type]).then(txid => { sendTx(floID, asset, quantity, sinkID, sinkKey, WITHDRAWAL_MESSAGE[type]).then(txid => {
if (!txid) if (!txid)
console.error("Transaction not successful"); console.error("Transaction not successful");
else //Transaction was successful, Add in DB else //Transaction was successful, Add in database
DB.query(updateSyntax[type], [pCode.STATUS_CONFIRMATION, txid, id]) DB.query(updateSyntax[type], [pCode.STATUS_CONFIRMATION, txid, id])
.then(_ => null).catch(error => console.error(error)); .then(_ => null).catch(error => console.error(error));
}).catch(error => console.error(error)).finally(_ => { }).catch(error => console.error(error)).finally(_ => {
@ -222,8 +222,5 @@ module.exports = {
refundTransact: { refundTransact: {
init: refundTransact_init, init: refundTransact_init,
retry: refundTransact_retry retry: refundTransact_retry
},
set DB(db) {
DB = db;
} }
} }

View File

@ -1,14 +1,13 @@
'use strict'; 'use strict';
const price = require("./price"); const price = require("./price");
const DB = require("./database");
const { const {
WAIT_TIME, WAIT_TIME,
TRADE_HASH_PREFIX TRADE_HASH_PREFIX
} = require("./_constants")["market"]; } = require("./_constants")["market"];
var DB; //container for database
const updateBalance = {}; const updateBalance = {};
updateBalance.consume = (floID, token, amount) => ["UPDATE UserBalance SET quantity=quantity-? WHERE floID=? AND token=?", [amount, floID, token]]; updateBalance.consume = (floID, token, amount) => ["UPDATE UserBalance SET quantity=quantity-? WHERE floID=? AND token=?", [amount, floID, token]];
updateBalance.add = (floID, token, amount) => ["INSERT INTO UserBalance (floID, token, quantity) VALUE (?) ON DUPLICATE KEY UPDATE quantity=quantity+?", [[floID, token, amount], amount]]; updateBalance.add = (floID, token, amount) => ["INSERT INTO UserBalance (floID, token, quantity) VALUE (?) ON DUPLICATE KEY UPDATE quantity=quantity+?", [[floID, token, amount], amount]];
@ -250,9 +249,5 @@ module.exports = {
initiate: startCouplingForAsset, initiate: startCouplingForAsset,
stopAll: stopAllInstance, stopAll: stopAllInstance,
updateBalance, updateBalance,
price, price
set DB(db) {
DB = db;
price.DB = db;
}
} }

View File

@ -1,23 +1,41 @@
'use strict'; 'use strict';
var mysql = require('mysql'); var mysql = require('mysql');
function Database(user, password, dbname, host = 'localhost') { var pool;//container for connected pool;
const db = {};
Object.defineProperty(db, "connect", { function connectToDatabase(user, password, dbname, host = 'localhost') {
get: () => new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.pool.getConnection((error, conn) => { pool = mysql.createPool({
host: host,
user: user,
password: password,
database: dbname,
//dateStrings : true,
//timezone: 'UTC'
});
getConnection().then(conn => {
conn.release();
resolve(pool);
}).catch(error => reject(error));
});
}
function getConnection() {
return new Promise((resolve, reject) => {
if (!pool)
return reject("Database not connected");
pool.getConnection((error, conn) => {
if (error) if (error)
reject(error); reject(error);
else else
resolve(conn); resolve(conn);
}); });
}) })
}); }
Object.defineProperty(db, "query", { function SQL_query(sql, values) {
value: (sql, values) => new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.connect.then(conn => { getConnection().then(conn => {
const fn = (err, res) => { const fn = (err, res) => {
conn.release(); conn.release();
(err ? reject(err) : resolve(res)); (err ? reject(err) : resolve(res));
@ -28,11 +46,11 @@ function Database(user, password, dbname, host = 'localhost') {
conn.query(sql, fn); conn.query(sql, fn);
}).catch(error => reject(error)); }).catch(error => reject(error));
}) })
}); }
Object.defineProperty(db, "transaction", { function SQL_transaction(queries) {
value: (queries) => new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
db.connect.then(conn => { getConnection().then(conn => {
conn.beginTransaction(err => { conn.beginTransaction(err => {
if (err) if (err)
conn.rollback(() => { conn.rollback(() => {
@ -55,7 +73,7 @@ function Database(user, password, dbname, host = 'localhost') {
}); });
} else { } else {
let q_i = queries.shift(); let q_i = queries.shift();
const callback = function(err, res) { const callback = function (err, res) {
if (err) if (err)
conn.rollback(() => { conn.rollback(() => {
conn.release(); conn.release();
@ -78,22 +96,9 @@ function Database(user, password, dbname, host = 'localhost') {
}); });
}).catch(error => reject(error)); }).catch(error => reject(error));
}) })
});
return new Promise((resolve, reject) => {
db.pool = mysql.createPool({
host: host,
user: user,
password: password,
database: dbname,
//dateStrings : true,
//timezone: 'UTC'
});
db.connect.then(conn => {
conn.release();
resolve(db);
}).catch(error => reject(error));
});
} }
module.exports = {
module.exports = Database; connect: connectToDatabase,
query: SQL_query,
transaction: SQL_transaction
};

View File

@ -13,7 +13,7 @@ global.btcOperator = require('../docs/scripts/btcOperator');
floGlobals.application = application; floGlobals.application = application;
})(); })();
const Database = require("./database"); const DB = require("./database");
const App = require('./app'); const App = require('./app');
const backup = require('./backup/head'); const backup = require('./backup/head');
@ -22,7 +22,7 @@ const {
BLOCKCHAIN_REFRESH_INTERVAL BLOCKCHAIN_REFRESH_INTERVAL
} = require("./_constants")["app"]; } = require("./_constants")["app"];
var DB, app; var app;
function refreshData(startup = false) { function refreshData(startup = false) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -162,12 +162,7 @@ loadDataFromDB.trustedIDs = function () {
}) })
} }
function setDB(db) { module.exports = function startServer() {
DB = db;
backup.DB = DB;
}
module.exports = function startServer(public_dir) {
let _pass, _I = ""; let _pass, _I = "";
for (let arg of process.argv) { for (let arg of process.argv) {
if (/^-I=/.test(arg)) if (/^-I=/.test(arg))
@ -193,12 +188,10 @@ module.exports = function startServer(public_dir) {
process.exit(1); process.exit(1);
} }
global.PUBLIC_DIR = public_dir;
console.log("Logged in as", global.myFloID); console.log("Logged in as", global.myFloID);
Database(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(db => { DB.connect(config["sql_user"], config["sql_pwd"], config["sql_db"], config["sql_host"]).then(result => {
setDB(db); app = new App(config['secret']);
app = new App(config['secret'], DB);
refreshData(true).then(_ => { refreshData(true).then(_ => {
app.start(config['port']).then(result => { app.start(config['port']).then(result => {
console.log(result); console.log(result);

View File

@ -2,6 +2,7 @@
const coupling = require('./coupling'); const coupling = require('./coupling');
const background = require('./background'); const background = require('./background');
const DB = require("./database");
const blockchain = background.blockchain; const blockchain = background.blockchain;
@ -17,7 +18,7 @@ const pCode = require('../docs/scripts/floExchangeAPI').processCode;
const updateBalance = background.updateBalance = coupling.updateBalance; const updateBalance = background.updateBalance = coupling.updateBalance;
var DB, assetList; //container for database and allowed assets var assetList; //container for allowed assets
function login(floID, proxyKey) { function login(floID, proxyKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -542,11 +543,6 @@ module.exports = {
start: periodicProcess_start, start: periodicProcess_start,
stop: periodicProcess_stop stop: periodicProcess_stop
}, },
set DB(db) {
DB = db;
coupling.DB = db;
background.DB = db;
},
set assetList(assets) { set assetList(assets) {
assetList = assets; assetList = assets;
background.assetList = assets; background.assetList = assets;

View File

@ -1,4 +1,5 @@
'use strict'; 'use strict';
const DB = require("./database");
const { const {
MIN_TIME, MIN_TIME,
@ -11,8 +12,6 @@ const {
REC_HISTORY_INTERVAL REC_HISTORY_INTERVAL
} = require("./_constants")["price"]; } = require("./_constants")["price"];
var DB; //container for database
var currentRate = {}, //container for FLO price (from API or by model) var currentRate = {}, //container for FLO price (from API or by model)
lastTime = {}, //container for timestamp of the last tx lastTime = {}, //container for timestamp of the last tx
noBuyOrder = {}, noBuyOrder = {},
@ -20,7 +19,7 @@ var currentRate = {}, //container for FLO price (from API or by model)
const updateLastTime = asset => lastTime[asset] = Date.now(); const updateLastTime = asset => lastTime[asset] = Date.now();
//store FLO price in DB every 1 hr //store FLO price in database every 1 hr
function storeHistory(asset, rate) { function storeHistory(asset, rate) {
DB.query("INSERT INTO PriceHistory (asset, rate) VALUE (?)", [[asset, global.toStandardDecimal(rate)]]) DB.query("INSERT INTO PriceHistory (asset, rate) VALUE (?)", [[asset, global.toStandardDecimal(rate)]])
.then(_ => null).catch(error => console.error(error)) .then(_ => null).catch(error => console.error(error))
@ -173,9 +172,6 @@ module.exports = {
noBuyOrder[asset] = buy; noBuyOrder[asset] = buy;
noSellOrder[asset] = sell; noSellOrder[asset] = sell;
}, },
set DB(db) {
DB = db;
},
get currentRates() { get currentRates() {
return Object.assign({}, currentRate); return Object.assign({}, currentRate);
}, },

View File

@ -1,4 +1,5 @@
'use strict'; 'use strict';
const DB = require("./database");
const market = require("./market"); const market = require("./market");
const conversion = require('./services/conversion'); const conversion = require('./services/conversion');
@ -12,7 +13,7 @@ const {
const eCode = require('../docs/scripts/floExchangeAPI').errorCode; const eCode = require('../docs/scripts/floExchangeAPI').errorCode;
var DB, trustedIDs, secret; //container for database var trustedIDs, secret; //containers for trusted IDs and secret
global.INVALID = function (ecode, message) { global.INVALID = function (ecode, message) {
if (!(this instanceof INVALID)) if (!(this instanceof INVALID))
@ -619,13 +620,6 @@ module.exports = {
set collectAndCall(fn) { set collectAndCall(fn) {
market.collectAndCall = fn; market.collectAndCall = fn;
}, },
set DB(db) {
DB = db;
market.DB = db;
conversion.DB = db;
blockchain_bonds.DB = db;
bobs_fund.DB = db;
},
set secret(s) { set secret(s) {
secret = s; secret = s;
}, },

View File

@ -1,11 +1,10 @@
'use strict'; 'use strict';
const DB = require("../database");
const eCode = require('../../docs/scripts/floExchangeAPI').errorCode; const eCode = require('../../docs/scripts/floExchangeAPI').errorCode;
const pCode = require('../../docs/scripts/floExchangeAPI').processCode; const pCode = require('../../docs/scripts/floExchangeAPI').processCode;
const getRate = require('./conversion').getRate; const getRate = require('./conversion').getRate;
var DB; //container for database
const bobsFund = (function () { const bobsFund = (function () {
const productStr = "Bobs Fund"; const productStr = "Bobs Fund";
@ -302,9 +301,6 @@ module.exports = {
.then(result => console.debug("Refreshed Bob's Fund data")) .then(result => console.debug("Refreshed Bob's Fund data"))
.catch(error => console.error(error)); .catch(error => console.error(error));
}, },
set DB(db) {
DB = db;
},
util: bobsFund, util: bobsFund,
closeFund closeFund
} }

View File

@ -1,11 +1,10 @@
'use strict'; 'use strict';
const DB = require("../database");
const eCode = require('../../docs/scripts/floExchangeAPI').errorCode; const eCode = require('../../docs/scripts/floExchangeAPI').errorCode;
const pCode = require('../../docs/scripts/floExchangeAPI').processCode; const pCode = require('../../docs/scripts/floExchangeAPI').processCode;
const getRate = require('./conversion').getRate; const getRate = require('./conversion').getRate;
var DB; //container for database
const blockchainBond = (function () { const blockchainBond = (function () {
const productStr = "Product: RanchiMall Bitcoin Bond"; const productStr = "Product: RanchiMall Bitcoin Bond";
@ -255,9 +254,6 @@ module.exports = {
.then(result => console.debug("Refreshed Blockchain-bonds data")) .then(result => console.debug("Refreshed Blockchain-bonds data"))
.catch(error => console.error(error)); .catch(error => console.error(error));
}, },
set DB(db) {
DB = db;
},
util: blockchainBond, util: blockchainBond,
closeBond closeBond
} }

View File

@ -1,13 +1,12 @@
'use strict'; 'use strict';
const DB = require("../database");
const { MIN_FUND } = require('../_constants')['convert']; const { MIN_FUND } = require('../_constants')['convert'];
const eCode = require('../../docs/scripts/floExchangeAPI').errorCode; const eCode = require('../../docs/scripts/floExchangeAPI').errorCode;
const pCode = require('../../docs/scripts/floExchangeAPI').processCode; const pCode = require('../../docs/scripts/floExchangeAPI').processCode;
const allowedConversion = ["BTC"]; const allowedConversion = ["BTC"];
var DB; //container for database
function BTC_INR() { function BTC_INR() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
BTC_USD().then(btc_usd => { BTC_USD().then(btc_usd => {
@ -219,8 +218,5 @@ module.exports = {
withdrawFund: { withdrawFund: {
coin: withdrawCoinFund, coin: withdrawCoinFund,
currency: withdrawCurrencyFund currency: withdrawCurrencyFund
},
set DB(db) {
DB = db;
} }
} }

View File

@ -1,4 +1,2 @@
const PUBLIC_DIR = __dirname + "/public";
const start = require('./src/main'); const start = require('./src/main');
start(PUBLIC_DIR); start();