From cfe58208025b91e98ea570235b6543b1f1a0ee8a Mon Sep 17 00:00:00 2001 From: pavel444-byte Date: Tue, 13 Oct 2026 12:32:37 +0500 Subject: [PATCH] Add account restrictions, appeals, and admin moderation tools --- app/admin/page.tsx | 30 ++ app/auth/reset-password/page.tsx | 4 +- app/ban/appeal/page.module.css | 67 +++ app/ban/appeal/page.tsx | 44 ++ app/layout.tsx | 9 +- app/log-in/page.tsx | 8 +- app/moderation/page.tsx | 19 +- components/AccountAppeal.tsx | 243 ++++++++++ components/AccountControls.tsx | 418 ++++++++++++++++++ components/Moderation.tsx | 158 ++++--- components/Shell.tsx | 21 +- docs/account-controls.md | 32 ++ docs/vercel-deployment.md | 5 + lib/account-api.ts | 41 +- lib/account-controls-api.ts | 205 +++++++++ lib/api.ts | 32 +- lib/catalog.ts | 34 +- lib/discord-announcements.ts | 12 +- lib/staff-page.ts | 24 + lib/supabase.ts | 24 +- proxy.ts | 27 +- scripts/test-account-controls-sql.mjs | 146 ++++++ shared/account-controls.ts | 65 +++ shared/database.ts | 86 +++- shared/locales/ru.json | 14 +- shared/player-docs.json | 5 + ...013070138_account_controls_and_appeals.sql | 188 ++++++++ tests/account-controls.test.ts | 100 +++++ 28 files changed, 1936 insertions(+), 125 deletions(-) create mode 100644 app/admin/page.tsx create mode 100644 app/ban/appeal/page.module.css create mode 100644 app/ban/appeal/page.tsx create mode 100644 components/AccountAppeal.tsx create mode 100644 components/AccountControls.tsx create mode 100644 docs/account-controls.md create mode 100644 lib/account-controls-api.ts create mode 100644 lib/staff-page.ts create mode 100644 scripts/test-account-controls-sql.mjs create mode 100644 shared/account-controls.ts create mode 100644 supabase/migrations/20261013070138_account_controls_and_appeals.sql create mode 100644 tests/account-controls.test.ts diff --git a/app/admin/page.tsx b/app/admin/page.tsx new file mode 100644 index 0000000..f55365d --- /dev/null +++ b/app/admin/page.tsx @@ -0,0 +1,30 @@ +import Link from "next/link"; +import { Header, Footer } from "@/components/Shell"; +import { Moderation } from "@/components/Moderation"; +import { getI18n } from "@/lib/i18n"; +import { staffPage } from "@/lib/staff-page"; +export const metadata = { title: "Admin Tools" }; +export default async function AdminPage() { + const [{ t }] = await Promise.all([getI18n(), staffPage(true)]); + return ( + <> +
+
+ MINEGEO ADMIN +

{t("Admin Tools.")}

+

+ {t( + "Manage accounts, site settings, integrations and community reports.", + )} +

+

+ + {t("Open Moderation Tools")} + +

+ +
+