mirror of
https://github.com/go-gitea/gitea.git
synced 2025-07-04 22:57:34 -04:00
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>
This commit is contained in:
parent
176962c03e
commit
09bb19ad01
@ -467,7 +467,9 @@ func CommonRoutes() *web.Router {
|
|||||||
g.MatchPath("HEAD", "/<group:*>/repodata/<filename>", rpm.CheckRepositoryFileExistence)
|
g.MatchPath("HEAD", "/<group:*>/repodata/<filename>", rpm.CheckRepositoryFileExistence)
|
||||||
g.MatchPath("GET", "/<group:*>/repodata/<filename>", rpm.GetRepositoryFile)
|
g.MatchPath("GET", "/<group:*>/repodata/<filename>", rpm.GetRepositoryFile)
|
||||||
g.MatchPath("PUT", "/<group:*>/upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
|
g.MatchPath("PUT", "/<group:*>/upload", reqPackageAccess(perm.AccessModeWrite), rpm.UploadPackageFile)
|
||||||
|
// 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)
|
||||||
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>", rpm.DownloadPackageFile)
|
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>", rpm.DownloadPackageFile)
|
||||||
|
g.MatchPath("HEAD,GET", "/<group:*>/package/<name>/<version>/<architecture>/<filename>", rpm.DownloadPackageFile)
|
||||||
g.MatchPath("DELETE", "/<group:*>/package/<name>/<version>/<architecture>", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
|
g.MatchPath("DELETE", "/<group:*>/package/<name>/<version>/<architecture>", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
|
||||||
}, reqPackageAccess(perm.AccessModeRead))
|
}, reqPackageAccess(perm.AccessModeRead))
|
||||||
|
|
||||||
|
@ -203,9 +203,6 @@ func ViewPackageVersion(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
ctx.Data["PackageRegistryHost"] = registryHostURL.Host
|
ctx.Data["PackageRegistryHost"] = registryHostURL.Host
|
||||||
|
|
||||||
var pvs []*packages_model.PackageVersion
|
|
||||||
pvsTotal := int64(0)
|
|
||||||
|
|
||||||
switch pd.Package.Type {
|
switch pd.Package.Type {
|
||||||
case packages_model.TypeAlpine:
|
case packages_model.TypeAlpine:
|
||||||
branches := make(container.Set[string])
|
branches := make(container.Set[string])
|
||||||
@ -296,12 +293,16 @@ func ViewPackageVersion(ctx *context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx.Data["ContainerImageMetadata"] = imageMetadata
|
ctx.Data["ContainerImageMetadata"] = imageMetadata
|
||||||
|
}
|
||||||
|
var pvs []*packages_model.PackageVersion
|
||||||
|
var pvsTotal int64
|
||||||
|
if pd.Package.Type == packages_model.TypeContainer {
|
||||||
pvs, pvsTotal, err = container_model.SearchImageTags(ctx, &container_model.ImageTagsSearchOptions{
|
pvs, pvsTotal, err = container_model.SearchImageTags(ctx, &container_model.ImageTagsSearchOptions{
|
||||||
Paginator: db.NewAbsoluteListOptions(0, 5),
|
Paginator: db.NewAbsoluteListOptions(0, 5),
|
||||||
PackageID: pd.Package.ID,
|
PackageID: pd.Package.ID,
|
||||||
IsTagged: true,
|
IsTagged: true,
|
||||||
})
|
})
|
||||||
default:
|
} else {
|
||||||
pvs, pvsTotal, err = packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{
|
pvs, pvsTotal, err = packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{
|
||||||
Paginator: db.NewAbsoluteListOptions(0, 5),
|
Paginator: db.NewAbsoluteListOptions(0, 5),
|
||||||
PackageID: pd.Package.ID,
|
PackageID: pd.Package.ID,
|
||||||
@ -312,7 +313,6 @@ func ViewPackageVersion(ctx *context.Context) {
|
|||||||
ctx.ServerError("", err)
|
ctx.ServerError("", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Data["LatestVersions"] = pvs
|
ctx.Data["LatestVersions"] = pvs
|
||||||
ctx.Data["TotalVersionCount"] = pvsTotal
|
ctx.Data["TotalVersionCount"] = pvsTotal
|
||||||
|
|
||||||
|
@ -157,9 +157,14 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
|
|||||||
t.Run("Download", func(t *testing.T) {
|
t.Run("Download", func(t *testing.T) {
|
||||||
defer tests.PrintCurrentTest(t)()
|
defer tests.PrintCurrentTest(t)()
|
||||||
|
|
||||||
|
// download the package without the file name
|
||||||
req := NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture))
|
req := NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture))
|
||||||
resp := MakeRequest(t, req, http.StatusOK)
|
resp := MakeRequest(t, req, http.StatusOK)
|
||||||
|
assert.Equal(t, content, resp.Body.Bytes())
|
||||||
|
|
||||||
|
// download the package with a file name (it can be anything)
|
||||||
|
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s/any-file-name", groupURL, packageName, packageVersion, packageArchitecture))
|
||||||
|
resp = MakeRequest(t, req, http.StatusOK)
|
||||||
assert.Equal(t, content, resp.Body.Bytes())
|
assert.Equal(t, content, resp.Body.Bytes())
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -447,7 +452,8 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
|
|||||||
pub, err := openpgp.ReadArmoredKeyRing(gpgResp.Body)
|
pub, err := openpgp.ReadArmoredKeyRing(gpgResp.Body)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture))
|
rpmFileName := fmt.Sprintf("%s-%s.%s.rpm", packageName, packageVersion, packageArchitecture)
|
||||||
|
req = NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s/%s", groupURL, packageName, packageVersion, packageArchitecture, rpmFileName))
|
||||||
resp := MakeRequest(t, req, http.StatusOK)
|
resp := MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
_, sigs, err := rpmutils.Verify(resp.Body, pub)
|
_, sigs, err := rpmutils.Verify(resp.Body, pub)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user