import config from "../config.ts"; import { formatDate, formatDateTime } from "../lib/formatDate.ts"; import type { SessionUser } from "../middleware/session.ts"; import { Avatar } from "./Avatar.tsx"; import { Layout } from "./layout.tsx"; interface SettingsProps { user: SessionUser; hasPassword: boolean; passkeys: { id: number; created_at: string }[]; sshKeys: { id: number; name: string; fingerprint: string; created_at: string; }[]; theme: string; success: string | null; error: string | null; pendingUsers: { id: number; username: string; register_application: string | null; created_at: string; }[]; } const successMessages: Record = { password: "Password updated.", password_removed: "Password removed.", passkey_revoked: "Passkey revoked.", theme: "Theme preference saved.", user_created: "Account created.", user_deleted: "Account deleted.", user_approved: "Account approved.", user_denied: "Account denied.", all_approved: "All pending accounts approved.", all_denied: "All pending accounts denied.", ssh_key_added: "SSH key added.", ssh_key_deleted: "SSH key removed.", }; export function Settings({ user, hasPassword, passkeys, sshKeys, theme, success, error, pendingUsers, }: SettingsProps) { const successMsg = success ? (successMessages[success] ?? null) : null; return (

Settings

{successMsg &&

{successMsg}

} {error &&

{error}

} {/* Avatar */}

Avatar

{/* Appearance */}

Appearance

{/* Password */}

Password

{hasPassword ? "Password is set." : "No password set."}

{hasPassword && (
)}
{hasPassword && passkeys.length > 0 && (
)}
{/* Passkeys */}

Passkeys

{passkeys.length > 0 && (
{passkeys.map((pk) => (
Added {formatDate(pk.created_at)}
))}
)}
{/* SSH Keys */}

SSH Keys

{sshKeys.length > 0 && (
{sshKeys.map((key) => (
{key.name} {key.fingerprint} Added {formatDate(key.created_at)}
))}
)}
{/* Admin: Registration Queue */} {user.isAdmin && pendingUsers !== undefined && (

Registration queue

{pendingUsers.length === 0 ? (

No pending registrations.

) : (
    {pendingUsers.map((u) => (
  • {u.username} {formatDateTime( u.created_at, )}
    {u.register_application && (

    {u.register_application}

    )}
  • ))}
)}
)} {/* Admin: User Management */} {user.isAdmin && (

User Management

Create account

Delete account

)}
); }