agrega botón Admin en navbar con detección de sesión

- Nuevo endpoint GET /admin/status devuelve si el usuario está logueado como admin
- Navbar muestra botón "Admin" que lleva a /admin/login si no hay sesión,
  o "⚙ Admin" → /admin/playlists si ya está autenticado

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-23 13:59:16 -04:00
parent 94cda7293f
commit 808ddd889d
2 changed files with 15 additions and 2 deletions
+5
View File
@@ -84,6 +84,11 @@ def _require_admin(request: Request):
# ── Login ────────────────────────────────────────────────────────────────────── # ── Login ──────────────────────────────────────────────────────────────────────
@router.get("/status")
def admin_status(request: Request):
return {"logged_in": bool(request.session.get("admin_logged_in"))}
@router.get("/login", response_class=HTMLResponse) @router.get("/login", response_class=HTMLResponse)
def login_page(request: Request): def login_page(request: Request):
return templates.TemplateResponse("admin/login.html", {"request": request, "error": None}) return templates.TemplateResponse("admin/login.html", {"request": request, "error": None})
+10 -2
View File
@@ -11,11 +11,19 @@
<div class="brand">🎵 Cantina</div> <div class="brand">🎵 Cantina</div>
<div class="nav-links"> <div class="nav-links">
<a href="/">Reproductor</a> <a href="/">Reproductor</a>
<a href="/admin/playlists">Playlists</a>
<a href="/admin/voting">Votación</a>
<a href="/stats/">Estadísticas</a> <a href="/stats/">Estadísticas</a>
<a id="admin-nav-btn" href="/admin/login" class="btn-sm">Admin</a>
</div> </div>
</nav> </nav>
<script>
fetch('/admin/status').then(r => r.json()).then(data => {
const btn = document.getElementById('admin-nav-btn');
if (data.logged_in) {
btn.textContent = '⚙ Admin';
btn.href = '/admin/playlists';
}
}).catch(() => {});
</script>
<main> <main>
{% block content %}{% endblock %} {% block content %}{% endblock %}
</main> </main>