diff --git a/src/App.tsx b/src/App.tsx
index f2578fd..8f2111d 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -99,6 +99,10 @@ const router = createBrowserRouter([
loader: getServerSettings,
element: ,
},
+ {
+ path: "/admin",
+ element: ,
+ },
],
},
],
diff --git a/src/route-widgets/AuthenticateRoute/NavigationButton.tsx b/src/route-widgets/AuthenticateRoute/NavigationButton.tsx
index 0ef1b8e..022fc05 100644
--- a/src/route-widgets/AuthenticateRoute/NavigationButton.tsx
+++ b/src/route-widgets/AuthenticateRoute/NavigationButton.tsx
@@ -1,7 +1,7 @@
import {ReactElement, useContext} from "react"
import {BiStats} from "react-icons/bi"
import {MdSettings} from "react-icons/md"
-import {FaMask} from "react-icons/fa"
+import {FaMask, FaServer} from "react-icons/fa"
import {Link as RouterLink, useLocation} from "react-router-dom"
import {useTranslation} from "react-i18next"
@@ -16,6 +16,7 @@ export enum NavigationSection {
Aliases,
Reports,
Settings,
+ Admin,
}
export interface NavigationButtonProps {
@@ -27,6 +28,7 @@ const SECTION_ICON_MAP: Record = {
[NavigationSection.Aliases]: ,
[NavigationSection.Reports]: ,
[NavigationSection.Settings]: ,
+ [NavigationSection.Admin]: ,
}
const SECTION_TEXT_MAP: Record = {
@@ -34,6 +36,7 @@ const SECTION_TEXT_MAP: Record = {
[NavigationSection.Aliases]: "components.NavigationButton.aliases",
[NavigationSection.Reports]: "components.NavigationButton.reports",
[NavigationSection.Settings]: "components.NavigationButton.settings",
+ [NavigationSection.Admin]: "components.NavigationButton.admin",
}
const PATH_SECTION_MAP: Record = {
@@ -41,6 +44,7 @@ const PATH_SECTION_MAP: Record = {
aliases: NavigationSection.Aliases,
reports: NavigationSection.Reports,
settings: NavigationSection.Settings,
+ admin: NavigationSection.Admin,
}
export default function NavigationButton({section}: NavigationButtonProps): ReactElement {
diff --git a/src/routes/AdminRoute.tsx b/src/routes/AdminRoute.tsx
new file mode 100644
index 0000000..e2b9f66
--- /dev/null
+++ b/src/routes/AdminRoute.tsx
@@ -0,0 +1,15 @@
+import {ReactElement, useLayoutEffect} from "react";
+import {useNavigateToNext, useUser} from "~/hooks";
+
+export default function AdminRoute(): ReactElement {
+ const navigateToNext = useNavigateToNext();
+ const user = useUser();
+
+ useLayoutEffect(() => {
+ if (!user.isAdmin) {
+ navigateToNext();
+ }
+ }, [user.isAdmin, navigateToNext])
+
+
+}
diff --git a/src/server-types.ts b/src/server-types.ts
index 9669ec1..eeef306 100644
--- a/src/server-types.ts
+++ b/src/server-types.ts
@@ -41,6 +41,7 @@ export interface ServerUser {
isDecrypted: false
encryptedPassword: string
salt: string
+ isAdmin: boolean
email: {
address: string
isVerified: boolean