130 lines
3.4 KiB
JavaScript
130 lines
3.4 KiB
JavaScript
'use strict';
|
|
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, DB) {
|
|
|
|
if (!(this instanceof App))
|
|
return new App(secret, DB);
|
|
|
|
var server = null,
|
|
wss = null;
|
|
const app = express();
|
|
//session middleware
|
|
app.use(sessions({
|
|
secret: secret,
|
|
saveUninitialized: true,
|
|
resave: false,
|
|
name: "session"
|
|
}));
|
|
// parsing the incoming data
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({
|
|
extended: true
|
|
}));
|
|
//serving public file
|
|
app.use(express.static(PUBLIC_DIR));
|
|
// cookie parser middleware
|
|
app.use(cookieParser());
|
|
|
|
//Initital page loading
|
|
app.get('/', (req, res) => res.sendFile('home.html', {
|
|
root: PUBLIC_DIR
|
|
}));
|
|
|
|
//signup request
|
|
app.post('/signup', Request.SignUp);
|
|
|
|
//login request
|
|
app.post('/login', Request.Login);
|
|
|
|
//logout request
|
|
app.get('/logout', Request.Logout);
|
|
|
|
//place sell or buy order
|
|
app.post('/buy', Request.PlaceBuyOrder);
|
|
app.post('/sell', Request.PlaceSellOrder);
|
|
|
|
//cancel sell or buy order
|
|
app.post('/cancel', Request.CancelOrder);
|
|
|
|
//list sell or buy order
|
|
app.get('/list-sellorders', Request.ListSellOrders);
|
|
app.get('/list-buyorders', Request.ListBuyOrders);
|
|
|
|
//list all process transactions and rate
|
|
app.get('/list-transactions', Request.ListTransactions);
|
|
app.get('/get-rate', Request.getRate)
|
|
|
|
//get account details
|
|
app.get('/account', Request.Account);
|
|
|
|
//withdraw and deposit request
|
|
app.post('/deposit-flo', Request.DepositFLO);
|
|
app.post('/withdraw-flo', Request.WithdrawFLO);
|
|
app.post('/deposit-rupee', Request.DepositRupee);
|
|
app.post('/withdraw-rupee', Request.WithdrawRupee);
|
|
|
|
//Manage user tags (Access to trusted IDs only)
|
|
|
|
app.post('/add-tag', Request.addUserTag);
|
|
app.post('/remove-tag', Request.removeUserTag);
|
|
|
|
Request.DB = DB;
|
|
|
|
//Properties
|
|
var periodInstance = null;
|
|
let self = this;
|
|
|
|
//return server, express-app
|
|
Object.defineProperty(self, "server", {
|
|
get: () => server
|
|
});
|
|
Object.defineProperty(self, "express", {
|
|
get: () => app
|
|
});
|
|
|
|
//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, () => {
|
|
resolve(`Server Running at port ${port}`);
|
|
});
|
|
});
|
|
self.stop = () => new Promise(resolve => {
|
|
server.close(() => {
|
|
server = 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
|
|
});
|
|
} |