From 75c38e9cc56fc28fdadb864cbf94c83b00a4693d Mon Sep 17 00:00:00 2001
From: regalijan <r@regalijan.com>
Date: Thu, 19 Oct 2023 16:49:14 -0400
Subject: [PATCH] Move userid validator to ban endpoint

---
 functions/api/appeals/[id]/_middleware.ts | 22 ++++++++++++++--------
 functions/api/appeals/[id]/ban.ts         |  8 ++++++++
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/functions/api/appeals/[id]/_middleware.ts b/functions/api/appeals/[id]/_middleware.ts
index ad1f6f1..848479e 100644
--- a/functions/api/appeals/[id]/_middleware.ts
+++ b/functions/api/appeals/[id]/_middleware.ts
@@ -12,16 +12,22 @@ export async function onRequestPost(context: RequestContext) {
   const { body } = context.data;
   const id = context.params.id as string;
 
-  if (id.search(/^\d{16,19}$/) === -1)
-    return new Response('{"error":"Invalid target id"}', {
-      headers: {
-        "content-type": "application/json",
-      },
-      status: 400,
-    });
-
   context.data.targetId = id;
 
+  if (!new URL(context.request.url).pathname.endsWith("/ban")) {
+    const keyWithMeta = await context.env.DATA.getWithMetadata(`appeal_${id}`);
+
+    if (!keyWithMeta.value)
+      return new Response('{"error":"No appeal with that ID exists"}', {
+        headers: {
+          "content-type": "application/json",
+        },
+        status: 404,
+      });
+
+    context.data.appeal = keyWithMeta;
+  }
+
   if (
     body.feedback &&
     (typeof body.feedback !== "string" || body.feedback.length > 512)
diff --git a/functions/api/appeals/[id]/ban.ts b/functions/api/appeals/[id]/ban.ts
index e9e5f6c..72dbf83 100644
--- a/functions/api/appeals/[id]/ban.ts
+++ b/functions/api/appeals/[id]/ban.ts
@@ -1,6 +1,14 @@
 export async function onRequestPost(context: RequestContext) {
   const { current_user: currentUser } = context.data;
 
+  if (context.data.targetId.search(/^\d{16,19}$/) === -1)
+    return new Response('{"error":"Invalid target id"}', {
+      headers: {
+        "content-type": "application/json",
+      },
+      status: 400,
+    });
+
   await context.env.DATA.put(
     `appealban_${context.data.targetId}`,
     JSON.stringify({ moderator: currentUser.id })