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", + }), + ], +};