73 lines
2.1 KiB
JavaScript
73 lines
2.1 KiB
JavaScript
const redis = require("../../../Miscellaneous/redis");
|
|
const stripe = require("../../../Miscellaneous/stripe");
|
|
|
|
const entries = require("../../../Data/payment");
|
|
|
|
function badRequest(res) {
|
|
console.trace("asd")
|
|
res.cork(() => res
|
|
.writeStatus("400")
|
|
.end());
|
|
};
|
|
|
|
module.exports = async (res, req) => {
|
|
const paymentPacketID = req.getQuery("paymentPacketId");
|
|
console.info("payment_intent");
|
|
const cookieHeader = req.getHeader("cookie");
|
|
const cookie = cookieHeader.split("ps=")[1];
|
|
|
|
res.onAborted(() => console.log("aborted"));
|
|
|
|
if (!cookie) return badRequest(res);
|
|
|
|
const paymentPacket = entries[paymentPacketID];
|
|
if (!paymentPacketID || !paymentPacket) return badRequest(res);
|
|
|
|
const formattedCookie = cookie.split(".")[0].slice(4);
|
|
const cookieInDB = await redis.get(`sess:${formattedCookie}`);
|
|
|
|
if (!cookieInDB) return badRequest(res);
|
|
|
|
const parsedCookie = JSON.parse(cookieInDB);
|
|
const { accountID } = parsedCookie;
|
|
|
|
const existingClientSecret = await redis.get(`o_${accountID}_${paymentPacketID}`);
|
|
let clientSecret = null;
|
|
|
|
try {
|
|
const { amount, unit_amount } = paymentPacket;
|
|
if (!existingClientSecret) {
|
|
const paymentIntent = await stripe.paymentIntents.create({
|
|
currency: "EUR",
|
|
amount: unit_amount,
|
|
automatic_payment_methods: {
|
|
enabled: true
|
|
},
|
|
metadata: {
|
|
paymentPacketID,
|
|
playerID: accountID
|
|
}
|
|
});
|
|
|
|
clientSecret = paymentIntent.client_secret;
|
|
await redis.set(`o_${accountID}_${paymentPacketID}`, clientSecret);
|
|
} else {
|
|
clientSecret = existingClientSecret;
|
|
};
|
|
|
|
const response = JSON.stringify({
|
|
clientSecret,
|
|
amount,
|
|
price: unit_amount
|
|
});
|
|
|
|
res.cork(() => {
|
|
res
|
|
.writeStatus("200")
|
|
.end(response);
|
|
});
|
|
} catch (e) {
|
|
console.info(e)
|
|
return badRequest(res);
|
|
};
|
|
}; |