Files
pirate-corsaire-server/Routes/api/Payment/payment_intent.js
T
2026-08-24 22:20:36 +02:00

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);
};
};