user.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package admin
  2. import (
  3. "gitote/gitote/models"
  4. "gitote/gitote/models/errors"
  5. "gitote/gitote/pkg/context"
  6. "gitote/gitote/pkg/mailer"
  7. "gitote/gitote/pkg/setting"
  8. "gitote/gitote/routes/api/v1/user"
  9. api "gitlab.com/gitote/go-gitote-client"
  10. log "gopkg.in/clog.v1"
  11. )
  12. func parseLoginSource(c *context.APIContext, u *models.User, sourceID int64, loginName string) {
  13. if sourceID == 0 {
  14. return
  15. }
  16. source, err := models.GetLoginSourceByID(sourceID)
  17. if err != nil {
  18. if errors.IsLoginSourceNotExist(err) {
  19. c.Error(422, "", err)
  20. } else {
  21. c.Error(500, "GetLoginSourceByID", err)
  22. }
  23. return
  24. }
  25. u.LoginType = source.Type
  26. u.LoginSource = source.ID
  27. u.LoginName = loginName
  28. }
  29. func CreateUser(c *context.APIContext, form api.CreateUserOption) {
  30. u := &models.User{
  31. Name: form.Username,
  32. FullName: form.FullName,
  33. Email: form.Email,
  34. Passwd: form.Password,
  35. IsActive: true,
  36. LoginType: models.LOGIN_PLAIN,
  37. }
  38. parseLoginSource(c, u, form.SourceID, form.LoginName)
  39. if c.Written() {
  40. return
  41. }
  42. if err := models.CreateUser(u); err != nil {
  43. if models.IsErrUserAlreadyExist(err) ||
  44. models.IsErrEmailAlreadyUsed(err) ||
  45. models.IsErrNameReserved(err) ||
  46. models.IsErrNamePatternNotAllowed(err) {
  47. c.Error(422, "", err)
  48. } else {
  49. c.Error(500, "CreateUser", err)
  50. }
  51. return
  52. }
  53. log.Trace("Account created by admin (%s): %s", c.User.Name, u.Name)
  54. // Send email notification.
  55. if form.SendNotify && setting.MailService != nil {
  56. mailer.SendRegisterNotifyMail(c.Context.Context, models.NewMailerUser(u))
  57. }
  58. c.JSON(201, u.APIFormat())
  59. }
  60. func EditUser(c *context.APIContext, form api.EditUserOption) {
  61. u := user.GetUserByParams(c)
  62. if c.Written() {
  63. return
  64. }
  65. parseLoginSource(c, u, form.SourceID, form.LoginName)
  66. if c.Written() {
  67. return
  68. }
  69. if len(form.Password) > 0 {
  70. u.Passwd = form.Password
  71. var err error
  72. if u.Salt, err = models.GetUserSalt(); err != nil {
  73. c.Error(500, "UpdateUser", err)
  74. return
  75. }
  76. u.EncodePasswd()
  77. }
  78. u.LoginName = form.LoginName
  79. u.FullName = form.FullName
  80. u.Email = form.Email
  81. u.Website = form.Website
  82. u.Location = form.Location
  83. if form.Active != nil {
  84. u.IsActive = *form.Active
  85. }
  86. if form.Admin != nil {
  87. u.IsAdmin = *form.Admin
  88. }
  89. if form.AllowGitHook != nil {
  90. u.AllowGitHook = *form.AllowGitHook
  91. }
  92. if form.AllowImportLocal != nil {
  93. u.AllowImportLocal = *form.AllowImportLocal
  94. }
  95. if form.MaxRepoCreation != nil {
  96. u.MaxRepoCreation = *form.MaxRepoCreation
  97. }
  98. if err := models.UpdateUser(u); err != nil {
  99. if models.IsErrEmailAlreadyUsed(err) {
  100. c.Error(422, "", err)
  101. } else {
  102. c.Error(500, "UpdateUser", err)
  103. }
  104. return
  105. }
  106. log.Trace("Account profile updated by admin (%s): %s", c.User.Name, u.Name)
  107. c.JSON(200, u.APIFormat())
  108. }
  109. func DeleteUser(c *context.APIContext) {
  110. u := user.GetUserByParams(c)
  111. if c.Written() {
  112. return
  113. }
  114. if err := models.DeleteUser(u); err != nil {
  115. if models.IsErrUserOwnRepos(err) ||
  116. models.IsErrUserHasOrgs(err) {
  117. c.Error(422, "", err)
  118. } else {
  119. c.Error(500, "DeleteUser", err)
  120. }
  121. return
  122. }
  123. log.Trace("Account deleted by admin(%s): %s", c.User.Name, u.Name)
  124. c.Status(204)
  125. }
  126. func CreatePublicKey(c *context.APIContext, form api.CreateKeyOption) {
  127. u := user.GetUserByParams(c)
  128. if c.Written() {
  129. return
  130. }
  131. user.CreateUserPublicKey(c, form, u.ID)
  132. }