From df21b58a50ae4044ad121f06691d15f6b1773d10 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Wed, 29 Sep 2021 13:05:31 -0700 Subject: re-enable vouchers --- routes/send.js | 2 +- routes/swaps.js | 4 +-- routes/users.js | 79 ++++++++++++++++++++++++++++++--------------------------- 3 files changed, 45 insertions(+), 40 deletions(-) diff --git a/routes/send.js b/routes/send.js index cdaa8a9b..c00e485a 100644 --- a/routes/send.js +++ b/routes/send.js @@ -53,7 +53,7 @@ module.exports = ah(async (req, res, next) => { }; if (!username) { - throw new Error("Vouchers temporarily disabled"); + // throw new Error("Vouchers temporarily disabled"); l.info("creating redeemable payment"); params.redeemcode = uuidv4(); params.hash = `${req.get("origin")}/redeem/${params.redeemcode}`; diff --git a/routes/swaps.js b/routes/swaps.js index ee047286..f20f98fa 100644 --- a/routes/swaps.js +++ b/routes/swaps.js @@ -103,7 +103,7 @@ const swap = async (user, { a1, a2, v1, v2 }) => { } ] }, - { transaction } + transaction ); for (let i = 0; i < orders.length; i++) { @@ -559,7 +559,7 @@ if (config.maker) { order: [["rate", "ASC"]], limit: 1 }, - { transaction } + transaction ); if (bestAsk) diff --git a/routes/users.js b/routes/users.js index 5131e98a..498a9720 100644 --- a/routes/users.js +++ b/routes/users.js @@ -620,56 +620,61 @@ app.post( "/redeem", optionalAuth, ah(async function(req, res) { - return res.status(500).send("Vouchers temporarily disabled"); - const { redeemcode } = req.body; - if (!redeemcode) fail("no code provided"); + await db.transaction(async transaction => { + const { redeemcode } = req.body; + if (!redeemcode) fail("no code provided"); - let { user } = req; + let { user } = req; - const source = await db.Payment.findOne({ - where: { - redeemcode: req.body.redeemcode - }, - include: { - model: db.Account, - as: "account" - } - }); + const source = await db.Payment.findOne({ + where: { + redeemcode: req.body.redeemcode + }, + include: { + model: db.Account, + as: "account" + }, + transaction + }); - l.info("redeeming", redeemcode); + l.info("redeeming", redeemcode); - if (!source) fail("Invalid code"); - if (source.redeemed) fail("Voucher has already been redeemed"); + if (!source) fail("Invalid code"); + if (source.redeemed) fail("Voucher has already been redeemed"); + let { amount } = source; + amount = -amount; - if (!user) { - const ip = req.headers["x-forwarded-for"] || req.connection.remoteAddress; - user = await register( - { - username: redeemcode.substr(0, 8), - password: "" - }, - ip, - false - ); + if (!user) { + const ip = + req.headers["x-forwarded-for"] || req.connection.remoteAddress; - let payload = { username: user.username }; - let token = jwt.sign(payload, config.jwt); - res.cookie("token", token, { expires: new Date(Date.now() + 432000000) }); - return res.send({ user }); - } else { - l.info("user", user.username); - } + user = await register( + { + username: redeemcode.substr(0, 8), + password: "" + }, + ip, + false + ); + + let payload = { username: user.username }; + let token = jwt.sign(payload, config.jwt); + res.cookie("token", token, { + expires: new Date(Date.now() + 432000000) + }); + + return res.send({ user }); + } - await db.transaction(async transaction => { let account = await getAccount(source.account.asset, user, transaction); let { hash, memo, confirmed, fee, network } = source; source.redeemed = true; - await source.save(); + await source.save({ transaction }); let payment = await db.Payment.create( { - amount: -source.amount, + amount, account_id: account.id, user_id: user.id, hash: "Voucher " + redeemcode, @@ -684,7 +689,7 @@ app.post( { transaction } ); - await account.decrement({ balance: source.amount }, { transaction }); + await account.increment({ balance: amount }, { transaction }); await account.reload({ transaction }); payment = payment.get({ plain: true }); -- cgit v1.2.3