fix: toggle as pure HTML form — no JS, no fetch, just POST+redirect

- views/index.ejs: onclick+fetch → form method=POST с button
- ui/routes/auth.js: JSON → res.redirect(Referer)
- Текст меняется: «Администратор» ↔ «Выйти из админки»
This commit is contained in:
2026-06-11 14:59:59 +04:00
parent fa4d5646fa
commit 9cb53df8b1
3 changed files with 11 additions and 9 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "ipwhitelist",
"version": "0.5.48",
"version": "0.5.49",
"description": "IP WhiteList microservice for cloud provider",
"main": "server.js",
"scripts": {
+2 -1
View File
@@ -176,7 +176,8 @@ function createRouter({ auth, MOCK_USERS, authLimiter }) {
if (!canAdmin) return res.status(403).send('Forbidden');
req.session.adminMode = !req.session.adminMode;
res.json({ ok: true, adminMode: req.session.adminMode });
// Редирект туда же откуда пришли, или на главную
res.redirect(req.get('Referer') || '/');
});
// GET /logout
+8 -7
View File
@@ -160,13 +160,14 @@
<!-- Кнопки правой части header: admin-ссылки + чекбокс + выход -->
<span style="margin-left:auto;display:flex;gap:.5rem;align-items:center;">
<% if (typeof canAdminMode !== 'undefined' && canAdminMode) { %>
<span id="admin-toggle" style="font-size:.8rem;color:var(--muted);display:flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;cursor:pointer;user-select:none;"
onclick="var bg=this.querySelector('.tg-bg'),kn=this.querySelector('.tg-knob');if(bg.style.background==='var(--blue)'||getComputedStyle(bg).background.includes('37,99,235')){bg.style.background='var(--border)';kn.style.left='2px';kn.style.right='auto'}else{bg.style.background='var(--blue)';kn.style.right='2px';kn.style.left='auto'};fetch('/toggle-admin',{method:'POST'}).then(r=>r.json()).then(d=>{if(d.ok)location.reload()})">
<label style="cursor:pointer;">Администратор</label>
<span class="tg-bg" style="position:relative;width:36px;height:20px;background:<%= adminMode ? 'var(--blue)' : 'var(--border)' %>;border-radius:10px;transition:background .2s;">
<span class="tg-knob" style="position:absolute;top:2px;<%= adminMode ? 'right:2px;' : 'left:2px;' %>width:16px;height:16px;background:#fff;border-radius:50%;transition:all .2s;"></span>
</span>
</span>
<form method="POST" action="/toggle-admin" style="display:inline;">
<button type="submit" style="font-size:.8rem;color:var(--muted);display:flex;align-items:center;gap:.3rem;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;cursor:pointer;">
<span style="font-weight:500;"><%= adminMode ? 'Выйти из админки' : 'Администратор' %></span>
<span style="position:relative;width:36px;height:20px;background:<%= adminMode ? 'var(--blue)' : 'var(--border)' %>;border-radius:10px;transition:background .2s;">
<span style="position:absolute;top:2px;<%= adminMode ? 'right:2px;' : 'left:2px;' %>width:16px;height:16px;background:#fff;border-radius:50%;transition:all .2s;"></span>
</span>
</button>
</form>
<% } %>
<% if (typeof adminMode !== 'undefined' && adminMode) { %>
<a href="/audit" style="font-size:.8rem;color:var(--muted);text-decoration:none;padding:.2rem .6rem;border:1px solid var(--border);border-radius:5px;background:#fff;">Аудит</a>