diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c6583..36d613c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -71,6 +71,11 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version the component kit. Sign in names the mail host above its title; a refused attempt is shown as a notice above the fields. `login` and `setup` are off the ratchet. +- panel-redesign (design): the sign-in page before any administrator exists + is a drawn screen (`login-no-admin`): the heading *No administrator yet* and + the pointer to the one-time setup link, in the same column as the form. The + signed-out column is sized through `.sp-form`, not through `form` (owner, + 2026-10-09). ### Changed diff --git a/docs/assets/panel-redesign/evidence/login-no-admin.png b/docs/assets/panel-redesign/evidence/login-no-admin.png new file mode 100644 index 0000000..d5837fe Binary files /dev/null and b/docs/assets/panel-redesign/evidence/login-no-admin.png differ diff --git a/internal/web/auth/handlers_test.go b/internal/web/auth/handlers_test.go index 7bfa250..c8651c0 100644 --- a/internal/web/auth/handlers_test.go +++ b/internal/web/auth/handlers_test.go @@ -133,7 +133,7 @@ func TestLoginPointsAtSetupBeforeTheFirstAdministrator(t *testing.T) { t.Fatalf("status = %d, want 200", rec.Code) } body := rec.Body.String() - if !strings.Contains(body, "No administrator has been created yet") { + if !strings.Contains(body, "No administrator yet") || !strings.Contains(body, "one-time setup link") { t.Errorf("the login page does not point at the setup link:\n%s", body) } if strings.Contains(body, `name="password"`) { diff --git a/internal/web/view/signin_test.go b/internal/web/view/signin_test.go index 0104d2a..406a883 100644 --- a/internal/web/view/signin_test.go +++ b/internal/web/view/signin_test.go @@ -53,12 +53,11 @@ func TestLoginShowsAnErrorEscaped(t *testing.T) { func TestLoginWithoutAnAdministratorHasNoForm(t *testing.T) { out := renderSignedOut(t, "login", NewLoginSetupHint("mail.example.org")) - if !strings.Contains(out, "No administrator has been created yet") { + if !strings.Contains(out, "No administrator yet") || !strings.Contains(out, "one-time setup link") { t.Error("the setup hint is missing") } - // The element stays (the signed-out layout centres the column through it) but - // nothing in it can be filled in or sent. - for _, bad := range []string{`action=`, ` +{{/* Mockup login-no-admin.html: the same column, not a form. */}} +
{{template "kicker" .Host}}
{{end}} -No administrator has been created yet. Open the one-time - setup link printed in the container log to get started.
- +Open the one-time setup link printed in the container log to create one.
+