Skip to content

Commit 09bb19a

Browse files
Fix: RPM package download routing & missing package version count (#34909)
* Fix RPM package download routing * Fix missing package version count --------- Signed-off-by: Exploding Dragon <explodingfkl@gmail.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
1 parent 176962c commit 09bb19a

File tree

3 files changed

+14
-6
lines changed

3 files changed

+14
-6
lines changed

routers/api/packages/api.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,9 @@ func CommonRoutes() *web.Router {
467467
g.MatchPath("HEAD", "/<group:*>/repodata/<filename>", rpm.CheckRepositoryFileExistence)
468468
g.MatchPath("GET", "/<group:*>/repodata/<filename>", rpm.GetRepositoryFile)
469469
g.MatchPath("PUT", "/<group:*>/upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
470+
// this URL pattern is only used internally in the RPM index, it is generated by us, the filename part is not really used (can be anything)
470471
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>", rpm.DownloadPackageFile)
472+
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>/<filename>", rpm.DownloadPackageFile)
471473
g.MatchPath("DELETE", "/<group:*>/package/<name>/<version>/<architecture>", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
472474
}, reqPackageAccess(perm.AccessModeRead))
473475

routers/web/user/package.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,6 @@ func ViewPackageVersion(ctx *context.Context) {
203203
}
204204
ctx.Data["PackageRegistryHost"] = registryHostURL.Host
205205

206-
var pvs []*packages_model.PackageVersion
207-
pvsTotal := int64(0)
208-
209206
switch pd.Package.Type {
210207
case packages_model.TypeAlpine:
211208
branches := make(container.Set[string])
@@ -296,12 +293,16 @@ func ViewPackageVersion(ctx *context.Context) {
296293
}
297294
}
298295
ctx.Data["ContainerImageMetadata"] = imageMetadata
296+
}
297+
var pvs []*packages_model.PackageVersion
298+
var pvsTotal int64
299+
if pd.Package.Type == packages_model.TypeContainer {
299300
pvs, pvsTotal, err = container_model.SearchImageTags(ctx, &container_model.ImageTagsSearchOptions{
300301
Paginator: db.NewAbsoluteListOptions(0, 5),
301302
PackageID: pd.Package.ID,
302303
IsTagged: true,
303304
})
304-
default:
305+
} else {
305306
pvs, pvsTotal, err = packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{
306307
Paginator: db.NewAbsoluteListOptions(0, 5),
307308
PackageID: pd.Package.ID,
@@ -312,7 +313,6 @@ func ViewPackageVersion(ctx *context.Context) {
312313
ctx.ServerError("", err)
313314
return
314315
}
315-
316316
ctx.Data["LatestVersions"] = pvs
317317
ctx.Data["TotalVersionCount"] = pvsTotal
318318

tests/integration/api_packages_rpm_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,14 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
157157
t.Run("Download", func(t *testing.T) {
158158
defer tests.PrintCurrentTest(t)()
159159

160+
// download the package without the file name
160161
req := NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture))
161162
resp := MakeRequest(t, req, http.StatusOK)
163+
assert.Equal(t, content, resp.Body.Bytes())
162164

165+
// download the package with a file name (it can be anything)
166+
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s/any-file-name", groupURL, packageName, packageVersion, packageArchitecture))
167+
resp = MakeRequest(t, req, http.StatusOK)
163168
assert.Equal(t, content, resp.Body.Bytes())
164169
})
165170

@@ -447,7 +452,8 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
447452
pub, err := openpgp.ReadArmoredKeyRing(gpgResp.Body)
448453
require.NoError(t, err)
449454

450-
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture))
455+
rpmFileName := fmt.Sprintf("%s-%s.%s.rpm", packageName, packageVersion, packageArchitecture)
456+
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture, rpmFileName))
451457
resp := MakeRequest(t, req, http.StatusOK)
452458

453459
_, sigs, err := rpmutils.Verify(resp.Body, pub)

0 commit comments

Comments
 (0)