1
0

user_email.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package v1
  2. import (
  3. "net/http"
  4. "github.com/cockroachdb/errors"
  5. "gogs.io/gogs/internal/conf"
  6. "gogs.io/gogs/internal/context"
  7. "gogs.io/gogs/internal/database"
  8. "gogs.io/gogs/internal/route/api/v1/types"
  9. )
  10. func listEmails(c *context.APIContext) {
  11. emails, err := database.Handle.Users().ListEmails(c.Req.Context(), c.User.ID)
  12. if err != nil {
  13. c.Error(err, "get email addresses")
  14. return
  15. }
  16. apiEmails := make([]*types.UserEmail, len(emails))
  17. for i := range emails {
  18. apiEmails[i] = toUserEmail(emails[i])
  19. }
  20. c.JSONSuccess(&apiEmails)
  21. }
  22. type createEmailRequest struct {
  23. Emails []string `json:"emails"`
  24. }
  25. func addEmail(c *context.APIContext, form createEmailRequest) {
  26. if len(form.Emails) == 0 {
  27. c.Status(http.StatusUnprocessableEntity)
  28. return
  29. }
  30. apiEmails := make([]*types.UserEmail, 0, len(form.Emails))
  31. for _, email := range form.Emails {
  32. err := database.Handle.Users().AddEmail(c.Req.Context(), c.User.ID, email, !conf.Auth.RequireEmailConfirmation)
  33. if err != nil {
  34. if database.IsErrEmailAlreadyUsed(err) {
  35. c.ErrorStatus(http.StatusUnprocessableEntity, errors.Errorf("email address has been used: %s", err.(database.ErrEmailAlreadyUsed).Email()))
  36. } else {
  37. c.Error(err, "add email addresses")
  38. }
  39. return
  40. }
  41. apiEmails = append(apiEmails, &types.UserEmail{
  42. Email: email,
  43. Verified: !conf.Auth.RequireEmailConfirmation,
  44. })
  45. }
  46. c.JSON(http.StatusCreated, &apiEmails)
  47. }
  48. func deleteEmail(c *context.APIContext, form createEmailRequest) {
  49. for _, email := range form.Emails {
  50. if email == c.User.Email {
  51. c.ErrorStatus(http.StatusBadRequest, errors.Errorf("cannot delete primary email %q", email))
  52. return
  53. }
  54. err := database.Handle.Users().DeleteEmail(c.Req.Context(), c.User.ID, email)
  55. if err != nil {
  56. c.Error(err, "delete email addresses")
  57. return
  58. }
  59. }
  60. c.NoContent()
  61. }