Optimised request.js code

This commit is contained in:
sairajzero 2022-03-16 02:11:36 +05:30
parent b229b6b3d5
commit eeb3c70a10
3 changed files with 221 additions and 408 deletions

View File

@ -49,12 +49,9 @@ module.exports = function App(secret, DB) {
next();
})
//get code for login or signup
//get code for login
app.get('/get-login-code', Request.getLoginCode);
//signup request
//app.post('/signup', Request.SignUp); Removing need for signup
//login request
app.post('/login', Request.Login);

View File

@ -10,6 +10,24 @@ const {
var DB, assetList; //container for database and allowed assets
function login(floID, proxyKey) {
return new Promise((resolve, reject) => {
DB.query("INSERT INTO UserSession (floID, proxyKey) VALUE (?, ?) " +
"ON DUPLICATE KEY UPDATE session_time=DEFAULT, proxyKey=?",
[floID, proxyKey, proxyKey])
.then(result => resolve("Login Successful"))
.catch(error => reject(error))
})
}
function logout(floID) {
return new Promise((resolve, reject) => {
DB.query("DELETE FROM UserSession WHERE floID=?", [floID])
.then(result => resolve("Logout successful"))
.catch(error => reject(error))
})
}
const getAssetBalance = (floID, asset) => new Promise((resolve, reject) => {
let promises = (asset === floGlobals.currency) ? [
DB.query("SELECT SUM(balance) AS balance FROM Cash WHERE floID=?", [floID]),
@ -516,6 +534,8 @@ function blockchainReCheck() {
}
module.exports = {
login,
logout,
get rates() {
return coupling.price.currentRates;
},

View File

@ -78,12 +78,211 @@ validateRequest.checkIfSignUsed = sign => new Promise((resolve, reject) => {
}).catch(error => reject(error))
});
function storeRequest(floID, req_str, sign, proxy = false) {
function logRequest(floID, req_str, sign, proxy = false) {
//console.debug(floID, req_str);
DB.query("INSERT INTO RequestLog (floID, request, sign, proxy) VALUES (?,?,?, ?)", [floID, req_str, sign, proxy])
.then(_ => null).catch(error => console.error(error));
}
function processRequest(res, rText, validateObj, sign, floID, pubKey, marketFn) {
validateRequest(validateObj, sign, floID, pubKey).then(req_str => {
marketFn().then(result => {
logRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send(rText + " failed! Try again later!");
}
})
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
})
}
/* User Requests */
function Account(req, res) {
let data = req.body;
validateRequest({
type: "get_account",
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.getAccountDetails(data.floID).then(result => {
result.sinkID = global.sinkID;
if (trustedIDs.includes(data.floID))
result.subAdmin = true;
res.send(result);
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function Login(req, res) {
let data = req.body;
if (!data.code || data.hash != Crypto.SHA1(data.code + secret))
res.status(INVALID.e_code).send("Invalid Code");
else if (!data.pubKey)
res.status(INVALID.e_code).send("Public key missing");
else
processRequest(res, "Login", {
type: "login",
random: data.code,
proxyKey: data.proxyKey,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.login(data.floID, data.proxyKey)
);
}
function Logout(req, res) {
let data = req.body;
processRequest(res, "Logout", {
type: "logout",
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.logout(data.floID)
);
}
function PlaceSellOrder(req, res) {
let data = req.body;
processRequest(res, "Sell order placement", {
type: "sell_order",
asset: data.asset,
quantity: data.quantity,
min_price: data.min_price,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.addSellOrder(data.floID, data.asset, data.quantity, data.min_price)
);
}
function PlaceBuyOrder(req, res) {
let data = req.body;
processRequest(res, "Buy order placement", {
type: "buy_order",
asset: data.asset,
quantity: data.quantity,
max_price: data.max_price,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.addBuyOrder(data.floID, data.asset, data.quantity, data.max_price)
);
}
function CancelOrder(req, res) {
let data = req.body;
processRequest(res, "Order cancellation", {
type: "cancel_order",
order: data.orderType,
id: data.orderID,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.cancelOrder(data.orderType, data.orderID, data.floID)
);
}
function TransferToken(req, res) {
let data = req.body;
processRequest(res, "Token Transfer", {
type: "transfer_token",
receiver: JSON.stringify(data.receiver),
token: data.token,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.transferToken(data.floID, data.receiver, data.token)
);
}
function DepositFLO(req, res) {
let data = req.body;
processRequest(res, "Deposit FLO", {
type: "deposit_flo",
txid: data.txid,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.depositFLO(data.floID, data.txid)
);
}
function WithdrawFLO(req, res) {
let data = req.body;
processRequest(res, "Withdraw FLO", {
type: "withdraw_flo",
amount: data.amount,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.withdrawFLO(data.floID, data.amount)
);
}
function DepositToken(req, res) {
let data = req.body;
processRequest(res, "Deposit Token", {
type: "deposit_token",
txid: data.txid,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.depositToken(data.floID, data.txid)
);
}
function WithdrawToken(req, res) {
let data = req.body;
processRequest(res, "Withdraw Token", {
type: "withdraw_token",
token: data.token,
amount: data.amount,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.withdrawToken(data.floID, data.token, data.amount)
);
}
function addUserTag(req, res) {
let data = req.body;
if (!trustedIDs.includes(data.floID))
res.status(INVALID.e_code).send("Access Denied");
else processRequest(res, "Add user-tag", {
type: "add_tag",
user: data.user,
tag: data.tag,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.group.addTag(data.user, data.tag)
);
}
function removeUserTag(req, res) {
let data = req.body;
if (!trustedIDs.includes(data.floID))
res.status(INVALID.e_code).send("Access Denied");
else processRequest(res, "Remove user-tag", {
type: "remove_tag",
user: data.user,
tag: data.tag,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey,
() => market.group.removeTag(data.user, data.tag)
);
}
/* Public Requests */
function getLoginCode(req, res) {
if (!serving)
return res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
@ -95,211 +294,6 @@ function getLoginCode(req, res) {
});
}
/*
function SignUp(req, res) {
if (!serving)
return res.status(INVALID.e_code).send(INVALID_SERVER_MSG);
let data = req.body;
if (floCrypto.getFloID(data.pubKey) !== data.floID)
return res.status(INVALID.e_code).send("Invalid Public Key");
if (!data.code || data.hash != Crypto.SHA1(data.code + secret))
return res.status(INVALID.e_code).send("Invalid Code");
let req_str = validateRequest_X({
type: "create_account",
random: data.code,
timestamp: data.timestamp
}, data.sign, data.pubKey);
if (req_str instanceof INVALID)
return res.status(INVALID.e_code).send(req_str.message);
let txQueries = [];
txQueries.push(["INSERT INTO Users(floID, pubKey) VALUES (?, ?)", [data.floID, data.pubKey]]);
txQueries.push(["INSERT INTO Cash (floID) Values (?)", [data.floID]]);
DB.transaction(txQueries).then(_ => {
storeRequest(data.floID, req_str, data.sign);
res.send("Account Created");
}).catch(error => {
if (error.code === "ER_DUP_ENTRY")
res.status(INVALID.e_code).send("Account already exist");
else {
console.error(error);
res.status(INTERNAL.e_code).send("Account creation failed! Try Again Later!");
}
});
}
*/
function Login(req, res) {
let data = req.body;
if (!data.code || data.hash != Crypto.SHA1(data.code + secret))
return res.status(INVALID.e_code).send("Invalid Code");
if (!data.pubKey)
return res.status(INVALID.e_code).send("Public key missing");
validateRequest({
type: "login",
random: data.code,
proxyKey: data.proxyKey,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
DB.query("INSERT INTO UserSession (floID, proxyKey) VALUE (?, ?) " +
"ON DUPLICATE KEY UPDATE session_time=DEFAULT, proxyKey=?",
[data.floID, data.proxyKey, data.proxyKey]).then(_ => {
storeRequest(data.floID, req_str, data.sign);
res.send("Login Successful");
}).catch(error => {
console.error(error);
res.status(INTERNAL.e_code).send("Login failed! Try again later!");
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Login failed! Try again later!");
}
})
}
function Logout(req, res) {
let data = req.body;
validateRequest({
type: "logout",
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
DB.query("DELETE FROM UserSession WHERE floID=?", [data.floID]).then(_ => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send('Logout successful');
}).catch(error => {
console.error(error);
res.status(INTERNAL.e_code).send("Logout failed! Try again later! Contact support if this error occurs frequently");
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function PlaceSellOrder(req, res) {
let data = req.body;
validateRequest({
type: "sell_order",
asset: data.asset,
quantity: data.quantity,
min_price: data.min_price,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.addSellOrder(data.floID, data.asset, data.quantity, data.min_price).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Order placement failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function PlaceBuyOrder(req, res) {
let data = req.body;
validateRequest({
type: "buy_order",
asset: data.asset,
quantity: data.quantity,
max_price: data.max_price,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.addBuyOrder(data.floID, data.asset, data.quantity, data.max_price).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Order placement failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function CancelOrder(req, res) {
let data = req.body;
validateRequest({
type: "cancel_order",
order: data.orderType,
id: data.orderID,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.cancelOrder(data.orderType, data.orderID, data.floID).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Order cancellation failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function TransferToken(req, res) {
let data = req.body;
validateRequest({
type: "transfer_token",
receiver: JSON.stringify(data.receiver),
token: data.token,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.transferToken(data.floID, data.receiver, data.token).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Token Transfer failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function ListSellOrders(req, res) {
//TODO: Limit size (best)
DB.query("SELECT * FROM SellOrder ORDER BY time_placed")
@ -358,206 +352,8 @@ function getTransaction(req, res) {
}
}
function Account(req, res) {
let data = req.body;
validateRequest({
type: "get_account",
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.getAccountDetails(data.floID).then(result => {
result.sinkID = global.sinkID;
if (trustedIDs.includes(data.floID))
result.subAdmin = true;
res.send(result);
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function DepositFLO(req, res) {
let data = req.body;
validateRequest({
type: "deposit_flo",
txid: data.txid,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.depositFLO(data.floID, data.txid).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function WithdrawFLO(req, res) {
let data = req.body;
validateRequest({
type: "withdraw_flo",
amount: data.amount,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.withdrawFLO(data.floID, data.amount).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function DepositToken(req, res) {
let data = req.body;
validateRequest({
type: "deposit_token",
txid: data.txid,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.depositToken(data.floID, data.txid).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function WithdrawToken(req, res) {
let data = req.body;
validateRequest({
type: "withdraw_token",
token: data.token,
amount: data.amount,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.withdrawToken(data.floID, data.token, data.amount).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function addUserTag(req, res) {
let data = req.body;
if (!trustedIDs.includes(data.floID))
res.status(INVALID.e_code).send("Access Denied");
else validateRequest({
type: "add_tag",
user: data.user,
tag: data.tag,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.group.addTag(data.user, data.tag).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
function removeUserTag(req, res) {
let data = req.body;
if (!trustedIDs.includes(data.floID))
res.status(INVALID.e_code).send("Access Denied");
else validateRequest({
type: "remove_tag",
user: data.user,
tag: data.tag,
timestamp: data.timestamp
}, data.sign, data.floID, data.pubKey).then(req_str => {
market.group.removeTag(data.user, data.tag).then(result => {
storeRequest(data.floID, req_str, data.sign, !data.pubKey);
res.send(result);
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}).catch(error => {
if (error instanceof INVALID)
res.status(INVALID.e_code).send(error.message);
else {
console.error(error);
res.status(INTERNAL.e_code).send("Request processing failed! Try again later!");
}
});
}
module.exports = {
getLoginCode,
//SignUp,
Login,
Logout,
PlaceBuyOrder,