aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--routes/send.js1
-rw-r--r--routes/users.js8
2 files changed, 8 insertions, 1 deletions
diff --git a/routes/send.js b/routes/send.js
index 4c8afa34..653da87b 100644
--- a/routes/send.js
+++ b/routes/send.js
@@ -66,7 +66,6 @@ module.exports = ah(async (req, res, next) => {
};
if (!username) {
- 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/users.js b/routes/users.js
index 4fe1362b..c9367c9a 100644
--- a/routes/users.js
+++ b/routes/users.js
@@ -634,12 +634,16 @@ app.post(
})
);
+let redeeming = {};
app.post(
"/redeem",
optionalAuth,
ah(async function(req, res) {
+ try {
await db.transaction(async transaction => {
const { redeemcode } = req.body;
+ if (redeeming[redeemcode]) fail("redemption in progress");
+ redeeming[redeemcode] = true;
if (!redeemcode) fail("no code provided");
let { user } = req;
@@ -652,6 +656,7 @@ app.post(
model: db.Account,
as: "account"
},
+ lock: transaction.LOCK.UPDATE,
transaction
});
@@ -717,6 +722,9 @@ app.post(
res.send({ payment });
});
+ } catch(e) {
+ l.error("problem redeeming", e.message);
+ return res.status(500).send("There was a problem redeeming the voucher");
})
);