fix: save original user data before edit, restore on recreate failure
This commit is contained in:
parent
4a9d5f7ede
commit
6dedc6d432
1 changed files with 16 additions and 1 deletions
15
main.go
15
main.go
|
|
@ -1853,6 +1853,13 @@ const adminHTML = `<!DOCTYPE html>
|
||||||
groups.push(cb.value);
|
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
|
// 1. Delete user
|
||||||
const delResp = await fetch('/api/users/' + username, { method: 'DELETE' });
|
const delResp = await fetch('/api/users/' + username, { method: 'DELETE' });
|
||||||
if (!delResp.ok) { alert('Failed to delete user for re-creation'); return; }
|
if (!delResp.ok) { alert('Failed to delete user for re-creation'); return; }
|
||||||
|
|
@ -1887,9 +1894,17 @@ const adminHTML = `<!DOCTYPE html>
|
||||||
resultDiv.innerHTML = '<div style="padding:0.75rem 1rem;background:#f0fff4;border:1px solid #c6f6d5;border-radius:8px;color:#276749;font-size:0.88rem;">✅ User updated.<br>New password: <code style="background:#edf2f7;padding:0.15rem 0.4rem;border-radius:4px;font-size:0.82rem;">' + pwd + '</code><br>Share this with the user.</div>';
|
resultDiv.innerHTML = '<div style="padding:0.75rem 1rem;background:#f0fff4;border:1px solid #c6f6d5;border-radius:8px;color:#276749;font-size:0.88rem;">✅ User updated.<br>New password: <code style="background:#edf2f7;padding:0.15rem 0.4rem;border-radius:4px;font-size:0.82rem;">' + pwd + '</code><br>Share this with the user.</div>';
|
||||||
closeEditUserModal();
|
closeEditUserModal();
|
||||||
loadUsers();
|
loadUsers();
|
||||||
|
} else {
|
||||||
|
// 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 = '<div style="padding:0.75rem 1rem;background:#fff5f5;border:1px solid #fed7d7;border-radius:8px;color:#c53030;font-size:0.88rem;">❌ Update failed. The user has been restored to their original state. Error: ' + JSON.stringify(result) + '</div>';
|
||||||
|
loadUsers();
|
||||||
} else {
|
} else {
|
||||||
resultDiv.innerHTML = '<div style="padding:0.75rem 1rem;background:#fff5f5;border:1px solid #fed7d7;border-radius:8px;color:#c53030;font-size:0.88rem;">❌ FAILED to recreate user. The user was deleted but could not be recreated. Please manually add the user again. Error: ' + JSON.stringify(result) + '</div>';
|
resultDiv.innerHTML = '<div style="padding:0.75rem 1rem;background:#fff5f5;border:1px solid #fed7d7;border-radius:8px;color:#c53030;font-size:0.88rem;">❌ FAILED to recreate user. The user was deleted but could not be recreated. Please manually add the user again. Error: ' + JSON.stringify(result) + '</div>';
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue