package web import ( "net/http" "time" "tug/internal/transport/web/text" ) type AdminResetLink struct { URL string Username string ExpiresAt time.Time } func resetConfirmPage(id string, username Ident, message text.Key) Confirm { return Confirm{Title: text.AdminResetTitle, Body: text.AdminResetBody, Button: text.AdminUserReset, Subject: username, Action: "/users/" + id + "/reset-link", Cancel: "/users/" + id, Neutral: true, Message: message} } func (a *admin) resetConfirm(w http.ResponseWriter, r *http.Request) { if _, id, u, ok := a.loadUser(w, r); ok { a.kit.RenderConfirm(w, r, resetConfirmPage(id, Ident(u.Username), "")) } } func (a *admin) resetIssue(w http.ResponseWriter, r *http.Request) { p, id, u, ok := a.loadUser(w, r) if !ok { return } link, err := a.b.IssueResetLink(r.Context(), p.UserID, id) if key, ok := adminProblemKey(err); ok { cf := resetConfirmPage(id, Ident(u.Username), key) cf.Refused = true a.kit.RenderConfirm(w, r, cf) return } if err != nil { a.failed(w, r, "issue reset link", err) return } a.kit.RenderOneTime(w, r, OneTime{Title: text.AdminResetOneTimeTitle, Subject: Ident(link.Username), Secret: Ident(link.URL), Expires: Ident(stamp(link.ExpiresAt)), Back: "/users/" + id, BackText: text.AdminResetBack}) }