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.

package.go 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. // Copyright 2021 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package packages
  4. import (
  5. "net/http"
  6. "code.gitea.io/gitea/models/packages"
  7. "code.gitea.io/gitea/modules/context"
  8. api "code.gitea.io/gitea/modules/structs"
  9. "code.gitea.io/gitea/modules/util"
  10. "code.gitea.io/gitea/routers/api/v1/utils"
  11. "code.gitea.io/gitea/services/convert"
  12. packages_service "code.gitea.io/gitea/services/packages"
  13. )
  14. // ListPackages gets all packages of an owner
  15. func ListPackages(ctx *context.APIContext) {
  16. // swagger:operation GET /packages/{owner} package listPackages
  17. // ---
  18. // summary: Gets all packages of an owner
  19. // produces:
  20. // - application/json
  21. // parameters:
  22. // - name: owner
  23. // in: path
  24. // description: owner of the packages
  25. // type: string
  26. // required: true
  27. // - name: page
  28. // in: query
  29. // description: page number of results to return (1-based)
  30. // type: integer
  31. // - name: limit
  32. // in: query
  33. // description: page size of results
  34. // type: integer
  35. // - name: type
  36. // in: query
  37. // description: package type filter
  38. // type: string
  39. // enum: [alpine, cargo, chef, composer, conan, conda, container, cran, debian, generic, go, helm, maven, npm, nuget, pub, pypi, rpm, rubygems, swift, vagrant]
  40. // - name: q
  41. // in: query
  42. // description: name filter
  43. // type: string
  44. // responses:
  45. // "200":
  46. // "$ref": "#/responses/PackageList"
  47. // "404":
  48. // "$ref": "#/responses/notFound"
  49. listOptions := utils.GetListOptions(ctx)
  50. packageType := ctx.FormTrim("type")
  51. query := ctx.FormTrim("q")
  52. pvs, count, err := packages.SearchVersions(ctx, &packages.PackageSearchOptions{
  53. OwnerID: ctx.Package.Owner.ID,
  54. Type: packages.Type(packageType),
  55. Name: packages.SearchValue{Value: query},
  56. IsInternal: util.OptionalBoolFalse,
  57. Paginator: &listOptions,
  58. })
  59. if err != nil {
  60. ctx.Error(http.StatusInternalServerError, "SearchVersions", err)
  61. return
  62. }
  63. pds, err := packages.GetPackageDescriptors(ctx, pvs)
  64. if err != nil {
  65. ctx.Error(http.StatusInternalServerError, "GetPackageDescriptors", err)
  66. return
  67. }
  68. apiPackages := make([]*api.Package, 0, len(pds))
  69. for _, pd := range pds {
  70. apiPackage, err := convert.ToPackage(ctx, pd, ctx.Doer)
  71. if err != nil {
  72. ctx.Error(http.StatusInternalServerError, "Error converting package for api", err)
  73. return
  74. }
  75. apiPackages = append(apiPackages, apiPackage)
  76. }
  77. ctx.SetLinkHeader(int(count), listOptions.PageSize)
  78. ctx.SetTotalCountHeader(count)
  79. ctx.JSON(http.StatusOK, apiPackages)
  80. }
  81. // GetPackage gets a package
  82. func GetPackage(ctx *context.APIContext) {
  83. // swagger:operation GET /packages/{owner}/{type}/{name}/{version} package getPackage
  84. // ---
  85. // summary: Gets a package
  86. // produces:
  87. // - application/json
  88. // parameters:
  89. // - name: owner
  90. // in: path
  91. // description: owner of the package
  92. // type: string
  93. // required: true
  94. // - name: type
  95. // in: path
  96. // description: type of the package
  97. // type: string
  98. // required: true
  99. // - name: name
  100. // in: path
  101. // description: name of the package
  102. // type: string
  103. // required: true
  104. // - name: version
  105. // in: path
  106. // description: version of the package
  107. // type: string
  108. // required: true
  109. // responses:
  110. // "200":
  111. // "$ref": "#/responses/Package"
  112. // "404":
  113. // "$ref": "#/responses/notFound"
  114. apiPackage, err := convert.ToPackage(ctx, ctx.Package.Descriptor, ctx.Doer)
  115. if err != nil {
  116. ctx.Error(http.StatusInternalServerError, "Error converting package for api", err)
  117. return
  118. }
  119. ctx.JSON(http.StatusOK, apiPackage)
  120. }
  121. // DeletePackage deletes a package
  122. func DeletePackage(ctx *context.APIContext) {
  123. // swagger:operation DELETE /packages/{owner}/{type}/{name}/{version} package deletePackage
  124. // ---
  125. // summary: Delete a package
  126. // parameters:
  127. // - name: owner
  128. // in: path
  129. // description: owner of the package
  130. // type: string
  131. // required: true
  132. // - name: type
  133. // in: path
  134. // description: type of the package
  135. // type: string
  136. // required: true
  137. // - name: name
  138. // in: path
  139. // description: name of the package
  140. // type: string
  141. // required: true
  142. // - name: version
  143. // in: path
  144. // description: version of the package
  145. // type: string
  146. // required: true
  147. // responses:
  148. // "204":
  149. // "$ref": "#/responses/empty"
  150. // "404":
  151. // "$ref": "#/responses/notFound"
  152. err := packages_service.RemovePackageVersion(ctx, ctx.Doer, ctx.Package.Descriptor.Version)
  153. if err != nil {
  154. ctx.Error(http.StatusInternalServerError, "RemovePackageVersion", err)
  155. return
  156. }
  157. ctx.Status(http.StatusNoContent)
  158. }
  159. // ListPackageFiles gets all files of a package
  160. func ListPackageFiles(ctx *context.APIContext) {
  161. // swagger:operation GET /packages/{owner}/{type}/{name}/{version}/files package listPackageFiles
  162. // ---
  163. // summary: Gets all files of a package
  164. // produces:
  165. // - application/json
  166. // parameters:
  167. // - name: owner
  168. // in: path
  169. // description: owner of the package
  170. // type: string
  171. // required: true
  172. // - name: type
  173. // in: path
  174. // description: type of the package
  175. // type: string
  176. // required: true
  177. // - name: name
  178. // in: path
  179. // description: name of the package
  180. // type: string
  181. // required: true
  182. // - name: version
  183. // in: path
  184. // description: version of the package
  185. // type: string
  186. // required: true
  187. // responses:
  188. // "200":
  189. // "$ref": "#/responses/PackageFileList"
  190. // "404":
  191. // "$ref": "#/responses/notFound"
  192. apiPackageFiles := make([]*api.PackageFile, 0, len(ctx.Package.Descriptor.Files))
  193. for _, pfd := range ctx.Package.Descriptor.Files {
  194. apiPackageFiles = append(apiPackageFiles, convert.ToPackageFile(pfd))
  195. }
  196. ctx.JSON(http.StatusOK, apiPackageFiles)
  197. }