diff --git a/app/api/auth/[...nextauth]/route.ts b/app/api/auth/[...nextauth]/route.ts
new file mode 100644
index 0000000..ca0b5b4
--- /dev/null
+++ b/app/api/auth/[...nextauth]/route.ts
@@ -0,0 +1,6 @@
+import { authOptions } from "@/lib/auth";
+import NextAuth from "next-auth";
+
+const handler = NextAuth(authOptions);
+
+export { handler as GET, handler as POST };
diff --git a/app/layout.tsx b/app/layout.tsx
index f996b81..250fe88 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -2,6 +2,7 @@ import { Toaster } from "@/components/ui/toaster";
import "./globals.css";
import type { Metadata } from "next";
import { Inter } from "next/font/google";
+import { Provider } from "@/lib/Provider";
const inter = Inter({ subsets: ["latin"] });
@@ -16,11 +17,13 @@ export default function RootLayout({
children: React.ReactNode;
}) {
return (
-
-
- {children}
-
-
-
+
+
+
+ {children}
+
+
+
+
);
}
diff --git a/app/page.tsx b/app/page.tsx
index 67cfc48..f2aca59 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,6 +1,5 @@
-import { Button } from "@/components/ui/button";
+import { LoginButton } from "@/components/pages/home/LoginButton";
import { Comic_Neue } from "next/font/google";
-import Link from "next/link";
const comicNeue = Comic_Neue({ subsets: ["latin"], weight: "700" });
@@ -10,13 +9,7 @@ export default function Home() {
className={`${comicNeue.className} flex flex-col justify-center items-center gap-4 h-[100vh]`}
>
revolt admin panel
-
-
-
-
+
);
}
diff --git a/app/panel/inspect/account/[id]/page.tsx b/app/panel/inspect/account/[id]/page.tsx
index 732b525..d9d5795 100644
--- a/app/panel/inspect/account/[id]/page.tsx
+++ b/app/panel/inspect/account/[id]/page.tsx
@@ -2,7 +2,7 @@ import { JsonCard } from "@/components/cards/JsonCard";
import { UserCard } from "@/components/cards/UserCard";
import { EmailClassificationCard } from "@/components/cards/authifier/EmailClassificationCard";
import { NavigationToolbar } from "@/components/common/NavigationToolbar";
-import { AccountActions } from "@/components/inspector/AccountActions";
+import { AccountActions } from "@/components/pages/inspector/AccountActions";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
import {
diff --git a/app/panel/inspect/channel/[id]/page.tsx b/app/panel/inspect/channel/[id]/page.tsx
index b1015a1..4229cd7 100644
--- a/app/panel/inspect/channel/[id]/page.tsx
+++ b/app/panel/inspect/channel/[id]/page.tsx
@@ -3,7 +3,7 @@ import { JsonCard } from "@/components/cards/JsonCard";
import { ServerCard } from "@/components/cards/ServerCard";
import { UserCard } from "@/components/cards/UserCard";
import { NavigationToolbar } from "@/components/common/NavigationToolbar";
-import { RecentMessages } from "@/components/inspector/RecentMessages";
+import { RecentMessages } from "@/components/pages/inspector/RecentMessages";
import { Separator } from "@/components/ui/separator";
import { fetchChannelById, fetchServerById, fetchUsersById } from "@/lib/db";
import Link from "next/link";
diff --git a/app/panel/inspect/server/[id]/page.tsx b/app/panel/inspect/server/[id]/page.tsx
index 1f675e7..41d6cd3 100644
--- a/app/panel/inspect/server/[id]/page.tsx
+++ b/app/panel/inspect/server/[id]/page.tsx
@@ -2,8 +2,8 @@ import { JsonCard } from "@/components/cards/JsonCard";
import { ServerCard } from "@/components/cards/ServerCard";
import { UserCard } from "@/components/cards/UserCard";
import { NavigationToolbar } from "@/components/common/NavigationToolbar";
-import { RecentMessages } from "@/components/inspector/RecentMessages";
-import { ServerActions } from "@/components/inspector/ServerActions";
+import { RecentMessages } from "@/components/pages/inspector/RecentMessages";
+import { ServerActions } from "@/components/pages/inspector/ServerActions";
import { Card, CardHeader } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
import { fetchServerById, fetchUserById } from "@/lib/db";
diff --git a/app/panel/inspect/user/[id]/page.tsx b/app/panel/inspect/user/[id]/page.tsx
index 44329c3..5d3ccdb 100644
--- a/app/panel/inspect/user/[id]/page.tsx
+++ b/app/panel/inspect/user/[id]/page.tsx
@@ -1,11 +1,11 @@
import { JsonCard } from "@/components/cards/JsonCard";
import { UserCard } from "@/components/cards/UserCard";
import { NavigationToolbar } from "@/components/common/NavigationToolbar";
-import { RecentMessages } from "@/components/inspector/RecentMessages";
-import { RelevantModerationNotices } from "@/components/inspector/RelevantModerationNotices";
-import { RelevantObjects } from "@/components/inspector/RelevantObjects";
-import { RelevantReports } from "@/components/inspector/RelevantReports";
-import { UserActions } from "@/components/inspector/UserActions";
+import { RecentMessages } from "@/components/pages/inspector/RecentMessages";
+import { RelevantModerationNotices } from "@/components/pages/inspector/RelevantModerationNotices";
+import { RelevantObjects } from "@/components/pages/inspector/RelevantObjects";
+import { RelevantReports } from "@/components/pages/inspector/RelevantReports";
+import { UserActions } from "@/components/pages/inspector/UserActions";
import { Card, CardHeader } from "@/components/ui/card";
import { Separator } from "@/components/ui/separator";
import { PLATFORM_MOD_ID } from "@/lib/constants";
diff --git a/app/panel/reports/[id]/page.tsx b/app/panel/reports/[id]/page.tsx
index ce9cc9c..c88575c 100644
--- a/app/panel/reports/[id]/page.tsx
+++ b/app/panel/reports/[id]/page.tsx
@@ -5,7 +5,7 @@ import { ServerCard } from "@/components/cards/ServerCard";
import { UserCard } from "@/components/cards/UserCard";
import { CardLink } from "@/components/common/CardLink";
import { NavigationToolbar } from "@/components/common/NavigationToolbar";
-import { ReportActions } from "@/components/inspector/ReportActions";
+import { ReportActions } from "@/components/pages/inspector/ReportActions";
import { Separator } from "@/components/ui/separator";
import {
fetchReportById,
diff --git a/components/pages/home/LoginButton.tsx b/components/pages/home/LoginButton.tsx
new file mode 100644
index 0000000..91bd44b
--- /dev/null
+++ b/components/pages/home/LoginButton.tsx
@@ -0,0 +1,35 @@
+"use client";
+
+import { Button } from "@/components/ui/button";
+import { useSession } from "next-auth/react";
+import Link from "next/link";
+
+export function LoginButton() {
+ const { data: session } = useSession();
+
+ if (session || true) {
+ return (
+ <>
+
+
+
+
+ >
+ );
+ }
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
diff --git a/components/inspector/AccountActions.tsx b/components/pages/inspector/AccountActions.tsx
similarity index 97%
rename from components/inspector/AccountActions.tsx
rename to components/pages/inspector/AccountActions.tsx
index 00df92a..449f055 100644
--- a/components/inspector/AccountActions.tsx
+++ b/components/pages/inspector/AccountActions.tsx
@@ -1,8 +1,8 @@
"use client";
import { useState } from "react";
-import { Button } from "../ui/button";
-import { useToast } from "../ui/use-toast";
+import { Button } from "../../ui/button";
+import { useToast } from "../../ui/use-toast";
import type { Account } from "@/lib/db";
import { User } from "revolt-api";
import {
@@ -23,7 +23,7 @@ import {
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
-} from "../ui/alert-dialog";
+} from "../../ui/alert-dialog";
dayjs.extend(relativeTime);
export function AccountActions({
diff --git a/components/inspector/RecentMessages.tsx b/components/pages/inspector/RecentMessages.tsx
similarity index 93%
rename from components/inspector/RecentMessages.tsx
rename to components/pages/inspector/RecentMessages.tsx
index 18b05bc..08053b5 100644
--- a/components/inspector/RecentMessages.tsx
+++ b/components/pages/inspector/RecentMessages.tsx
@@ -6,9 +6,9 @@ import {
CardDescription,
CardHeader,
CardTitle,
-} from "../ui/card";
+} from "../../ui/card";
import { fetchMessages, fetchUsersById } from "@/lib/db";
-import { CompactMessage } from "../cards/CompactMessage";
+import { CompactMessage } from "../../cards/CompactMessage";
export async function RecentMessages({
query,
diff --git a/components/inspector/RelevantModerationNotices.tsx b/components/pages/inspector/RelevantModerationNotices.tsx
similarity index 93%
rename from components/inspector/RelevantModerationNotices.tsx
rename to components/pages/inspector/RelevantModerationNotices.tsx
index 73f7ba3..f8c9d0f 100644
--- a/components/inspector/RelevantModerationNotices.tsx
+++ b/components/pages/inspector/RelevantModerationNotices.tsx
@@ -1,10 +1,10 @@
"use client";
import { AccountStrike, Message } from "revolt-api";
-import { ListCompactor } from "../common/ListCompactor";
-import { CompactMessage } from "../cards/CompactMessage";
+import { ListCompactor } from "../../common/ListCompactor";
+import { CompactMessage } from "../../cards/CompactMessage";
import { useRef, useState } from "react";
-import { Button } from "../ui/button";
+import { Button } from "../../ui/button";
import {
AlertDialog,
AlertDialogAction,
@@ -14,10 +14,10 @@ import {
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
-} from "../ui/alert-dialog";
-import { Input } from "../ui/input";
+} from "../../ui/alert-dialog";
+import { Input } from "../../ui/input";
import { createStrike } from "@/lib/actions";
-import { useToast } from "../ui/use-toast";
+import { useToast } from "../../ui/use-toast";
import {
Table,
TableBody,
@@ -25,7 +25,7 @@ import {
TableHead,
TableHeader,
TableRow,
-} from "../ui/table";
+} from "../../ui/table";
import dayjs from "dayjs";
import { decodeTime } from "ulid";
diff --git a/components/inspector/RelevantObjects.tsx b/components/pages/inspector/RelevantObjects.tsx
similarity index 87%
rename from components/inspector/RelevantObjects.tsx
rename to components/pages/inspector/RelevantObjects.tsx
index d4f7c7b..0941df5 100644
--- a/components/inspector/RelevantObjects.tsx
+++ b/components/pages/inspector/RelevantObjects.tsx
@@ -1,9 +1,9 @@
"use client";
import { Server, User } from "revolt-api";
-import { ListCompactor } from "../common/ListCompactor";
-import { UserCard } from "../cards/UserCard";
-import { ServerCard } from "../cards/ServerCard";
+import { ListCompactor } from "../../common/ListCompactor";
+import { UserCard } from "../../cards/UserCard";
+import { ServerCard } from "../../cards/ServerCard";
import Link from "next/link";
export function RelevantObjects({
diff --git a/components/inspector/RelevantReports.tsx b/components/pages/inspector/RelevantReports.tsx
similarity index 85%
rename from components/inspector/RelevantReports.tsx
rename to components/pages/inspector/RelevantReports.tsx
index b88c302..77b43d7 100644
--- a/components/inspector/RelevantReports.tsx
+++ b/components/pages/inspector/RelevantReports.tsx
@@ -1,9 +1,9 @@
"use client";
import { Report } from "revolt-api";
-import { ListCompactor } from "../common/ListCompactor";
-import { ReportCard } from "../cards/ReportCard";
-import { CardLink } from "../common/CardLink";
+import { ListCompactor } from "../../common/ListCompactor";
+import { ReportCard } from "../../cards/ReportCard";
+import { CardLink } from "../../common/CardLink";
export function RelevantReports({
byUser,
diff --git a/components/inspector/ReportActions.tsx b/components/pages/inspector/ReportActions.tsx
similarity index 97%
rename from components/inspector/ReportActions.tsx
rename to components/pages/inspector/ReportActions.tsx
index 6123d74..bda9280 100644
--- a/components/inspector/ReportActions.tsx
+++ b/components/pages/inspector/ReportActions.tsx
@@ -1,8 +1,8 @@
"use client";
import { Report } from "revolt-api";
-import { Textarea } from "../ui/textarea";
-import { Button } from "../ui/button";
+import { Textarea } from "../../ui/textarea";
+import { Button } from "../../ui/button";
import {
DropdownMenu,
DropdownMenuContent,
@@ -10,9 +10,9 @@ import {
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuTrigger,
-} from "../ui/dropdown-menu";
+} from "../../ui/dropdown-menu";
import { useState } from "react";
-import { useToast } from "../ui/use-toast";
+import { useToast } from "../../ui/use-toast";
import {
rejectReport,
reopenReport,
@@ -30,8 +30,8 @@ import {
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
-} from "../ui/alert-dialog";
-import { ReportCard } from "../cards/ReportCard";
+} from "../../ui/alert-dialog";
+import { ReportCard } from "../../cards/ReportCard";
const template: Record string> = {
resolved: (ref) =>
diff --git a/components/inspector/ServerActions.tsx b/components/pages/inspector/ServerActions.tsx
similarity index 97%
rename from components/inspector/ServerActions.tsx
rename to components/pages/inspector/ServerActions.tsx
index acb8b2f..36e299d 100644
--- a/components/inspector/ServerActions.tsx
+++ b/components/pages/inspector/ServerActions.tsx
@@ -1,7 +1,7 @@
"use client";
import { Server } from "revolt-api";
-import { Button } from "../ui/button";
+import { Button } from "../../ui/button";
import {
Command,
CommandEmpty,
@@ -18,7 +18,7 @@ import { Check, ChevronsUpDown } from "lucide-react";
import { cn } from "@/lib/utils";
import { useState } from "react";
import { updateServerDiscoverability, updateServerFlags } from "@/lib/actions";
-import { useToast } from "../ui/use-toast";
+import { useToast } from "../../ui/use-toast";
export function ServerActions({ server }: { server: Server }) {
const [selectBadges, setSelectBadges] = useState(false);
diff --git a/components/inspector/UserActions.tsx b/components/pages/inspector/UserActions.tsx
similarity index 97%
rename from components/inspector/UserActions.tsx
rename to components/pages/inspector/UserActions.tsx
index f4040a8..fe6931d 100644
--- a/components/inspector/UserActions.tsx
+++ b/components/pages/inspector/UserActions.tsx
@@ -1,13 +1,13 @@
"use client";
import Link from "next/link";
-import { Button, buttonVariants } from "../ui/button";
+import { Button, buttonVariants } from "../../ui/button";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
-} from "../ui/dropdown-menu";
+} from "../../ui/dropdown-menu";
import {
AlertDialog,
AlertDialogAction,
@@ -18,8 +18,8 @@ import {
AlertDialogHeader,
AlertDialogTitle,
AlertDialogTrigger,
-} from "../ui/alert-dialog";
-import { Input } from "../ui/input";
+} from "../../ui/alert-dialog";
+import { Input } from "../../ui/input";
import {
banUser,
closeReportsByUser,
@@ -30,9 +30,9 @@ import {
updateUserBadges,
} from "@/lib/actions";
import { useRef, useState } from "react";
-import { useToast } from "../ui/use-toast";
+import { useToast } from "../../ui/use-toast";
import { Bot, User } from "revolt-api";
-import { Card, CardHeader } from "../ui/card";
+import { Card, CardHeader } from "../../ui/card";
import { cn } from "@/lib/utils";
import { decodeTime } from "ulid";
diff --git a/lib/auth.ts b/lib/auth.ts
new file mode 100644
index 0000000..17d16a0
--- /dev/null
+++ b/lib/auth.ts
@@ -0,0 +1,14 @@
+import type { AuthOptions } from "next-auth";
+import AuthentikProvider from "next-auth/providers/authentik";
+
+export const authOptions: AuthOptions = {
+ providers: [
+ AuthentikProvider({
+ clientId: process.env.AUTHENTIK_ID!,
+ clientSecret: process.env.AUTHENTIK_SECRET!,
+ issuer:
+ process.env.AUTHENTIK_ISSUER ??
+ "https://sso.revolt.chat/application/o/admin-panel",
+ }),
+ ],
+};