aboutsummaryrefslogtreecommitdiffstats
path: root/routes/users.js
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2021-09-29 13:05:31 -0700
committerAdam Soltys <[email protected]>2021-09-29 13:05:31 -0700
commitdf21b58a50ae4044ad121f06691d15f6b1773d10 (patch)
tree592caf10e3d03af49389438dd547be12c944a6ee /routes/users.js
parentd87b3d5bce1add35eaf513b160ffc20f440168af (diff)
downloadcoinos-server-df21b58a50ae4044ad121f06691d15f6b1773d10.tar.gz
coinos-server-df21b58a50ae4044ad121f06691d15f6b1773d10.zip
re-enable vouchers
Diffstat (limited to 'routes/users.js')
-rw-r--r--routes/users.js79
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 });