diff --git a/web/src/app/admin/connectors/web/page.tsx b/web/src/app/admin/connectors/web/page.tsx index c696df642..99247652c 100644 --- a/web/src/app/admin/connectors/web/page.tsx +++ b/web/src/app/admin/connectors/web/page.tsx @@ -37,7 +37,7 @@ export default function Web() { const urlToLatestIndexAttempt = new Map(); const urlToLatestIndexSuccess = new Map(); - data?.index_attempts.forEach((indexAttempt) => { + data?.index_attempts?.forEach((indexAttempt) => { const latestIndexAttempt = urlToLatestIndexAttempt.get(indexAttempt.url); if ( !latestIndexAttempt || diff --git a/web/src/app/admin/layout.tsx b/web/src/app/admin/layout.tsx index 68572d544..24eaea3c5 100644 --- a/web/src/app/admin/layout.tsx +++ b/web/src/app/admin/layout.tsx @@ -1,15 +1,25 @@ import { Header } from "@/components/Header"; import { Sidebar } from "@/components/admin/connectors/Sidebar"; import { GlobeIcon, SlackIcon } from "@/components/icons/icons"; +import { getCurrentUserSS } from "@/lib/userSS"; +import { redirect } from "next/navigation"; -export default function AdminLayout({ +export default async function AdminLayout({ children, }: { children: React.ReactNode; }) { + const user = await getCurrentUserSS(); + if (!user) { + return redirect("/auth/login"); + } + if (user.role !== "admin") { + return redirect("/"); + } + return (
-
+
-
+
diff --git a/web/src/components/Header.tsx b/web/src/components/Header.tsx index 71574e16f..f0b463e3d 100644 --- a/web/src/components/Header.tsx +++ b/web/src/components/Header.tsx @@ -1,5 +1,6 @@ "use client"; +import { User } from "@/lib/types"; import { logout } from "@/lib/user"; import { UserCircle } from "@phosphor-icons/react"; import Link from "next/link"; @@ -7,7 +8,11 @@ import { useRouter } from "next/navigation"; import React, { useEffect, useRef, useState } from "react"; import "tailwindcss/tailwind.css"; -export const Header: React.FC = () => { +interface HeaderProps { + user: User; +} + +export const Header: React.FC = ({ user }) => { const router = useRouter(); const [dropdownOpen, setDropdownOpen] = useState(false); const dropdownRef = useRef(null); @@ -64,11 +69,13 @@ export const Header: React.FC = () => { "w-36 overflow-hidden shadow-xl z-10 text-sm text-gray-300" } > - -
- Connectors -
- + {user.role === "admin" && ( + +
+ Connectors +
+ + )}