package main import ( "encoding/json" "net/http" ) func (app *App) handleLogin(w http.ResponseWriter, r *http.Request) { var body struct { Email string `json:"email"` Password string `json:"password"` } if err := json.NewDecoder(r.Body).Decode(&body); err != nil { writeError(w, "invalid request", http.StatusBadRequest) return } user, hash, err := app.getLoginParticipant(body.Email) if err != nil { writeError(w, "internal error", http.StatusInternalServerError) return } if user == nil || !checkPassword(hash, body.Password) { writeError(w, "invalid credentials", http.StatusUnauthorized) return } token, err := app.signToken(user) if err != nil { writeError(w, "token error", http.StatusInternalServerError) return } writeJSON(w, map[string]any{"token": token, "user": user}) } func (app *App) handleLogout(w http.ResponseWriter, r *http.Request) { writeJSON(w, map[string]string{"ok": "logged out"}) } func (app *App) handleMe(w http.ResponseWriter, r *http.Request) { claims := claimsFromContext(r) user, err := app.getUser(claims.ParticipantID) if err != nil || user == nil { writeError(w, "unauthorized", http.StatusUnauthorized) return } writeJSON(w, user) }