import { deleteOwnUploadAction, extendOwnUploadAction, uploadFileAction, userLogoutAction, } from '@/src/lib/actions.js'; import { all, runCleanupIfNeeded } from '@/src/lib/db.js'; import { formatBytes, formatCountdown, formatTimestamp, readSearchParam } from '@/src/lib/format.js'; import { ensureCsrfToken, requireAuthenticatedUser } from '@/src/lib/security.js'; import { CopyLinkButton } from '../_components/copy-link-button.js'; import { StatusMessage } from '../_components/status-message.js'; export const dynamic = 'force-dynamic'; export default async function DashboardPage({ searchParams }) { await runCleanupIfNeeded(); const user = await requireAuthenticatedUser(); const csrfToken = await ensureCsrfToken(); const uploads = await all( 'SELECT id, original_name, stored_name, size_bytes, uploaded_at, expires_at FROM uploads WHERE owner = ? ORDER BY uploaded_at DESC', [user.username] ); const resolvedSearchParams = await searchParams; const error = readSearchParam(resolvedSearchParams, 'error'); const success = readSearchParam(resolvedSearchParams, 'success'); return (

Dateiverwaltung

Angemeldet als {user.username}

{user.admin ? ( Adminbereich ) : null}

Neue Datei hochladen

Aktuelle Uploads

{uploads.length === 0 ? (

Noch keine Uploads.

) : (
{uploads.map((item) => { const sharePath = `/_share/${encodeURIComponent(item.stored_name)}`; return ( ); })}
Datei Größe Hochgeladen Ablauf Aktionen
{item.original_name}
{item.stored_name}
{formatBytes(item.size_bytes)} {formatTimestamp(item.uploaded_at)}
{formatTimestamp(item.expires_at)}
Noch {formatCountdown(item.expires_at)}
)}
); }