import React from 'react' import { Head, router } from '@inertiajs/react' import AdminLayout from '../../Layouts/AdminLayout' const EVENT_LABELS = { login: 'Login', register: 'Register', forgot_password: 'Forgot password', reset_password: 'Reset password', } const STATUS_BADGES = { success: 'border-emerald-400/20 bg-emerald-400/10 text-emerald-200', failed: 'border-rose-400/20 bg-rose-400/10 text-rose-200', } function formatTimestamp(value) { if (!value) { return 'Unknown' } return new Intl.DateTimeFormat('en-GB', { dateStyle: 'medium', timeStyle: 'medium', }).format(new Date(value)) } function formatLabel(value) { if (!value) { return 'Not recorded' } return value .replaceAll('_', ' ') .replace(/\b\w/g, (match) => match.toUpperCase()) } function SummaryCard({ label, value, tone = 'slate' }) { const tones = { slate: 'border-white/[0.07] bg-white/[0.02] text-white', rose: 'border-rose-400/15 bg-rose-500/10 text-rose-100', sky: 'border-sky-400/15 bg-sky-500/10 text-sky-100', } return (

{label}

{value}

) } export default function AuthAudit({ logs, filters, eventOptions, statusOptions }) { const items = logs?.data ?? [] const failedCount = items.filter((entry) => entry.status === 'failed').length const uniqueIpCount = new Set(items.map((entry) => entry.ip).filter(Boolean)).size const handleSearch = (event) => { event.preventDefault() const search = event.target.elements.search.value router.get('/moderation/auth-audit', { search, event: filters.event, status: filters.status, }, { preserveState: true, preserveScroll: true, }) } const handleFilterChange = (key, value) => { router.get('/moderation/auth-audit', { search: filters.search, event: key === 'event' ? value : filters.event, status: key === 'status' ? value : filters.status, }, { preserveState: true, preserveScroll: true, }) } return (
{items.length === 0 ? ( ) : items.map((entry) => ( ))}
When Event Status Identifier User IP Reason Details
No auth audit records matched the current filters.
{formatTimestamp(entry.created_at)} {EVENT_LABELS[entry.event_type] ?? formatLabel(entry.event_type)} {entry.status} {entry.identifier || 'Not recorded'} {entry.user ? (

{entry.user.name}

{entry.user.username ? `@${entry.user.username}` : entry.user.email}

) : Unknown user}
{entry.ip || 'Unknown'} {formatLabel(entry.reason)}
View payload

User agent

{entry.user_agent || 'Not recorded'}

Metadata

{JSON.stringify(entry.metadata || {}, null, 2)}
{logs?.last_page > 1 ? (

Showing {logs.from}–{logs.to} of {logs.total} audit records

{logs.links.map((link, index) => ( link.url ? (
) : null}
) }