From 029b26e6ae82b259349f2b92b4592791dba6a190 Mon Sep 17 00:00:00 2001
From: Emil
Date: Mon, 3 Aug 2026 02:06:45 +0300
Subject: [PATCH] Explain the admin-required error and offer account switching
on the login page
---
coordinator/internal/transport/http/server.go | 1 +
.../transport/http/templates/login.html | 5 +++-
.../transport/http/templates/logout-form.html | 24 ++++++++++++++++
.../internal/transport/http/ui_admin.go | 7 ++++-
.../transport/http/ui_admin_internal_test.go | 28 +++++++++++++++++--
.../internal/transport/http/ui_auth.go | 7 +++++
6 files changed, 67 insertions(+), 5 deletions(-)
create mode 100644 coordinator/internal/transport/http/templates/logout-form.html
diff --git a/coordinator/internal/transport/http/server.go b/coordinator/internal/transport/http/server.go
index 2f2d51e..1bc6e95 100644
--- a/coordinator/internal/transport/http/server.go
+++ b/coordinator/internal/transport/http/server.go
@@ -158,6 +158,7 @@ func (s *Server) Handler(token string, uiToken ...string) http.Handler {
// Public auth pages — reachable without a session so a user can log in.
ui.HandleFunc("GET /ui/login", s.handleUILoginForm)
ui.HandleFunc("POST /ui/login", s.handleUILogin)
+ ui.HandleFunc("GET /ui/logout-form", s.handleUILogoutForm)
ui.HandleFunc("GET /ui/register", s.handleUIRegisterForm)
ui.HandleFunc("POST /ui/register", s.handleUIRegister)
ui.HandleFunc("POST /ui/logout", s.handleUILogout)
diff --git a/coordinator/internal/transport/http/templates/login.html b/coordinator/internal/transport/http/templates/login.html
index 8e7d22f..e3dd549 100644
--- a/coordinator/internal/transport/http/templates/login.html
+++ b/coordinator/internal/transport/http/templates/login.html
@@ -20,7 +20,10 @@
- {{if .Error}}
{{.Error}}
{{end}}
+ {{if eq .Error "admin role required"}}
+
The admin console is reserved for the cluster administrator.
+
You are signed in as a non-admin. Log out, then sign in with the admin account — its login is printed by coordinator serve on first start and stored in ~/.scimesh/admin.password.