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

152 lines
4.4 KiB

API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
API add/generalize pagination (#9452) * paginate results * fixed deadlock * prevented breaking change * updated swagger * go fmt * fixed find topic * go mod tidy * go mod vendor with go1.13.5 * fixed repo find topics * fixed unit test * added Limit method to Engine struct; use engine variable when provided; fixed gitignore * use ItemsPerPage for default pagesize; fix GetWatchers, getOrgUsersByOrgID and GetStargazers; fix GetAllCommits headers; reverted some changed behaviors * set Page value on Home route * improved memory allocations * fixed response headers * removed logfiles * fixed import order * import order * improved swagger * added function to get models.ListOptions from context * removed pagesize diff on unit test * fixed imports * removed unnecessary struct field * fixed go fmt * scoped PR * code improvements * code improvements * go mod tidy * fixed import order * fixed commit statuses session * fixed files headers * fixed headers; added pagination for notifications * go mod tidy * go fmt * removed Private from user search options; added setting.UI.IssuePagingNum as default valeu on repo's issues list * Apply suggestions from code review Co-Authored-By: 6543 <6543@obermui.de> Co-Authored-By: zeripath <art27@cantab.net> * fixed build error * CI.restart() * fixed merge conflicts resolve * fixed conflicts resolve * improved FindTrackedTimesOptions.ToOptions() method * added backwards compatibility on ListReleases request; fixed issue tracked time ToSession * fixed build error; fixed swagger template * fixed swagger template * fixed ListReleases backwards compatibility * added page to user search route Co-authored-by: techknowlogick <matti@mdranta.net> Co-authored-by: 6543 <6543@obermui.de> Co-authored-by: zeripath <art27@cantab.net>
4 years ago
  1. // Copyright 2014 The Gogs Authors. All rights reserved.
  2. // Copyright 2018 The Gitea Authors. All rights reserved.
  3. // Use of this source code is governed by a MIT-style
  4. // license that can be found in the LICENSE file.
  5. package setting
  6. import (
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/auth"
  9. "code.gitea.io/gitea/modules/base"
  10. "code.gitea.io/gitea/modules/context"
  11. "code.gitea.io/gitea/modules/setting"
  12. )
  13. const (
  14. tplSettingsKeys base.TplName = "user/settings/keys"
  15. )
  16. // Keys render user's SSH/GPG public keys page
  17. func Keys(ctx *context.Context) {
  18. ctx.Data["Title"] = ctx.Tr("settings")
  19. ctx.Data["PageIsSettingsKeys"] = true
  20. ctx.Data["DisableSSH"] = setting.SSH.Disabled
  21. loadKeysData(ctx)
  22. ctx.HTML(200, tplSettingsKeys)
  23. }
  24. // KeysPost response for change user's SSH/GPG keys
  25. func KeysPost(ctx *context.Context, form auth.AddKeyForm) {
  26. ctx.Data["Title"] = ctx.Tr("settings")
  27. ctx.Data["PageIsSettingsKeys"] = true
  28. if ctx.HasError() {
  29. loadKeysData(ctx)
  30. ctx.HTML(200, tplSettingsKeys)
  31. return
  32. }
  33. switch form.Type {
  34. case "gpg":
  35. key, err := models.AddGPGKey(ctx.User.ID, form.Content)
  36. if err != nil {
  37. ctx.Data["HasGPGError"] = true
  38. switch {
  39. case models.IsErrGPGKeyParsing(err):
  40. ctx.Flash.Error(ctx.Tr("form.invalid_gpg_key", err.Error()))
  41. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  42. case models.IsErrGPGKeyIDAlreadyUsed(err):
  43. loadKeysData(ctx)
  44. ctx.Data["Err_Content"] = true
  45. ctx.RenderWithErr(ctx.Tr("settings.gpg_key_id_used"), tplSettingsKeys, &form)
  46. case models.IsErrGPGNoEmailFound(err):
  47. loadKeysData(ctx)
  48. ctx.Data["Err_Content"] = true
  49. ctx.RenderWithErr(ctx.Tr("settings.gpg_no_key_email_found"), tplSettingsKeys, &form)
  50. default:
  51. ctx.ServerError("AddPublicKey", err)
  52. }
  53. return
  54. }
  55. ctx.Flash.Success(ctx.Tr("settings.add_gpg_key_success", key.KeyID))
  56. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  57. case "ssh":
  58. content, err := models.CheckPublicKeyString(form.Content)
  59. if err != nil {
  60. if models.IsErrSSHDisabled(err) {
  61. ctx.Flash.Info(ctx.Tr("settings.ssh_disabled"))
  62. } else if models.IsErrKeyUnableVerify(err) {
  63. ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
  64. } else {
  65. ctx.Flash.Error(ctx.Tr("form.invalid_ssh_key", err.Error()))
  66. }
  67. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  68. return
  69. }
  70. if _, err = models.AddPublicKey(ctx.User.ID, form.Title, content, 0); err != nil {
  71. ctx.Data["HasSSHError"] = true
  72. switch {
  73. case models.IsErrKeyAlreadyExist(err):
  74. loadKeysData(ctx)
  75. ctx.Data["Err_Content"] = true
  76. ctx.RenderWithErr(ctx.Tr("settings.ssh_key_been_used"), tplSettingsKeys, &form)
  77. case models.IsErrKeyNameAlreadyUsed(err):
  78. loadKeysData(ctx)
  79. ctx.Data["Err_Title"] = true
  80. ctx.RenderWithErr(ctx.Tr("settings.ssh_key_name_used"), tplSettingsKeys, &form)
  81. case models.IsErrKeyUnableVerify(err):
  82. ctx.Flash.Info(ctx.Tr("form.unable_verify_ssh_key"))
  83. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  84. default:
  85. ctx.ServerError("AddPublicKey", err)
  86. }
  87. return
  88. }
  89. ctx.Flash.Success(ctx.Tr("settings.add_key_success", form.Title))
  90. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  91. default:
  92. ctx.Flash.Warning("Function not implemented")
  93. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  94. }
  95. }
  96. // DeleteKey response for delete user's SSH/GPG key
  97. func DeleteKey(ctx *context.Context) {
  98. switch ctx.Query("type") {
  99. case "gpg":
  100. if err := models.DeleteGPGKey(ctx.User, ctx.QueryInt64("id")); err != nil {
  101. ctx.Flash.Error("DeleteGPGKey: " + err.Error())
  102. } else {
  103. ctx.Flash.Success(ctx.Tr("settings.gpg_key_deletion_success"))
  104. }
  105. case "ssh":
  106. if err := models.DeletePublicKey(ctx.User, ctx.QueryInt64("id")); err != nil {
  107. ctx.Flash.Error("DeletePublicKey: " + err.Error())
  108. } else {
  109. ctx.Flash.Success(ctx.Tr("settings.ssh_key_deletion_success"))
  110. }
  111. default:
  112. ctx.Flash.Warning("Function not implemented")
  113. ctx.Redirect(setting.AppSubURL + "/user/settings/keys")
  114. }
  115. ctx.JSON(200, map[string]interface{}{
  116. "redirect": setting.AppSubURL + "/user/settings/keys",
  117. })
  118. }
  119. func loadKeysData(ctx *context.Context) {
  120. keys, err := models.ListPublicKeys(ctx.User.ID, models.ListOptions{})
  121. if err != nil {
  122. ctx.ServerError("ListPublicKeys", err)
  123. return
  124. }
  125. ctx.Data["Keys"] = keys
  126. gpgkeys, err := models.ListGPGKeys(ctx.User.ID, models.ListOptions{})
  127. if err != nil {
  128. ctx.ServerError("ListGPGKeys", err)
  129. return
  130. }
  131. ctx.Data["GPGKeys"] = gpgkeys
  132. }