mirror of
				https://github.com/go-gitea/gitea
				synced 2025-11-03 21:08:25 +00: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:
		@@ -467,7 +467,9 @@ func CommonRoutes() *web.Router {
 | 
			
		||||
			g.MatchPath("HEAD", "/<group:*>/repodata/<filename>", rpm.CheckRepositoryFileExistence)
 | 
			
		||||
			g.MatchPath("GET", "/<group:*>/repodata/<filename>", rpm.GetRepositoryFile)
 | 
			
		||||
			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>/<filename>", rpm.DownloadPackageFile)
 | 
			
		||||
			g.MatchPath("DELETE", "/<group:*>/package/<name>/<version>/<architecture>", reqPackageAccess(perm.AccessModeWrite), rpm.DeletePackageFile)
 | 
			
		||||
		}, reqPackageAccess(perm.AccessModeRead))
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -203,9 +203,6 @@ func ViewPackageVersion(ctx *context.Context) {
 | 
			
		||||
	}
 | 
			
		||||
	ctx.Data["PackageRegistryHost"] = registryHostURL.Host
 | 
			
		||||
 | 
			
		||||
	var pvs []*packages_model.PackageVersion
 | 
			
		||||
	pvsTotal := int64(0)
 | 
			
		||||
 | 
			
		||||
	switch pd.Package.Type {
 | 
			
		||||
	case packages_model.TypeAlpine:
 | 
			
		||||
		branches := make(container.Set[string])
 | 
			
		||||
@@ -296,12 +293,16 @@ func ViewPackageVersion(ctx *context.Context) {
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		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{
 | 
			
		||||
			Paginator: db.NewAbsoluteListOptions(0, 5),
 | 
			
		||||
			PackageID: pd.Package.ID,
 | 
			
		||||
			IsTagged:  true,
 | 
			
		||||
		})
 | 
			
		||||
	default:
 | 
			
		||||
	} else {
 | 
			
		||||
		pvs, pvsTotal, err = packages_model.SearchVersions(ctx, &packages_model.PackageSearchOptions{
 | 
			
		||||
			Paginator:  db.NewAbsoluteListOptions(0, 5),
 | 
			
		||||
			PackageID:  pd.Package.ID,
 | 
			
		||||
@@ -312,7 +313,6 @@ func ViewPackageVersion(ctx *context.Context) {
 | 
			
		||||
		ctx.ServerError("", err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ctx.Data["LatestVersions"] = pvs
 | 
			
		||||
	ctx.Data["TotalVersionCount"] = pvsTotal
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -157,9 +157,14 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
 | 
			
		||||
			t.Run("Download", func(t *testing.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))
 | 
			
		||||
				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())
 | 
			
		||||
			})
 | 
			
		||||
 | 
			
		||||
@@ -447,7 +452,8 @@ gpgkey=%sapi/packages/%s/rpm/repository.key`,
 | 
			
		||||
				pub, err := openpgp.ReadArmoredKeyRing(gpgResp.Body)
 | 
			
		||||
				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)
 | 
			
		||||
 | 
			
		||||
				_, sigs, err := rpmutils.Verify(resp.Body, pub)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user