SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
1.3 KB · 36 lines typescript
Raw Blame History
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  // ?expired=1 lets the proxy clear a stale cookie instead of redirecting straight back to /app.15  if (!session) redirect("/login?expired=1");16  if (!session.user.emailVerified) redirect("/verify-email");17  return session.user;18}1920/** Route handlers: return the user or null (no redirect). */21export async function getUserFromRequest(req: Request): Promise<AuthUser | null> {22  const session = await auth.api.getSession({ headers: req.headers });23  if (!session || !session.user.emailVerified) return null;24  return session.user;25}2627export function isAdmin(user: { email: string; role?: string | null }): boolean {28  return user.role === "admin" || isAdminEmail(user.email);29}3031export async function requireAdmin(): Promise<AuthUser> {32  const user = await requireUser();33  if (!isAdmin(user)) redirect("/app");34  return user;35}36