From 6dedc6d432d649c3a442d180a2722f8e6aeedae5 Mon Sep 17 00:00:00 2001 From: cclohmar Date: Wed, 15 Jul 2026 21:18:05 +0100 Subject: [PATCH] fix: save original user data before edit, restore on recreate failure --- main.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 746c7fb..c0cad7a 100644 --- a/main.go +++ b/main.go @@ -1853,6 +1853,13 @@ const adminHTML = ` groups.push(cb.value); }); + // Save original user data before deleting (safety net) + let originalData = null; + try { + const origResp = await fetch('/api/users/' + username); + if (origResp.ok) originalData = await origResp.json(); + } catch(e) {} + // 1. Delete user const delResp = await fetch('/api/users/' + username, { method: 'DELETE' }); if (!delResp.ok) { alert('Failed to delete user for re-creation'); return; } @@ -1888,7 +1895,15 @@ const adminHTML = ` closeEditUserModal(); loadUsers(); } else { - resultDiv.innerHTML = '
❌ FAILED to recreate user. The user was deleted but could not be recreated. Please manually add the user again. Error: ' + JSON.stringify(result) + '
'; + // Restore original user if available + if (originalData && originalData.username) { + const restoreBody = JSON.stringify({users:[{username:originalData.username,display_name:originalData.display_name||originalData.username,email:originalData.email||'',groups:originalData.groups||['users']}]}); + await fetch('/api/users/bulk', {method:'POST', headers:{'Content-Type':'application/json'}, body:restoreBody}); + resultDiv.innerHTML = '
❌ Update failed. The user has been restored to their original state. Error: ' + JSON.stringify(result) + '
'; + loadUsers(); + } else { + resultDiv.innerHTML = '
❌ FAILED to recreate user. The user was deleted but could not be recreated. Please manually add the user again. Error: ' + JSON.stringify(result) + '
'; + } } return false; }