email.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright 2015 The Gogs Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package user
  5. import (
  6. api "github.com/gogits/go-gogs-client"
  7. "github.com/gogits/gogs/models"
  8. "github.com/gogits/gogs/modules/middleware"
  9. "github.com/gogits/gogs/modules/setting"
  10. to "github.com/gogits/gogs/routers/api/v1/utils"
  11. )
  12. func ListEmails(ctx *middleware.Context) {
  13. emails, err := models.GetEmailAddresses(ctx.User.Id)
  14. if err != nil {
  15. ctx.Handle(500, "GetEmailAddresses", err)
  16. return
  17. }
  18. apiEmails := make([]*api.Email, len(emails))
  19. for i := range emails {
  20. apiEmails[i] = to.ApiEmail(emails[i])
  21. }
  22. ctx.JSON(200, &apiEmails)
  23. }
  24. func AddEmail(ctx *middleware.Context, form api.CreateEmailOption) {
  25. if len(form.Emails) == 0 {
  26. ctx.Status(422)
  27. return
  28. }
  29. emails := make([]*models.EmailAddress, len(form.Emails))
  30. for i := range form.Emails {
  31. emails[i] = &models.EmailAddress{
  32. UID: ctx.User.Id,
  33. Email: form.Emails[i],
  34. IsActivated: !setting.Service.RegisterEmailConfirm,
  35. }
  36. }
  37. if err := models.AddEmailAddresses(emails); err != nil {
  38. if models.IsErrEmailAlreadyUsed(err) {
  39. ctx.APIError(422, "", "Email address has been used: "+err.(models.ErrEmailAlreadyUsed).Email)
  40. } else {
  41. ctx.APIError(500, "AddEmailAddresses", err)
  42. }
  43. return
  44. }
  45. apiEmails := make([]*api.Email, len(emails))
  46. for i := range emails {
  47. apiEmails[i] = to.ApiEmail(emails[i])
  48. }
  49. ctx.JSON(201, &apiEmails)
  50. }
  51. func DeleteEmail(ctx *middleware.Context, form api.CreateEmailOption) {
  52. if len(form.Emails) == 0 {
  53. ctx.Status(204)
  54. return
  55. }
  56. emails := make([]*models.EmailAddress, len(form.Emails))
  57. for i := range form.Emails {
  58. emails[i] = &models.EmailAddress{
  59. Email: form.Emails[i],
  60. }
  61. }
  62. if err := models.DeleteEmailAddresses(emails); err != nil {
  63. ctx.APIError(500, "DeleteEmailAddresses", err)
  64. return
  65. }
  66. ctx.Status(204)
  67. }