import { deleteOwnUploadAction, extendOwnUploadAction, userLogoutAction, } from '@/src/lib/actions.js'; import { all, runCleanupIfNeeded } from '@/src/lib/db.js'; import { sharedLinkName } from '@/src/lib/files.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'; import { UploadProgressForm } from '../_components/upload-progress-form.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'); const totalBytes = uploads.reduce((total, item) => total + (Number(item.size_bytes) || 0), 0); return (

Dateiverwaltung

Angemeldet als {user.username}

{user.admin ? ( Adminbereich ) : null}

Neue Datei hochladen

Der Fortschritt wird während des Uploads live angezeigt.

Aktuelle Uploads

{uploads.length === 0 ? (

Noch keine Uploads.

) : (
{uploads.map((item) => { const shareName = sharedLinkName(item.stored_name); const sharePath = `/_share/${encodeURIComponent(shareName)}`; 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)}
)}
); }