Initial commit

This commit is contained in:
2026-08-24 22:20:36 +02:00
commit 62f7b1278a
251 changed files with 16670 additions and 0 deletions
+73
View File
@@ -0,0 +1,73 @@
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);
};
};
+75
View File
@@ -0,0 +1,75 @@
const RewardPacket = require("../../../Packets/Reward");
const Game = require("../../../Game/Game");
const stripe = require("../../../Miscellaneous/stripe");
const redis = require("../../../Miscellaneous/redis");
const entries = require("../../../Data/payment");
const STRIPE_IP_COLLECTION = require("../../../Data/stripe");
require("dotenv").config({ path: "../.env" });
const textDecoder = new TextDecoder();
const PAYMENT_INTENT_SUCCEEDED = "payment_intent.succeeded";
function badRequest(res) {
res
.writeStatus("400")
.end();
};
module.exports = async (res, req) => {
const sig = req.getHeader("stripe-signature");
if (!sig) return badRequest(res);
const realIP = req.getHeader("x-real-ip");
if (!STRIPE_IP_COLLECTION[realIP]) return badRequest(res);
res.onAborted(() => console.log("/webhook path aborted connection!"));
let data;
// it works because there is no multiple chunks, but should address this issue
res.onData(async (raw, isLast) => {
const stringData = textDecoder.decode(raw);
try {
data = stripe.webhooks.constructEvent(stringData, sig, process.env.STRIPE_WEBHOOK_ENDPOINT_SECRET);
} catch (err) {
console.log(err.message)
return badRequest(res);
};
if (data.type === PAYMENT_INTENT_SUCCEEDED) {
const { paymentPacketID, playerID } = data.data.object.metadata;
if (!paymentPacketID || !playerID) return badRequest(res);
const paymentPackage = entries[paymentPacketID];
const { amount } = paymentPackage;
const player = Game.players[playerID];
if (player) {
const boughtItem = {
categoryID: 1,
id: 4,
amount
};
player.inventory.refreshSingle(boughtItem);
const initializedPacket = RewardPacket.init(true, 1);
initializedPacket.update(boughtItem);
const packet = initializedPacket.get();
player.map.registerIndividualNetworkPacket(player.id, packet);
};
await redis.del(`o_${playerID}_${paymentPacketID}`);
await execute("UPDATE economy SET corsaireCoins = corsaireCoins + ? WHERE playerID = ?", [amount, playerID]);
};
res.cork(() => res.writeStatus("200").end());
});
};