import { ClockIcon, LogOut, RefreshCw, UserCheck } from "lucide-react"; import { Form, redirect } from "react-router"; import Button from "~/components/Button"; import Card from "~/components/Card"; import { Capabilities } from "~/server/web/roles"; import toast from "~/utils/toast"; import type { Route } from "./+types/pending-approval"; export async function loader({ request, context }: Route.LoaderArgs) { try { const session = await context.sessions.auth(request); // API key users skip this page if (session.user.subject === "unknown-non-oauth") { return redirect("/machines"); } const hasAccess = await context.sessions.check(request, Capabilities.ui_access); if (hasAccess) { return redirect("/machines"); } const url = context.config.headscale.public_url ?? context.config.headscale.url; return { user: session.user, url, }; } catch { return redirect("/login", { headers: { "Set-Cookie": await context.sessions.destroySession(), }, }); } } export default function PendingApproval({ loaderData }: Route.ComponentProps) { return (
Approval Required

{loaderData.user.email ?? loaderData.user.name}

Your account has been created but requires approval from an administrator before you can access the management console.

What happens next?

  • An administrator will review your account
  • Once approved, you will receive the appropriate access level
  • This page will automatically redirect you once approved
In the meantime, you can still connect your devices to the Tailnet using the command below:

Click to copy the command

Checking for approval automatically...
); }