import AppLayout from '@/Layouts/AppLayout'; import { Head } from '@inertiajs/react'; import { KeyRound, Lock, Certificate, Key, Plus, Eye, EyeOff, Copy, AlertCircle } from 'lucide-react'; import { GlassCard, StatCard } from '@/Components/ui/GlassCard'; import { StatusBadge } from '@/Components/ui/StatusBadge'; import { Button } from '@/Components/ui/Button'; import { DataTable } from '@/Components/ui/DataTable'; import { timeAgo } from '@/lib/utils'; import { useState } from 'react'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '@radix-ui/react-tabs'; import { cn } from '@/lib/utils'; export default function IdentityIndex({ passwords, certificates, ssh_keys, stats }) { const [activeTab, setActiveTab] = useState('passwords'); const passwordColumns = [ { header: 'Title', accessor: 'title', render: row => (

{row.title}

{row.url &&

{row.url}

}
)}, { header: 'Username', accessor: 'username', render: row => ( {row.username ?? '—'} )}, { header: 'Category', accessor: 'category', render: row => ( row.category ? {row.category} : null )}, { header: 'Expires', accessor: 'expires_at', render: row => ( row.expires_at ? {timeAgo(row.expires_at)} : Never )}, { header: '', key: 'actions', render: row => (
)}, ]; const certColumns = [ { header: 'Domain', accessor: 'domain', render: row => (

{row.domain}

{row.issuer ?? 'Self-signed'}

)}, { header: 'Type', accessor: 'type', render: row => ( {row.type?.replace('-', ' ')} )}, { header: 'Expires', accessor: 'expires_at', render: row => { const daysLeft = Math.ceil((new Date(row.expires_at) - new Date()) / 86400000); return (

{daysLeft > 0 ? `${daysLeft}d left` : 'Expired'}

{new Date(row.expires_at).toLocaleDateString()}

); }}, { header: 'Status', accessor: 'status', render: row => }, { header: '', key: 'actions', render: row => ( )}, ]; return (

Identity & Secrets

Passwords, certificates, SSH keys, and secrets

{/* Tabs */} {[ { value: 'passwords', label: 'Passwords', icon: Lock }, { value: 'certificates', label: 'Certificates', icon: KeyRound }, { value: 'ssh-keys', label: 'SSH Keys', icon: Key }, ].map(t => { const Icon = t.icon; return ( {t.label} ); })}

Password Vault

SSL/TLS Certificates

SSH Keys

{r.name}

}, { header: 'Algorithm', accessor: 'algorithm', render: r => {r.algorithm?.toUpperCase()} {r.key_size} }, { header: 'Fingerprint', accessor: 'fingerprint', render: r => {r.fingerprint} }, { header: '', key: 'a', render: r => }, ]} data={ssh_keys ?? []} emptyMessage="No SSH keys. Generate or import a key pair." />
); }