diff --git a/internal/web/auth_handlers.go b/internal/web/auth_handlers.go index 294bded..d676e72 100644 --- a/internal/web/auth_handlers.go +++ b/internal/web/auth_handlers.go @@ -96,6 +96,13 @@ func (s *Server) handleLogin(w http.ResponseWriter, r *http.Request) { s.renderAuthPage(w, "login", authPageData{Title: "Anmelden", Error: "Sitzung konnte nicht gestartet werden"}) return } + // Ein Admin-Login hat keinen eigenen Beitrag zu prüfen — die + // Pre-Publish-Prüfung ("/") ist die Startseite für Mandanten, für + // einen Admin ist der Admin-Bereich der sinnvolle Einstieg. + if user.Role == "admin" { + http.Redirect(w, r, "/admin", http.StatusSeeOther) + return + } http.Redirect(w, r, "/", http.StatusSeeOther) } diff --git a/internal/web/server_test.go b/internal/web/server_test.go index d4bb33e..ff97dc4 100644 --- a/internal/web/server_test.go +++ b/internal/web/server_test.go @@ -683,6 +683,30 @@ func TestLoginWithCorrectPassword(t *testing.T) { } } +func TestLoginRedirectsAdminToAdminDashboard(t *testing.T) { + fs := newFakeStore() + s := newServer(t, fakeExtractor{}, fs) + hash, err := auth.HashPassword("admin-passwort") + if err != nil { + t.Fatalf("HashPassword: %v", err) + } + acc, err := fs.CreateAccount(context.Background(), "Deklarix Admin") + if err != nil { + t.Fatalf("CreateAccount: %v", err) + } + if _, err := fs.CreateUser(context.Background(), acc.ID, "admin@example.com", hash, "admin"); err != nil { + t.Fatalf("CreateUser: %v", err) + } + + resp := postForm(t, s, nil, "/login", url.Values{"email": {"admin@example.com"}, "password": {"admin-passwort"}}) + if resp.Code != http.StatusSeeOther { + t.Fatalf("status = %d, want 303, body: %s", resp.Code, resp.Body.String()) + } + if loc := resp.Header().Get("Location"); loc != "/admin" { + t.Fatalf("Location = %q, want /admin for an admin login", loc) + } +} + func TestLoginRejectsWrongPassword(t *testing.T) { fs := newFakeStore() s := newServer(t, fakeExtractor{}, fs)