45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
package auth
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
|
|
"gitea.perlbach24.de/scripte/nexarch/internal/user"
|
|
)
|
|
|
|
// ProfileHandler liefert die eigenen Stammdaten fuer die Profilseite
|
|
// (IAM-08). Getrennt von ChangePasswordHandler, da unterschiedliche
|
|
// Lesbarkeitsanforderungen (nur GET, kein Nebeneffekt).
|
|
type ProfileHandler struct {
|
|
users *user.TenantUserStore
|
|
}
|
|
|
|
func NewProfileHandler(users *user.TenantUserStore) *ProfileHandler {
|
|
return &ProfileHandler{users: users}
|
|
}
|
|
|
|
type meResponse struct {
|
|
ID string `json:"id"`
|
|
Email string `json:"email"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
// Me liefert die Stammdaten des angemeldeten Benutzers. Muss hinter
|
|
// RequireAuth haengen.
|
|
func (h *ProfileHandler) Me(w http.ResponseWriter, r *http.Request) {
|
|
claims, ok := ClaimsFromContext(r.Context())
|
|
if !ok {
|
|
http.Error(w, "nicht angemeldet", http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
u, err := h.users.Get(r.Context(), claims.UserID)
|
|
if err != nil {
|
|
http.Error(w, "benutzer nicht gefunden", http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
_ = json.NewEncoder(w).Encode(meResponse{ID: u.ID, Email: u.Email, Name: u.Name})
|
|
}
|