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

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