email.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package user
  2. import (
  3. "net/http"
  4. "github.com/cockroachdb/errors"
  5. api "github.com/gogs/go-gogs-client"
  6. "gogs.io/gogs/internal/conf"
  7. "gogs.io/gogs/internal/context"
  8. "gogs.io/gogs/internal/database"
  9. "gogs.io/gogs/internal/route/api/v1/convert"
  10. )
  11. func ListEmails(c *context.APIContext) {
  12. emails, err := database.Handle.Users().ListEmails(c.Req.Context(), c.User.ID)
  13. if err != nil {
  14. c.Error(err, "get email addresses")
  15. return
  16. }
  17. apiEmails := make([]*api.Email, len(emails))
  18. for i := range emails {
  19. apiEmails[i] = convert.ToEmail(emails[i])
  20. }
  21. c.JSONSuccess(&apiEmails)
  22. }
  23. func AddEmail(c *context.APIContext, form api.CreateEmailOption) {
  24. if len(form.Emails) == 0 {
  25. c.Status(http.StatusUnprocessableEntity)
  26. return
  27. }
  28. apiEmails := make([]*api.Email, 0, len(form.Emails))
  29. for _, email := range form.Emails {
  30. err := database.Handle.Users().AddEmail(c.Req.Context(), c.User.ID, email, !conf.Auth.RequireEmailConfirmation)
  31. if err != nil {
  32. if database.IsErrEmailAlreadyUsed(err) {
  33. c.ErrorStatus(http.StatusUnprocessableEntity, errors.Errorf("email address has been used: %s", err.(database.ErrEmailAlreadyUsed).Email()))
  34. } else {
  35. c.Error(err, "add email addresses")
  36. }
  37. return
  38. }
  39. apiEmails = append(apiEmails,
  40. &api.Email{
  41. Email: email,
  42. Verified: !conf.Auth.RequireEmailConfirmation,
  43. },
  44. )
  45. }
  46. c.JSON(http.StatusCreated, &apiEmails)
  47. }
  48. func DeleteEmail(c *context.APIContext, form api.CreateEmailOption) {
  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. }