From 59eac9795ab99705f4bd893c9bb20bbdb066b08d Mon Sep 17 00:00:00 2001 From: regalijan Date: Thu, 19 Oct 2023 16:49:47 -0400 Subject: [PATCH] Create game appeal endpoints --- functions/api/game-appeals/[id]/accept.ts | 55 +++++++++++++++++++++++ functions/api/game-appeals/[id]/deny.ts | 26 +++++++++++ 2 files changed, 81 insertions(+) create mode 100644 functions/api/game-appeals/[id]/accept.ts create mode 100644 functions/api/game-appeals/[id]/deny.ts diff --git a/functions/api/game-appeals/[id]/accept.ts b/functions/api/game-appeals/[id]/accept.ts new file mode 100644 index 0000000..d731833 --- /dev/null +++ b/functions/api/game-appeals/[id]/accept.ts @@ -0,0 +1,55 @@ +import { insertLogs } from "../../../gcloud.js"; +import { getBanList, setBanList } from "../../../roblox-open-cloud.js"; + +export async function onRequestPost(context: RequestContext) { + const { statsReduction } = context.data.body; + + if (statsReduction && typeof statsReduction !== "number") + return new Response('{"error":"Invalid stat reduction"}', { + headers: { + "content-type": "application/json", + }, + status: 400, + }); + + const appeal = await context.env.DATA.get( + `gameappeal_${context.params.id as string}` + ); + + if (!appeal) + return new Response('{"error":"Appeal not found"}', { + headers: { + "content-type": "application/json", + }, + status: 404, + }); + + const data = JSON.parse(appeal); + const banList = (await getBanList(context)) as { + [k: string]: { BanType: number; Unbanned?: boolean; UnbanReduct?: number }; + }; + + await context.env.DATA.delete(`gameappeal_${context.params.id as string}`); + + if (!banList[data.roblox_id]) + return new Response(null, { + status: 204, + }); + + banList[data.roblox_id] = { + BanType: 0, + Unbanned: true, + UnbanReduct: statsReduction, + }; + + await insertLogs( + { [data.roblox_id]: 4 }, + context.params.id as string, + context + ); + await setBanList(context, banList); + + return new Response(null, { + status: 204, + }); +} diff --git a/functions/api/game-appeals/[id]/deny.ts b/functions/api/game-appeals/[id]/deny.ts new file mode 100644 index 0000000..f3fbb15 --- /dev/null +++ b/functions/api/game-appeals/[id]/deny.ts @@ -0,0 +1,26 @@ +export async function onRequestPost(context: RequestContext) { + const appealId = context.params.id as string; + + const appeal = await context.env.DATA.get(`gameappeal_${appealId}`); + + if (!appeal) + return new Response('{"error":"Appeal not found"}', { + headers: { + "content-type": "application/json", + }, + status: 404, + }); + + const appealData = JSON.parse(appeal); + + await context.env.DATA.delete(`gameappeal_${appealId}`); + await context.env.DATA.put( + `gameappealblock_${appealData.roblox_id}`, + `${Date.now() + 2592000000}`, + { expirationTtl: 2592000000 } + ); + + return new Response(null, { + status: 204, + }); +}