users.go 3.4 KB

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