import { auth } from "@/auth"; import { db } from "@/lib/db"; import { redirect } from "next/navigation"; import { hasPermission } from "@/lib/permissions"; import { generateDownloadUrl } from "@/lib/storage"; import { ChangePasswordForm } from "./change-password-form"; import { SignatureUploader } from "./signature-uploader"; import { SuperUserRequestForm } from "./superuser-request-form"; import type { Metadata } from "next"; export const metadata: Metadata = { title: "My Profile" }; const ROLE_LABELS: Record = { TECHNICAL: "Technical", MANNING: "Manning", ACCOUNTS: "Accounts", MANAGER: "Manager", SUPERUSER: "SuperUser", AUDITOR: "Auditor", ADMIN: "Admin", }; export default async function ProfilePage() { const session = await auth(); if (!session?.user) redirect("/login"); const userSelect = { id: true, name: true, email: true, employeeId: true, role: true, signatureKey: true, passwordHash: true, superUserRequests: { orderBy: { createdAt: "desc" as const }, take: 1, select: { status: true, createdAt: true }, }, }; // Look up by id, falling back to email. SSO/no-password users can carry a JWT // whose `id` differs from the DB row; the email fallback keeps the page reachable. let user = await db.user.findUnique({ where: { id: session.user.id }, select: userSelect }); if (!user && session.user.email) { user = await db.user.findUnique({ where: { email: session.user.email }, select: userSelect }); } if (!user) redirect("/login"); // Only approvers (those who can approve POs) may upload a signature. const canHaveSignature = hasPermission(user.role, "approve_po"); const canRequestSuperUser = user.role !== "SUPERUSER" && user.role !== "ADMIN"; // SSO-only users have no password yet; the form lets them set one. const hasPassword = !!user.passwordHash; // Never let a storage hiccup (missing key, R2 misconfig) crash the profile page. let signatureUrl: string | null = null; if (user.signatureKey) { try { signatureUrl = await generateDownloadUrl(user.signatureKey); } catch { signatureUrl = null; } } const latestRequest = user.superUserRequests[0] ?? null; return (

My Profile

Manage your account settings

{/* Account Info */}

Account Information

Name
{user.name}
Email
{user.email}
Employee ID
{user.employeeId}
Role
{ROLE_LABELS[user.role] ?? user.role}
{/* Change / Set Password */}

{hasPassword ? "Change Password" : "Set Password"}

{!hasPassword && (

You sign in with single sign-on. Optionally set a password to also sign in with email.

)}
{/* Signature (managers & superusers) */} {canHaveSignature && (

Approval Signature

Your signature is embedded in approved PO documents (PDF and XLSX). {!user.signatureKey && ( A signature is required to approve purchase orders. )}

)} {/* SuperUser access request */} {canRequestSuperUser && (

SuperUser Access

)}
); }