SPB Git

spb/polyllm

Public
1.2 KB · 35 lines typescript
1import "server-only";2import { headers } from "next/headers";3import { redirect } from "next/navigation";4import { auth, type AuthUser } from "@/lib/auth";5import { isAdminEmail } from "@/lib/env";67export async function getSession() {8  return auth.api.getSession({ headers: await headers() });9}1011/** Server components / actions: redirect to login when not authenticated or unverified. */12export async function requireUser(): Promise<AuthUser> {13  const session = await getSession();14  if (!session) redirect("/login");15  if (!session.user.emailVerified) redirect("/verify-email");16  return session.user;17}1819/** Route handlers: return the user or null (no redirect). */20export async function getUserFromRequest(req: Request): Promise<AuthUser | null> {21  const session = await auth.api.getSession({ headers: req.headers });22  if (!session || !session.user.emailVerified) return null;23  return session.user;24}2526export function isAdmin(user: { email: string; role?: string | null }): boolean {27  return user.role === "admin" || isAdminEmail(user.email);28}2930export async function requireAdmin(): Promise<AuthUser> {31  const user = await requireUser();32  if (!isAdmin(user)) redirect("/app");33  return user;34}35
Files · d6f683a5f3ce2650916bcde9467e60c640c62fa9
Menu

Theme