From c8c2b9df1c9f70a95673f436b7f1e14964a6744e Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 13 Apr 2020 19:59:16 -0700 Subject: getuser utility function --- lib/passport.js | 8 ++------ lib/sockets.js | 26 ++------------------------ lib/utils.js | 29 +++++++++++++++++++++++++++++ routes/liquid/receive.js | 31 +++++++++++++++++++++++++++---- routes/users.js | 15 ++++----------- 5 files changed, 64 insertions(+), 45 deletions(-) create mode 100644 lib/utils.js diff --git a/lib/passport.js b/lib/passport.js index 1e4fd8b8..81f4e948 100644 --- a/lib/passport.js +++ b/lib/passport.js @@ -1,5 +1,6 @@ const Passport = require("passport"); const jwt = require("passport-jwt"); +const { getUser } = require("./utils"); function cookieExtractor(req) { if (req && req.cookies) return req.cookies["token"]; @@ -17,12 +18,7 @@ passport = Passport.use( }, async (payload, next) => { try { - let user = await db.User.findOne({ - where: { - username: payload.username - } - }); - next(null, user); + next(null, await getUser(payload.username)); } catch (e) { l.error("error finding user for session", e); next(null, { username: "guest" }); diff --git a/lib/sockets.js b/lib/sockets.js index f35ca5f5..ad7295b0 100644 --- a/lib/sockets.js +++ b/lib/sockets.js @@ -1,6 +1,6 @@ const jwt = require("jsonwebtoken"); const io = require("socket.io"); -const { Op } = require("sequelize"); +const { getUser } = require("./utils"); /* eslint-disable-next-line */ const pick = (O, ...K) => K.reduce((o, k) => ((o[k] = O[k]), o), {}); @@ -38,29 +38,7 @@ socket.sockets.on("connect", async socket => { if (app.get("rates")) socket.emit("rate", app.get("rates").ask); socket.on("getuser", async (data, callback) => { l.info("socket open", socket.request.user); - const user = await db.User.findOne({ - include: [ - { - model: db.Payment, - as: "payments", - order: [["id", "DESC"]], - where: { - [Op.or]: { - received: true, - amount: { - [Op.lt]: 0, - }, - }, - }, - limit: 12 - } - ], - where: { - username: socket.request.user - } - }); - - callback(user); + callback(await getUser(socket.request.user)); }); socket.on("disconnect", s => { diff --git a/lib/utils.js b/lib/utils.js new file mode 100644 index 00000000..c6e02a1a --- /dev/null +++ b/lib/utils.js @@ -0,0 +1,29 @@ +const { Op } = require("sequelize"); + +module.exports = { + async getUser(username) { + return db.User.findOne({ + include: [ + { + model: db.Payment, + as: "payments", + order: [["id", "DESC"]], + where: { + [Op.or]: { + received: true, + amount: { + [Op.lt]: 0 + } + } + }, + limit: 12 + }, + { + model: db.Account, + as: "accounts" + } + ], + where: { username } + }); + } +}; diff --git a/routes/liquid/receive.js b/routes/liquid/receive.js index ff58f1c4..1a70c61c 100644 --- a/routes/liquid/receive.js +++ b/routes/liquid/receive.js @@ -59,7 +59,6 @@ zmqRawTx.on("message", async (topic, message, sequence) => { where: params }); - console.log("params", params); if (account) { account.pending += value; await account.save(); @@ -127,13 +126,36 @@ setInterval(async () => { let hash = arr[i]; let p = await db.Payment.findOne({ - include: [{ model: db.User, as: "user" }], where: { hash, confirmed: 0, received: 1 } }); - p.confirmed = 1; + const user = await db.User.findOne({ + include: [ + { + model: db.Payment, + as: "payments", + order: [["id", "DESC"]], + where: { + [Op.or]: { + received: true, + amount: { + [Op.lt]: 0, + }, + }, + }, + limit: 12 + }, + { + model: db.Account, + as: "accounts", + }, + ], + where: { + id: p.user_id + } + }); - let user = await p.getUser(); + p.confirmed = 1; const asset = await db.Account.findOne({ where: { @@ -148,6 +170,7 @@ setInterval(async () => { } else { asset.balance += p.amount + p.tip; asset.pending -= Math.min(user.pending, p.amount + p.tip); + await asset.save(); } l.info("liquid confirmed", user.username, p.asset, p.amount, p.tip); diff --git a/routes/users.js b/routes/users.js index 83f8920e..7c9bce31 100644 --- a/routes/users.js +++ b/routes/users.js @@ -4,6 +4,7 @@ const jwt = require("jsonwebtoken"); const uuidv4 = require("uuid/v4"); const fb = "https://graph.facebook.com/"; const authenticator = require("otplib").authenticator; +const { getUser } = require("../lib/utils"); const pick = (O, ...K) => K.reduce((o, k) => ((o[k] = O[k]), o), {}); let faucet = 1000; @@ -182,7 +183,7 @@ app.post("/user", auth, async (req, res) => { } await user.save(); - emit(user.username, "user", req.user); + emit(user.username, "user", user); res.send({ user, token }); } catch (e) { l.error("error updating user", e); @@ -193,11 +194,7 @@ app.post("/login", async (req, res) => { let twofa = req.body.token; try { - let user = await db.User.findOne({ - where: { - username: req.body.username - } - }); + let user = await getUser(req.body.username); if ( !user || @@ -239,11 +236,7 @@ app.post("/facebookLogin", async (req, res) => { if (!check.data.data.is_valid) return res.status(401).end(); try { - let user = await db.User.findOne({ - where: { - username: req.body.userID - } - }); + let user = await getUser(req.body.userID); if (!user) { user = await db.User.create(user); -- cgit v1.2.3