Update App Server
- Use App server port for Websocket Server. - pause/resume serving and market when node acts as slave/master respectively.
This commit is contained in:
parent
c4732f5831
commit
0b70f099b0
71
src/app.js
71
src/app.js
@ -3,11 +3,17 @@ const express = require('express');
|
||||
const cookieParser = require("cookie-parser");
|
||||
const sessions = require('express-session');
|
||||
const Request = require('./request');
|
||||
const WebSocket = require('ws');
|
||||
|
||||
const REFRESH_INTERVAL = 5 * 1000; //10 * 60 * 1000;
|
||||
|
||||
module.exports = function App(secret, trustedIDs, DB) {
|
||||
module.exports = function App(secret, DB) {
|
||||
|
||||
if (!(this instanceof App))
|
||||
return new App(secret, DB);
|
||||
|
||||
var server = null,
|
||||
wss = null;
|
||||
const app = express();
|
||||
//session middleware
|
||||
app.use(sessions({
|
||||
@ -65,12 +71,67 @@ module.exports = function App(secret, trustedIDs, DB) {
|
||||
app.post('/withdraw-rupee', Request.WithdrawRupee);
|
||||
|
||||
//Manage user tags (Access to trusted IDs only)
|
||||
Request.trustedIDs = trustedIDs;
|
||||
|
||||
app.post('/add-tag', Request.addUserTag);
|
||||
app.post('/remove-tag', Request.removeUserTag);
|
||||
|
||||
Request.DB = DB;
|
||||
Request.periodicProcess();
|
||||
let refresher = setInterval(Request.periodicProcess, REFRESH_INTERVAL);
|
||||
return app;
|
||||
|
||||
//Properties
|
||||
var periodInstance = null;
|
||||
let self = this;
|
||||
|
||||
//return server, express-app, wss
|
||||
Object.defineProperty(self, "server", {
|
||||
get: () => server
|
||||
});
|
||||
Object.defineProperty(self, "express", {
|
||||
get: () => app
|
||||
});
|
||||
Object.defineProperty(self, "wss", {
|
||||
get: () => wss
|
||||
});
|
||||
|
||||
//set trustedID for subAdmin requests
|
||||
Object.defineProperty(self, "trustedIDs", {
|
||||
set: (ids) => Request.trustedIDs = ids
|
||||
});
|
||||
|
||||
//Start (or) Stop servers
|
||||
self.start = (port) => new Promise(resolve => {
|
||||
server = app.listen(port, () => {
|
||||
wss = new WebSocket.Server({
|
||||
server
|
||||
});
|
||||
resolve(`Server Running at port ${port}`);
|
||||
});
|
||||
});
|
||||
self.stop = () => new Promise(resolve => {
|
||||
server.close(() => {
|
||||
server = null;
|
||||
wss = null;
|
||||
resolve('Server stopped')
|
||||
});
|
||||
});
|
||||
|
||||
//(Node is not master) Pause serving the clients
|
||||
self.pause = () => {
|
||||
Request.pause();
|
||||
if (periodInstance !== null) {
|
||||
clearInterval(periodInstance);
|
||||
periodInstance = null;
|
||||
}
|
||||
}
|
||||
|
||||
//(Node is master) Resume serving the clients
|
||||
self.resume = () => {
|
||||
Request.resume();
|
||||
Request.periodicProcess();
|
||||
if (periodInstance === null)
|
||||
periodInstance = setInterval(Request.periodicProcess, REFRESH_INTERVAL);
|
||||
}
|
||||
|
||||
Object.defineProperty(self, "periodInstance", {
|
||||
get: () => periodInstance
|
||||
});
|
||||
}
|
||||
@ -54,10 +54,6 @@ const tokenAPI = {
|
||||
}
|
||||
}
|
||||
|
||||
function returnRates() {
|
||||
return coupling.price.currentRate;
|
||||
}
|
||||
|
||||
function addSellOrder(floID, quantity, min_price) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!floID || !floCrypto.validateAddr(floID))
|
||||
@ -505,7 +501,9 @@ function blockchainReCheck() {
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
returnRates,
|
||||
get rate() {
|
||||
return coupling.price.currentRate;
|
||||
},
|
||||
addBuyOrder,
|
||||
addSellOrder,
|
||||
cancelOrder,
|
||||
|
||||
@ -21,8 +21,13 @@ INTERNAL.e_code = 500;
|
||||
const oneDay = 1000 * 60 * 60 * 24;
|
||||
const maxSessionTimeout = 60 * oneDay;
|
||||
|
||||
var serving;
|
||||
const INVALID_SERVER_MSG = "Incorrect Server. Please connect to main server.";
|
||||
|
||||
function validateRequestFromFloID(request, sign, floID, proxy = true) {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (!serving)
|
||||
return reject(INVALID(INVALID_SERVER_MSG));
|
||||
DB.query("SELECT " + (proxy ? "proxyKey AS pubKey FROM Sessions" : "pubKey FROM Users") + " WHERE floID=?", [floID]).then(result => {
|
||||
if (result.length < 1)
|
||||
return reject(INVALID(proxy ? "Session not active" : "User not registered"));
|
||||
@ -53,6 +58,8 @@ function storeRequest(floID, req_str, sign) {
|
||||
}
|
||||
|
||||
function SignUp(req, res) {
|
||||
if (!serving)
|
||||
return res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
|
||||
let data = req.body,
|
||||
session = req.session;
|
||||
if (floCrypto.getFloID(data.pubKey) !== data.floID)
|
||||
@ -249,11 +256,15 @@ function ListTransactions(req, res) {
|
||||
}
|
||||
|
||||
function getRate(req, res) {
|
||||
let rate = market.returnRates();
|
||||
res.send(`${rate}`);
|
||||
if (!serving)
|
||||
res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
|
||||
else
|
||||
res.send(`${market.rate}`);
|
||||
}
|
||||
|
||||
function Account(req, res) {
|
||||
if (!serving)
|
||||
return res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
|
||||
const setLogin = function(message) {
|
||||
let randID = floCrypto.randString(16, true);
|
||||
req.session.random = randID;
|
||||
@ -506,5 +517,11 @@ module.exports = {
|
||||
set DB(db) {
|
||||
DB = db;
|
||||
market.DB = db;
|
||||
},
|
||||
pause() {
|
||||
serving = false;
|
||||
},
|
||||
resume() {
|
||||
serving = true;
|
||||
}
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user