本站源代码
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.

124 lines
3.0KB

  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 user
  6. import (
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/context"
  9. api "code.gitea.io/gitea/modules/structs"
  10. )
  11. // ListAccessTokens list all the access tokens
  12. func ListAccessTokens(ctx *context.APIContext) {
  13. // swagger:operation GET /users/{username}/tokens user userGetTokens
  14. // ---
  15. // summary: List the authenticated user's access tokens
  16. // produces:
  17. // - application/json
  18. // parameters:
  19. // - name: username
  20. // in: path
  21. // description: username of user
  22. // type: string
  23. // required: true
  24. // responses:
  25. // "200":
  26. // "$ref": "#/responses/AccessTokenList"
  27. tokens, err := models.ListAccessTokens(ctx.User.ID)
  28. if err != nil {
  29. ctx.Error(500, "ListAccessTokens", err)
  30. return
  31. }
  32. apiTokens := make([]*api.AccessToken, len(tokens))
  33. for i := range tokens {
  34. apiTokens[i] = &api.AccessToken{
  35. ID: tokens[i].ID,
  36. Name: tokens[i].Name,
  37. TokenLastEight: tokens[i].TokenLastEight,
  38. }
  39. }
  40. ctx.JSON(200, &apiTokens)
  41. }
  42. // CreateAccessToken create access tokens
  43. func CreateAccessToken(ctx *context.APIContext, form api.CreateAccessTokenOption) {
  44. // swagger:operation POST /users/{username}/tokens user userCreateToken
  45. // ---
  46. // summary: Create an access token
  47. // consumes:
  48. // - application/json
  49. // produces:
  50. // - application/json
  51. // parameters:
  52. // - name: username
  53. // in: path
  54. // description: username of user
  55. // type: string
  56. // required: true
  57. // - name: accessToken
  58. // in: body
  59. // schema:
  60. // type: object
  61. // required:
  62. // - name
  63. // properties:
  64. // name:
  65. // type: string
  66. // responses:
  67. // "200":
  68. // "$ref": "#/responses/AccessToken"
  69. t := &models.AccessToken{
  70. UID: ctx.User.ID,
  71. Name: form.Name,
  72. }
  73. if err := models.NewAccessToken(t); err != nil {
  74. ctx.Error(500, "NewAccessToken", err)
  75. return
  76. }
  77. ctx.JSON(201, &api.AccessToken{
  78. Name: t.Name,
  79. Token: t.Token,
  80. ID: t.ID,
  81. TokenLastEight: t.TokenLastEight,
  82. })
  83. }
  84. // DeleteAccessToken delete access tokens
  85. func DeleteAccessToken(ctx *context.APIContext) {
  86. // swagger:operation DELETE /users/{username}/tokens/{token} user userDeleteAccessToken
  87. // ---
  88. // summary: delete an access token
  89. // produces:
  90. // - application/json
  91. // parameters:
  92. // - name: username
  93. // in: path
  94. // description: username of user
  95. // type: string
  96. // required: true
  97. // - name: token
  98. // in: path
  99. // description: token to be deleted
  100. // type: integer
  101. // format: int64
  102. // required: true
  103. // responses:
  104. // "204":
  105. // "$ref": "#/responses/empty"
  106. tokenID := ctx.ParamsInt64(":id")
  107. if err := models.DeleteAccessTokenByID(tokenID, ctx.User.ID); err != nil {
  108. if models.IsErrAccessTokenNotExist(err) {
  109. ctx.NotFound()
  110. } else {
  111. ctx.Error(500, "DeleteAccessTokenByID", err)
  112. }
  113. return
  114. }
  115. ctx.Status(204)
  116. }
上海开阖软件有限公司 沪ICP备12045867号-1