From 5ebc3adff9c96cbfa64029aa8bda21923068f3d5 Mon Sep 17 00:00:00 2001 From: Kibi Kelburton Date: Tue, 18 Aug 2026 20:01:27 +0200 Subject: [PATCH] dsaa --- views/admin.html | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/views/admin.html b/views/admin.html index 34184e0..80e1728 100644 --- a/views/admin.html +++ b/views/admin.html @@ -117,7 +117,12 @@ status.style.color = 'var(--accent)'; try { - const csrfToken = window.f0ckSession?.csrf_token || '{{ csrf_token }}'; + const csrfToken = (window.f0ckSession && window.f0ckSession.csrf_token) || '{{ csrf_token }}'; + if (!csrfToken || csrfToken.startsWith('{')) { + status.textContent = 'CSRF token missing. Please refresh the page.'; + status.style.color = '#d9534f'; + return; + } const res = await fetch('/admin/settings', { method: 'POST', headers: { @@ -126,15 +131,20 @@ 'X-CSRF-Token': csrfToken }, body: new URLSearchParams({ - manual_approval: approvalToggle.checked ? 'on' : 'off', + manual_approval: approvalToggle ? (approvalToggle.checked ? 'on' : 'off') : 'off', ...(registrationToggle ? { registration_open: registrationToggle.checked ? 'on' : 'off' } : {}), - min_tags: minTagsInput.value, - trusted_uploads: trustedUploadsInput.value, + min_tags: minTagsInput ? minTagsInput.value : '3', + trusted_uploads: trustedUploadsInput ? trustedUploadsInput.value : '3', csrf_token: csrfToken }).toString() }); - if (!res.ok) throw new Error('Server returned ' + res.status); + if (!res.ok) { + if (res.status === 403) { + throw new Error('CSRF validation failed or session expired. Please reload the page.'); + } + throw new Error('Server returned ' + res.status); + } const data = await res.json(); if (data.success) {