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