delete.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package user
  2. import (
  3. "net/http"
  4. "github.com/porter-dev/porter/api/server/authn"
  5. "github.com/porter-dev/porter/api/server/handlers"
  6. "github.com/porter-dev/porter/api/server/shared"
  7. "github.com/porter-dev/porter/api/server/shared/apierrors"
  8. "github.com/porter-dev/porter/api/server/shared/config"
  9. "github.com/porter-dev/porter/api/types"
  10. "github.com/porter-dev/porter/internal/models"
  11. )
  12. type UserDeleteHandler struct {
  13. handlers.PorterHandlerWriter
  14. }
  15. func NewUserDeleteHandler(
  16. config *config.Config,
  17. writer shared.ResultWriter,
  18. ) *UserDeleteHandler {
  19. return &UserDeleteHandler{
  20. PorterHandlerWriter: handlers.NewDefaultPorterHandler(config, nil, writer),
  21. }
  22. }
  23. func (u *UserDeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  24. user, _ := r.Context().Value(types.UserScope).(*models.User)
  25. user, err := u.Repo().User().DeleteUser(user)
  26. if err != nil {
  27. u.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  28. return
  29. }
  30. // set the user as unauthenticated in the session
  31. if err := authn.SaveUserUnauthenticated(w, r, u.Config()); err != nil {
  32. u.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  33. return
  34. }
  35. u.WriteResult(w, r, user.ToUserType())
  36. }