diff --git a/internal/server/http/ui_users.go b/internal/server/http/ui_users.go index 8f5e780..08ee401 100644 --- a/internal/server/http/ui_users.go +++ b/internal/server/http/ui_users.go @@ -153,6 +153,11 @@ type userFormPage struct { SetupURL string SetupExpAt time.Time Error string + // Reenable is set when the admin landed here because they tried + // to add a username that already exists (disabled). Triggers a + // banner on the edit page explaining why and steering them at + // the Re-enable button. See handleUIUserNewPost's collision branch. + Reenable bool } func (s *Server) handleUIUserNewGet(w stdhttp.ResponseWriter, r *stdhttp.Request) { @@ -290,6 +295,7 @@ func (s *Server) handleUIUserEditGet(w stdhttp.ResponseWriter, r *stdhttp.Reques Mode: "edit", ID: target.ID, Username: target.Username, Email: em, Role: string(target.Role), Disabled: target.DisabledAt != nil, + Reenable: r.URL.Query().Get("reenable") == "1", } _ = s.deps.UI.Render(w, "user_edit", view) } diff --git a/web/templates/pages/user_edit.html b/web/templates/pages/user_edit.html index a479f7b..4014fad 100644 --- a/web/templates/pages/user_edit.html +++ b/web/templates/pages/user_edit.html @@ -16,6 +16,28 @@ {{else}}Edit {{$page.Username}}{{end}} + {{/* Re-enable banner — fires when the admin tried to add a user + whose name already exists in a disabled state. We were + redirected here from /settings/users/new with ?reenable=1. */}} + {{if and $page.Reenable $page.Disabled}} +
+ A user with this name was created previously and then disabled. + Re-enable them to restore access (their existing role + email + are kept), or pick a different name. +
+ +