Permalink
Newer
100644
128 lines (111 sloc)
3.32 KB
1
import { jsonError, jsonResponse } from "../../common.js";
2
3
export async function onRequestGet(context: RequestContext) {
4
const { current_user: currentUser } = context.data;
5
6
if (
7
!currentUser.email ||
8
(await context.env.DATA.get("appeal_disabled")) ||
9
(await context.env.D1.prepare(
10
"SELECT id FROM appeals WHERE open = 1 AND user = ?;",
11
)
12
.bind(currentUser.id)
13
.first()) ||
14
(await context.env.DATA.get(`blockedappeal_${currentUser.id}`))
15
)
16
return jsonResponse('{"can_appeal":false}');
17
18
return jsonResponse('{"can_appeal":true}');
19
}
22
if (await context.env.DATA.get("appeal_disabled"))
23
return jsonError("Appeals are disabled", 403);
24
25
const { learned, senderTokenId, whyBanned, whyUnban } = context.data.body;
26
27
if (
28
typeof learned !== "string" ||
29
typeof whyBanned !== "string" ||
30
typeof whyUnban !== "string" ||
31
!learned.length ||
32
learned.length > 2000 ||
33
!whyBanned.length ||
34
whyBanned.length > 500 ||
35
!whyUnban.length ||
36
whyUnban.length > 2000
37
)
42
if (!currentUser.email) return jsonError("No email for this session", 403);
43
44
const existingAppeals = await context.env.DATA.list({
45
prefix: `appeal_${currentUser.id}`,
46
});
47
const existingBlockedAppeal = await context.env.DATA.get(
60
await context.env.D1.prepare("SELECT * FROM appeal_bans WHERE user = ?;")
61
.bind(currentUser.id)
62
.first()
64
await context.env.DATA.put(`blockedappeal_${currentUser.id}`, "1", {
65
metadata: { email: currentUser.email },
66
});
67
68
return new Response(null, {
69
status: 204,
70
});
71
}
72
73
const appealId = `${currentUser.id}${Date.now()}${crypto
74
.randomUUID()
75
.replaceAll("-", "")}`;
76
77
await context.env.DATA.put(
78
`appeal_${appealId}`,
79
JSON.stringify({
86
user: {
87
email: currentUser.email,
88
id: currentUser.id,
89
username: currentUser.username,
90
},
97
await context.env.D1.prepare(
98
"INSERT INTO appeals (created_at, id, open, user) VALUES (?, ?, ?, ?)",
99
)
100
.bind(Date.now(), appealId, 1, currentUser.id)
101
.run();
102
103
await fetch(context.env.APPEALS_WEBHOOK, {
104
body: JSON.stringify({
105
embeds: [
106
{
107
title: "Appeal Submitted",
108
color: 3756250,
109
description: `View this appeal at https://carcrushers.cc/mod-queue?id=${appealId}&type=appeal`,
110
fields: [
111
{
112
name: "Submitter",