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.

adopt.go 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. // Copyright 2020 The Gitea 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. "net/http"
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/modules/context"
  9. "code.gitea.io/gitea/modules/repository"
  10. "code.gitea.io/gitea/modules/util"
  11. "code.gitea.io/gitea/routers/api/v1/utils"
  12. )
  13. // ListUnadoptedRepositories lists the unadopted repositories that match the provided names
  14. func ListUnadoptedRepositories(ctx *context.APIContext) {
  15. // swagger:operation GET /admin/unadopted admin adminUnadoptedList
  16. // ---
  17. // summary: List unadopted repositories
  18. // produces:
  19. // - application/json
  20. // parameters:
  21. // - name: page
  22. // in: query
  23. // description: page number of results to return (1-based)
  24. // type: integer
  25. // - name: limit
  26. // in: query
  27. // description: page size of results
  28. // type: integer
  29. // - name: pattern
  30. // in: query
  31. // description: pattern of repositories to search for
  32. // type: string
  33. // responses:
  34. // "200":
  35. // "$ref": "#/responses/StringSlice"
  36. // "403":
  37. // "$ref": "#/responses/forbidden"
  38. listOptions := utils.GetListOptions(ctx)
  39. repoNames, count, err := repository.ListUnadoptedRepositories(ctx.FormString("query"), &listOptions)
  40. if err != nil {
  41. ctx.InternalServerError(err)
  42. }
  43. ctx.SetTotalCountHeader(int64(count))
  44. ctx.JSON(http.StatusOK, repoNames)
  45. }
  46. // AdoptRepository will adopt an unadopted repository
  47. func AdoptRepository(ctx *context.APIContext) {
  48. // swagger:operation POST /admin/unadopted/{owner}/{repo} admin adminAdoptRepository
  49. // ---
  50. // summary: Adopt unadopted files as a repository
  51. // produces:
  52. // - application/json
  53. // parameters:
  54. // - name: owner
  55. // in: path
  56. // description: owner of the repo
  57. // type: string
  58. // required: true
  59. // - name: repo
  60. // in: path
  61. // description: name of the repo
  62. // type: string
  63. // required: true
  64. // responses:
  65. // "204":
  66. // "$ref": "#/responses/empty"
  67. // "404":
  68. // "$ref": "#/responses/notFound"
  69. // "403":
  70. // "$ref": "#/responses/forbidden"
  71. ownerName := ctx.Params(":username")
  72. repoName := ctx.Params(":reponame")
  73. ctxUser, err := models.GetUserByName(ownerName)
  74. if err != nil {
  75. if models.IsErrUserNotExist(err) {
  76. ctx.NotFound()
  77. return
  78. }
  79. ctx.InternalServerError(err)
  80. return
  81. }
  82. // check not a repo
  83. has, err := models.IsRepositoryExist(ctxUser, repoName)
  84. if err != nil {
  85. ctx.InternalServerError(err)
  86. return
  87. }
  88. isDir, err := util.IsDir(models.RepoPath(ctxUser.Name, repoName))
  89. if err != nil {
  90. ctx.InternalServerError(err)
  91. return
  92. }
  93. if has || !isDir {
  94. ctx.NotFound()
  95. return
  96. }
  97. if _, err := repository.AdoptRepository(ctx.User, ctxUser, models.CreateRepoOptions{
  98. Name: repoName,
  99. IsPrivate: true,
  100. }); err != nil {
  101. ctx.InternalServerError(err)
  102. return
  103. }
  104. ctx.Status(http.StatusNoContent)
  105. }
  106. // DeleteUnadoptedRepository will delete an unadopted repository
  107. func DeleteUnadoptedRepository(ctx *context.APIContext) {
  108. // swagger:operation DELETE /admin/unadopted/{owner}/{repo} admin adminDeleteUnadoptedRepository
  109. // ---
  110. // summary: Delete unadopted files
  111. // produces:
  112. // - application/json
  113. // parameters:
  114. // - name: owner
  115. // in: path
  116. // description: owner of the repo
  117. // type: string
  118. // required: true
  119. // - name: repo
  120. // in: path
  121. // description: name of the repo
  122. // type: string
  123. // required: true
  124. // responses:
  125. // "204":
  126. // "$ref": "#/responses/empty"
  127. // "403":
  128. // "$ref": "#/responses/forbidden"
  129. ownerName := ctx.Params(":username")
  130. repoName := ctx.Params(":reponame")
  131. ctxUser, err := models.GetUserByName(ownerName)
  132. if err != nil {
  133. if models.IsErrUserNotExist(err) {
  134. ctx.NotFound()
  135. return
  136. }
  137. ctx.InternalServerError(err)
  138. return
  139. }
  140. // check not a repo
  141. has, err := models.IsRepositoryExist(ctxUser, repoName)
  142. if err != nil {
  143. ctx.InternalServerError(err)
  144. return
  145. }
  146. isDir, err := util.IsDir(models.RepoPath(ctxUser.Name, repoName))
  147. if err != nil {
  148. ctx.InternalServerError(err)
  149. return
  150. }
  151. if has || !isDir {
  152. ctx.NotFound()
  153. return
  154. }
  155. if err := repository.DeleteUnadoptedRepository(ctx.User, ctxUser, repoName); err != nil {
  156. ctx.InternalServerError(err)
  157. return
  158. }
  159. ctx.Status(http.StatusNoContent)
  160. }