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.

setting.go 7.5 kB

10 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
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
10 years ago
11 years ago
11 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  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 user
  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. "github.com/gogits/gogs/modules/setting"
  14. )
  15. const (
  16. SETTINGS_PROFILE base.TplName = "user/settings/profile"
  17. SETTINGS_PASSWORD base.TplName = "user/settings/password"
  18. SETTINGS_SSH_KEYS base.TplName = "user/settings/sshkeys"
  19. SETTINGS_SOCIAL base.TplName = "user/settings/social"
  20. SETTINGS_DELETE base.TplName = "user/settings/delete"
  21. NOTIFICATION base.TplName = "user/notification"
  22. SECURITY base.TplName = "user/security"
  23. )
  24. func Settings(ctx *middleware.Context) {
  25. ctx.Data["Title"] = ctx.Tr("settings")
  26. ctx.Data["PageIsUserSettings"] = true
  27. ctx.Data["PageIsSettingsProfile"] = true
  28. ctx.HTML(200, SETTINGS_PROFILE)
  29. }
  30. func SettingsPost(ctx *middleware.Context, form auth.UpdateProfileForm) {
  31. ctx.Data["Title"] = ctx.Tr("settings")
  32. ctx.Data["PageIsUserSettings"] = true
  33. ctx.Data["PageIsSettingsProfile"] = true
  34. if ctx.HasError() {
  35. ctx.HTML(200, SETTINGS_PROFILE)
  36. return
  37. }
  38. // Check if user name has been changed.
  39. if ctx.User.Name != form.UserName {
  40. isExist, err := models.IsUserExist(form.UserName)
  41. if err != nil {
  42. ctx.Handle(500, "IsUserExist", err)
  43. return
  44. } else if isExist {
  45. ctx.RenderWithErr(ctx.Tr("form.username_been_taken"), SETTINGS_PROFILE, &form)
  46. return
  47. } else if err = models.ChangeUserName(ctx.User, form.UserName); err != nil {
  48. if err == models.ErrUserNameIllegal {
  49. ctx.Flash.Error(ctx.Tr("form.illegal_username"))
  50. ctx.Redirect(setting.AppRootSubUrl + "/user/settings")
  51. return
  52. } else {
  53. ctx.Handle(500, "ChangeUserName", err)
  54. }
  55. return
  56. }
  57. log.Trace("User name changed: %s -> %s", ctx.User.Name, form.UserName)
  58. ctx.User.Name = form.UserName
  59. }
  60. ctx.User.FullName = form.FullName
  61. ctx.User.Email = form.Email
  62. ctx.User.Website = form.Website
  63. ctx.User.Location = form.Location
  64. ctx.User.Avatar = base.EncodeMd5(form.Avatar)
  65. ctx.User.AvatarEmail = form.Avatar
  66. if err := models.UpdateUser(ctx.User); err != nil {
  67. ctx.Handle(500, "UpdateUser", err)
  68. return
  69. }
  70. log.Trace("User setting updated: %s", ctx.User.Name)
  71. ctx.Flash.Success(ctx.Tr("settings.update_profile_success"))
  72. ctx.Redirect(setting.AppRootSubUrl + "/user/settings")
  73. }
  74. func SettingsPassword(ctx *middleware.Context) {
  75. ctx.Data["Title"] = ctx.Tr("settings")
  76. ctx.Data["PageIsUserSettings"] = true
  77. ctx.Data["PageIsSettingsPassword"] = true
  78. ctx.HTML(200, SETTINGS_PASSWORD)
  79. }
  80. func SettingsPasswordPost(ctx *middleware.Context, form auth.ChangePasswordForm) {
  81. ctx.Data["Title"] = ctx.Tr("settings")
  82. ctx.Data["PageIsUserSettings"] = true
  83. ctx.Data["PageIsSettingsPassword"] = true
  84. if ctx.HasError() {
  85. ctx.HTML(200, SETTINGS_PASSWORD)
  86. return
  87. }
  88. tmpUser := &models.User{
  89. Passwd: form.OldPassword,
  90. Salt: ctx.User.Salt,
  91. }
  92. tmpUser.EncodePasswd()
  93. if ctx.User.Passwd != tmpUser.Passwd {
  94. ctx.Flash.Error(ctx.Tr("settings.password_incorrect"))
  95. } else if form.Password != form.Retype {
  96. ctx.Flash.Error(ctx.Tr("form.password_not_match"))
  97. } else {
  98. ctx.User.Passwd = form.Password
  99. ctx.User.Salt = models.GetUserSalt()
  100. ctx.User.EncodePasswd()
  101. if err := models.UpdateUser(ctx.User); err != nil {
  102. ctx.Handle(500, "UpdateUser", err)
  103. return
  104. }
  105. log.Trace("User password updated: %s", ctx.User.Name)
  106. ctx.Flash.Success(ctx.Tr("settings.change_password_success"))
  107. }
  108. ctx.Redirect(setting.AppRootSubUrl + "/user/settings/password")
  109. }
  110. func SettingsSSHKeys(ctx *middleware.Context) {
  111. ctx.Data["Title"] = ctx.Tr("settings")
  112. ctx.Data["PageIsUserSettings"] = true
  113. ctx.Data["PageIsSettingsSSHKeys"] = true
  114. var err error
  115. ctx.Data["Keys"], err = models.ListPublicKey(ctx.User.Id)
  116. if err != nil {
  117. ctx.Handle(500, "ssh.ListPublicKey", err)
  118. return
  119. }
  120. ctx.HTML(200, SETTINGS_SSH_KEYS)
  121. }
  122. func SettingsSSHKeysPost(ctx *middleware.Context, form auth.AddSSHKeyForm) {
  123. ctx.Data["Title"] = ctx.Tr("settings")
  124. ctx.Data["PageIsUserSettings"] = true
  125. ctx.Data["PageIsSettingsSSHKeys"] = true
  126. var err error
  127. ctx.Data["Keys"], err = models.ListPublicKey(ctx.User.Id)
  128. if err != nil {
  129. ctx.Handle(500, "ssh.ListPublicKey", err)
  130. return
  131. }
  132. // Delete SSH key.
  133. if ctx.Query("_method") == "DELETE" {
  134. id := com.StrTo(ctx.Query("id")).MustInt64()
  135. if id <= 0 {
  136. return
  137. }
  138. if err = models.DeletePublicKey(&models.PublicKey{Id: id}); err != nil {
  139. ctx.Handle(500, "DeletePublicKey", err)
  140. } else {
  141. log.Trace("SSH key deleted: %s", ctx.User.Name)
  142. ctx.Redirect(setting.AppRootSubUrl + "/user/settings/ssh")
  143. }
  144. return
  145. }
  146. // Add new SSH key.
  147. if ctx.Req.Method == "POST" {
  148. if ctx.HasError() {
  149. ctx.HTML(200, SETTINGS_SSH_KEYS)
  150. return
  151. }
  152. // Remove newline characters from form.KeyContent
  153. cleanContent := strings.Replace(form.Content, "\n", "", -1)
  154. if ok, err := models.CheckPublicKeyString(cleanContent); !ok {
  155. ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
  156. ctx.Redirect(setting.AppRootSubUrl + "/user/settings/ssh")
  157. return
  158. }
  159. k := &models.PublicKey{
  160. OwnerId: ctx.User.Id,
  161. Name: form.SSHTitle,
  162. Content: cleanContent,
  163. }
  164. if err := models.AddPublicKey(k); err != nil {
  165. if err == models.ErrKeyAlreadyExist {
  166. ctx.RenderWithErr(ctx.Tr("form.ssh_key_been_used"), SETTINGS_SSH_KEYS, &form)
  167. return
  168. }
  169. ctx.Handle(500, "ssh.AddPublicKey", err)
  170. return
  171. } else {
  172. log.Trace("SSH key added: %s", ctx.User.Name)
  173. ctx.Flash.Success(ctx.Tr("settings.add_key_success"))
  174. ctx.Redirect(setting.AppRootSubUrl + "/user/settings/ssh")
  175. return
  176. }
  177. }
  178. ctx.HTML(200, SETTINGS_SSH_KEYS)
  179. }
  180. func SettingsSocial(ctx *middleware.Context) {
  181. ctx.Data["Title"] = ctx.Tr("settings")
  182. ctx.Data["PageIsUserSettings"] = true
  183. ctx.Data["PageIsSettingsSocial"] = true
  184. // Unbind social account.
  185. remove, _ := com.StrTo(ctx.Query("remove")).Int64()
  186. if remove > 0 {
  187. if err := models.DeleteOauth2ById(remove); err != nil {
  188. ctx.Handle(500, "DeleteOauth2ById", err)
  189. return
  190. }
  191. ctx.Flash.Success(ctx.Tr("settings.unbind_success"))
  192. ctx.Redirect(setting.AppRootSubUrl + "/user/settings/social")
  193. return
  194. }
  195. socials, err := models.GetOauthByUserId(ctx.User.Id)
  196. if err != nil {
  197. ctx.Handle(500, "GetOauthByUserId", err)
  198. return
  199. }
  200. ctx.Data["Socials"] = socials
  201. ctx.HTML(200, SETTINGS_SOCIAL)
  202. }
  203. func SettingsDelete(ctx *middleware.Context) {
  204. ctx.Data["Title"] = ctx.Tr("settings")
  205. ctx.Data["PageIsUserSettings"] = true
  206. ctx.Data["PageIsSettingsDelete"] = true
  207. if ctx.Req.Method == "POST" {
  208. // tmpUser := models.User{
  209. // Passwd: ctx.Query("password"),
  210. // Salt: ctx.User.Salt,
  211. // }
  212. // tmpUser.EncodePasswd()
  213. // if tmpUser.Passwd != ctx.User.Passwd {
  214. // ctx.Flash.Error("Password is not correct. Make sure you are owner of this account.")
  215. // } else {
  216. if err := models.DeleteUser(ctx.User); err != nil {
  217. switch err {
  218. case models.ErrUserOwnRepos:
  219. ctx.Flash.Error(ctx.Tr("form.still_own_repo"))
  220. ctx.Redirect(setting.AppRootSubUrl + "/user/settings/delete")
  221. default:
  222. ctx.Handle(500, "DeleteUser", err)
  223. }
  224. } else {
  225. log.Trace("Account deleted: %s", ctx.User.Name)
  226. ctx.Redirect(setting.AppRootSubUrl + "/")
  227. }
  228. return
  229. }
  230. ctx.HTML(200, SETTINGS_DELETE)
  231. }