You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

user.go 4.9 kB

11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
11 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. // Copyright 2014 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. "strings"
  7. "github.com/Unknwon/com"
  8. "github.com/gogits/gogs/models"
  9. "github.com/gogits/gogs/modules/auth"
  10. "github.com/gogits/gogs/modules/base"
  11. "github.com/gogits/gogs/modules/log"
  12. "github.com/gogits/gogs/modules/middleware"
  13. )
  14. const (
  15. USER_NEW base.TplName = "admin/user/new"
  16. USER_EDIT base.TplName = "admin/user/edit"
  17. )
  18. func NewUser(ctx *middleware.Context) {
  19. ctx.Data["Title"] = "New Account"
  20. ctx.Data["PageIsUsers"] = true
  21. auths, err := models.GetAuths()
  22. if err != nil {
  23. ctx.Handle(500, "admin.user.NewUser(GetAuths)", err)
  24. return
  25. }
  26. ctx.Data["LoginSources"] = auths
  27. ctx.HTML(200, USER_NEW)
  28. }
  29. func NewUserPost(ctx *middleware.Context, form auth.RegisterForm) {
  30. ctx.Data["Title"] = "New Account"
  31. ctx.Data["PageIsUsers"] = true
  32. if ctx.HasError() {
  33. ctx.HTML(200, USER_NEW)
  34. return
  35. }
  36. if form.Password != form.Retype {
  37. ctx.Data["Err_Password"] = true
  38. ctx.Data["Err_RetypePasswd"] = true
  39. ctx.RenderWithErr("Password and re-type password are not same.", "admin/users/new", &form)
  40. return
  41. }
  42. u := &models.User{
  43. Name: form.UserName,
  44. Email: form.Email,
  45. Passwd: form.Password,
  46. IsActive: true,
  47. LoginType: models.PLAIN,
  48. }
  49. if len(form.LoginType) > 0 {
  50. // NOTE: need rewrite.
  51. fields := strings.Split(form.LoginType, "-")
  52. tp, _ := com.StrTo(fields[0]).Int()
  53. u.LoginType = models.LoginType(tp)
  54. u.LoginSource, _ = com.StrTo(fields[1]).Int64()
  55. u.LoginName = form.LoginName
  56. }
  57. if err := models.CreateUser(u); err != nil {
  58. switch err {
  59. case models.ErrUserAlreadyExist:
  60. ctx.RenderWithErr("Username has been already taken", USER_NEW, &form)
  61. case models.ErrEmailAlreadyUsed:
  62. ctx.RenderWithErr("E-mail address has been already used", USER_NEW, &form)
  63. case models.ErrUserNameIllegal:
  64. ctx.RenderWithErr(models.ErrRepoNameIllegal.Error(), USER_NEW, &form)
  65. default:
  66. ctx.Handle(500, "admin.user.NewUser(CreateUser)", err)
  67. }
  68. return
  69. }
  70. log.Trace("%s User created by admin(%s): %s", ctx.Req.RequestURI,
  71. ctx.User.LowerName, strings.ToLower(form.UserName))
  72. ctx.Redirect("/admin/users")
  73. }
  74. func EditUser(ctx *middleware.Context) {
  75. ctx.Data["Title"] = "Edit Account"
  76. ctx.Data["PageIsUsers"] = true
  77. uid, err := com.StrTo(ctx.Params(":userid")).Int()
  78. if err != nil {
  79. ctx.Handle(404, "admin.user.EditUser", err)
  80. return
  81. }
  82. u, err := models.GetUserById(int64(uid))
  83. if err != nil {
  84. ctx.Handle(500, "admin.user.EditUser(GetUserById)", err)
  85. return
  86. }
  87. ctx.Data["User"] = u
  88. auths, err := models.GetAuths()
  89. if err != nil {
  90. ctx.Handle(500, "admin.user.NewUser(GetAuths)", err)
  91. return
  92. }
  93. ctx.Data["LoginSources"] = auths
  94. ctx.HTML(200, USER_EDIT)
  95. }
  96. func EditUserPost(ctx *middleware.Context, form auth.AdminEditUserForm) {
  97. ctx.Data["Title"] = "Edit Account"
  98. ctx.Data["PageIsUsers"] = true
  99. uid, err := com.StrTo(ctx.Params(":userid")).Int()
  100. if err != nil {
  101. ctx.Handle(404, "admin.user.EditUserPost", err)
  102. return
  103. }
  104. u, err := models.GetUserById(int64(uid))
  105. if err != nil {
  106. ctx.Handle(500, "admin.user.EditUserPost(GetUserById)", err)
  107. return
  108. }
  109. if ctx.HasError() {
  110. ctx.HTML(200, USER_EDIT)
  111. return
  112. }
  113. if form.Passwd != "" {
  114. u.Passwd = form.Passwd
  115. u.Rands = models.GetUserSalt()
  116. u.Salt = models.GetUserSalt()
  117. u.EncodePasswd()
  118. }
  119. u.Email = form.Email
  120. u.Website = form.Website
  121. u.Location = form.Location
  122. u.Avatar = base.EncodeMd5(form.Avatar)
  123. u.AvatarEmail = form.Avatar
  124. u.IsActive = form.Active
  125. u.IsAdmin = form.Admin
  126. if err := models.UpdateUser(u); err != nil {
  127. ctx.Handle(500, "admin.user.EditUserPost(UpdateUser)", err)
  128. return
  129. }
  130. log.Trace("%s User profile updated by admin(%s): %s", ctx.Req.RequestURI,
  131. ctx.User.LowerName, ctx.User.LowerName)
  132. ctx.Data["User"] = u
  133. ctx.Flash.Success("Account profile has been successfully updated.")
  134. ctx.Redirect("/admin/users/" + ctx.Params(":userid"))
  135. }
  136. func DeleteUser(ctx *middleware.Context) {
  137. ctx.Data["Title"] = "Delete Account"
  138. ctx.Data["PageIsUsers"] = true
  139. //log.Info("delete")
  140. uid, err := com.StrTo(ctx.Params(":userid")).Int()
  141. if err != nil {
  142. ctx.Handle(404, "admin.user.DeleteUser", err)
  143. return
  144. }
  145. u, err := models.GetUserById(int64(uid))
  146. if err != nil {
  147. ctx.Handle(500, "admin.user.DeleteUser(GetUserById)", err)
  148. return
  149. }
  150. if err = models.DeleteUser(u); err != nil {
  151. switch err {
  152. case models.ErrUserOwnRepos:
  153. ctx.Flash.Error("This account still has ownership of repository, owner has to delete or transfer them first.")
  154. ctx.Redirect("/admin/users/" + ctx.Params(":userid"))
  155. default:
  156. ctx.Handle(500, "admin.user.DeleteUser", err)
  157. }
  158. return
  159. }
  160. log.Trace("%s User deleted by admin(%s): %s", ctx.Req.RequestURI,
  161. ctx.User.LowerName, ctx.User.LowerName)
  162. ctx.Redirect("/admin/users")
  163. }