feat(admission): add group VPN exceptions
This commit is contained in:
@@ -1,32 +1,44 @@
|
||||
"use server";
|
||||
|
||||
import { appSettings } from "@minecraft-account-manager/database";
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { appSettings, events } from "@minecraft-account-manager/database";
|
||||
import { getClientIp } from "@minecraft-account-manager/network";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { headers } from "next/headers";
|
||||
import { redirect } from "next/navigation";
|
||||
import { parseAdmissionMessages } from "@/lib/admission-settings";
|
||||
import { requireAdminSession } from "@/lib/auth/require-admin";
|
||||
import { db } from "@/lib/database";
|
||||
|
||||
export async function saveDiscordSettings(formData: FormData) {
|
||||
await requireAdminSession();
|
||||
export async function saveAdmissionSettings(formData: FormData) {
|
||||
const admin = await requireAdminSession();
|
||||
const messages = parseAdmissionMessages(formData);
|
||||
if (!messages) redirect("/admin/settings?error=invalid-message");
|
||||
|
||||
const registrationMessage = String(formData.get("registrationMessage") ?? "").trim();
|
||||
|
||||
if (registrationMessage.length < 10 || registrationMessage.length > 500) {
|
||||
redirect("/admin/settings?error=invalid-message");
|
||||
}
|
||||
|
||||
await db
|
||||
.insert(appSettings)
|
||||
.values({
|
||||
id: "default",
|
||||
registrationMessage,
|
||||
})
|
||||
.onConflictDoUpdate({
|
||||
target: appSettings.id,
|
||||
set: {
|
||||
registrationMessage,
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
});
|
||||
const requestHeaders = await headers();
|
||||
const ipAddress = getClientIp(requestHeaders, process.env.TRUST_PROXY === "true");
|
||||
await db.transaction(async (tx) => {
|
||||
const [previous] = await tx.select().from(appSettings).where(eq(appSettings.id, "default")).limit(1);
|
||||
const changedFields = (Object.keys(messages) as Array<keyof typeof messages>)
|
||||
.filter((field) => previous?.[field] !== messages[field]);
|
||||
await tx.insert(appSettings)
|
||||
.values({ id: "default", ...messages })
|
||||
.onConflictDoUpdate({
|
||||
target: appSettings.id,
|
||||
set: { ...messages, updatedAt: new Date() },
|
||||
});
|
||||
if (changedFields.length) {
|
||||
await tx.insert(events).values({
|
||||
id: randomUUID(),
|
||||
source: "/web/admin",
|
||||
type: "games.minecraft.account-manager.settings.admission-messages-updated",
|
||||
subject: "settings/default",
|
||||
time: new Date(),
|
||||
data: { changedFields, adminEmail: admin.email, adminName: admin.name },
|
||||
ipAddress: ipAddress ?? null,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
redirect("/admin/settings?saved=1");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user