This commit is contained in:
Vicente Ferrari Smith 2026-05-25 10:32:36 +02:00
parent f77bcb3772
commit 074792be8f
5 changed files with 23 additions and 16 deletions

View File

@ -53,6 +53,11 @@ func (api *Api) CreateUser(w http.ResponseWriter, r *http.Request) {
return return
} }
api.App.Logger.PrintInfo("user registered", map[string]string{
"user_id": strconv.FormatInt(user.ID, 10),
"email": user.Email,
})
if err = common.WriteJSON(w, http.StatusCreated, common.Envelope{"user": user, "authentication_token": authToken}, nil); err != nil { if err = common.WriteJSON(w, http.StatusCreated, common.Envelope{"user": user, "authentication_token": authToken}, nil); err != nil {
api.errorResponse(w, r, err) api.errorResponse(w, r, err)
} }

View File

@ -63,7 +63,7 @@ func routes(app *common.Application) http.Handler {
webMux.HandleFunc("GET /users", web.RequirePermission("users:read", web.UsersPage)) webMux.HandleFunc("GET /users", web.RequirePermission("users:read", web.UsersPage))
webMux.HandleFunc("GET /users/me", web.RequireAuthenticatedUser(web.ProfilePage)) webMux.HandleFunc("GET /users/me", web.RequireAuthenticatedUser(web.ProfilePage))
webMux.HandleFunc("GET /users/activated", web.ActivatePage) webMux.HandleFunc("GET /users/activated", web.ActivatePage)
webMux.HandleFunc("POST /users/activated", web.ActivateUserAction) webMux.HandleFunc("PUT /users/activated", web.ActivateUserAction)
webMux.HandleFunc("DELETE /users/{id}", web.RequirePermission("users:write", web.DeleteUserAction)) webMux.HandleFunc("DELETE /users/{id}", web.RequirePermission("users:write", web.DeleteUserAction))
webMux.HandleFunc("GET /mps", web.MembersOfParliamentPage) webMux.HandleFunc("GET /mps", web.MembersOfParliamentPage)

View File

@ -65,8 +65,12 @@ func (web *Web) RegisterUserPage(w http.ResponseWriter, r *http.Request) {
} }
setCookie(w, authToken.Plaintext, authToken.Expiry) setCookie(w, authToken.Plaintext, authToken.Expiry)
if web.App.Config.Env == "production" {
http.Redirect(w, r, "/users/activated", http.StatusSeeOther)
} else {
http.Redirect(w, r, "/issues", http.StatusSeeOther) http.Redirect(w, r, "/issues", http.StatusSeeOther)
} }
}
func (web *Web) ProfilePage(w http.ResponseWriter, r *http.Request) { func (web *Web) ProfilePage(w http.ResponseWriter, r *http.Request) {
user := common.GetUser(r) user := common.GetUser(r)
@ -158,19 +162,16 @@ func (web *Web) ActivateUserAction(w http.ResponseWriter, r *http.Request) {
web.App.LogError(r, err) web.App.LogError(r, err)
msg = "Aktivierung fehlgeschlagen. Bitte versuchen Sie es erneut." msg = "Aktivierung fehlgeschlagen. Bitte versuchen Sie es erneut."
} }
web.render(w, r, http.StatusUnprocessableEntity, "activated", struct { web.renderFragment(w, r, http.StatusUnprocessableEntity, "activated", struct {
AuthenticatedUser *data.User
FormErrors []string FormErrors []string
Token string
}{ }{
AuthenticatedUser: common.GetUser(r),
FormErrors: []string{msg}, FormErrors: []string{msg},
Token: token,
}) })
return return
} }
http.Redirect(w, r, "/", http.StatusSeeOther) w.Header().Set("HX-Redirect", "/")
w.WriteHeader(http.StatusOK)
} }
func (web *Web) DeleteUserAction(w http.ResponseWriter, r *http.Request) { func (web *Web) DeleteUserAction(w http.ResponseWriter, r *http.Request) {

View File

@ -0,0 +1,5 @@
{{define "activated"}}
<div class="alert alert--error">
{{range .FormErrors}}<p>{{.}}</p>{{end}}
</div>
{{end}}

View File

@ -8,13 +8,9 @@
<h2 class="auth-title">Konto aktivieren</h2> <h2 class="auth-title">Konto aktivieren</h2>
<p class="auth-subtitle">Geben Sie Ihren Aktivierungstoken ein, um Ihr Konto freizuschalten.</p> <p class="auth-subtitle">Geben Sie Ihren Aktivierungstoken ein, um Ihr Konto freizuschalten.</p>
{{if .FormErrors}} <div id="activation-result"></div>
<div class="alert alert--error">
{{range .FormErrors}}<p>{{.}}</p>{{end}}
</div>
{{end}}
<form method="POST" action="/users/activated"> <form hx-put="/users/activated" hx-target="#activation-result" hx-swap="innerHTML">
<div class="form-group"> <div class="form-group">
<label class="form-label" for="token">Aktivierungstoken</label> <label class="form-label" for="token">Aktivierungstoken</label>
<input class="form-input" id="token" name="token" type="text" <input class="form-input" id="token" name="token" type="text"