diff options
| author | Adam Soltys <[email protected]> | 2021-09-29 13:05:31 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2021-09-29 13:05:31 -0700 |
| commit | df21b58a50ae4044ad121f06691d15f6b1773d10 (patch) | |
| tree | 592caf10e3d03af49389438dd547be12c944a6ee /routes/users.js | |
| parent | d87b3d5bce1add35eaf513b160ffc20f440168af (diff) | |
| download | coinos-server-df21b58a50ae4044ad121f06691d15f6b1773d10.tar.gz coinos-server-df21b58a50ae4044ad121f06691d15f6b1773d10.zip | |
re-enable vouchers
Diffstat (limited to 'routes/users.js')
| -rw-r--r-- | routes/users.js | 79 |
1 files changed, 42 insertions, 37 deletions
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 }); |
