44package  user
55
66import  (
7+ 	gocontext "context" 
8+ 	"errors" 
79	"net/http" 
810	"net/url" 
911
@@ -20,6 +22,7 @@ import (
2022	"code.gitea.io/gitea/modules/optional" 
2123	alpine_module "code.gitea.io/gitea/modules/packages/alpine" 
2224	arch_module "code.gitea.io/gitea/modules/packages/arch" 
25+ 	container_module "code.gitea.io/gitea/modules/packages/container" 
2326	debian_module "code.gitea.io/gitea/modules/packages/debian" 
2427	rpm_module "code.gitea.io/gitea/modules/packages/rpm" 
2528	"code.gitea.io/gitea/modules/setting" 
@@ -162,13 +165,32 @@ func RedirectToLastVersion(ctx *context.Context) {
162165	ctx .Redirect (pd .VersionWebLink ())
163166}
164167
168+ func  viewPackageContainerImage (ctx  gocontext.Context , pd  * packages_model.PackageDescriptor , digest  string ) (* container_module.Metadata , error ) {
169+ 	manifestBlob , err  :=  container_model .GetContainerBlob (ctx , & container_model.BlobSearchOptions {
170+ 		OwnerID : pd .Owner .ID ,
171+ 		Image :   pd .Package .LowerName ,
172+ 		Digest :  digest ,
173+ 	})
174+ 	if  err  !=  nil  {
175+ 		return  nil , err 
176+ 	}
177+ 	subManifestStream , err  :=  packages_service .OpenBlobStream (manifestBlob .Blob )
178+ 	if  err  !=  nil  {
179+ 		return  nil , err 
180+ 	}
181+ 	defer  subManifestStream .Close ()
182+ 	_ , _ , metadata , err  :=  container_model .ParseManifestMetadata (ctx , subManifestStream , pd .Owner .ID , pd .Package .LowerName )
183+ 	return  metadata , err 
184+ }
185+ 
165186// ViewPackageVersion displays a single package version 
166187func  ViewPackageVersion (ctx  * context.Context ) {
167188	if  _ , err  :=  shared_user .RenderUserOrgHeader (ctx ); err  !=  nil  {
168189		ctx .ServerError ("RenderUserOrgHeader" , err )
169190		return 
170191	}
171192
193+ 	versionSub  :=  ctx .PathParam ("version_sub" )
172194	pd  :=  ctx .Package .Descriptor 
173195	ctx .Data ["Title" ] =  pd .Package .Name 
174196	ctx .Data ["IsPackagesPage" ] =  true 
@@ -180,6 +202,9 @@ func ViewPackageVersion(ctx *context.Context) {
180202	}
181203	ctx .Data ["PackageRegistryHost" ] =  registryHostURL .Host 
182204
205+ 	var  pvs  []* packages_model.PackageVersion 
206+ 	pvsTotal  :=  int64 (0 )
207+ 
183208	switch  pd .Package .Type  {
184209	case  packages_model .TypeAlpine :
185210		branches  :=  make (container.Set [string ])
@@ -257,21 +282,26 @@ func ViewPackageVersion(ctx *context.Context) {
257282
258283		ctx .Data ["Groups" ] =  util .Sorted (groups .Values ())
259284		ctx .Data ["Architectures" ] =  util .Sorted (architectures .Values ())
260- 	}
261- 
262- 	var  (
263- 		total  int64 
264- 		pvs    []* packages_model.PackageVersion 
265- 	)
266- 	switch  pd .Package .Type  {
267285	case  packages_model .TypeContainer :
268- 		pvs , total , err  =  container_model .SearchImageTags (ctx , & container_model.ImageTagsSearchOptions {
286+ 		pvs , pvsTotal , err  =  container_model .SearchImageTags (ctx , & container_model.ImageTagsSearchOptions {
269287			Paginator : db .NewAbsoluteListOptions (0 , 5 ),
270288			PackageID : pd .Package .ID ,
271289			IsTagged :  true ,
272290		})
291+ 		ctx .Data ["ContainerImageMetadata" ] =  pd .Metadata 
292+ 		if  versionSub  !=  ""  {
293+ 			imageMeta , err  :=  viewPackageContainerImage (ctx , pd , versionSub )
294+ 			if  errors .Is (err , util .ErrNotExist ) {
295+ 				ctx .NotFound (nil )
296+ 				return 
297+ 			} else  if  err  !=  nil  {
298+ 				ctx .ServerError ("viewPackageContainerImage" , err )
299+ 				return 
300+ 			}
301+ 			ctx .Data ["ContainerImageMetadata" ] =  imageMeta 
302+ 		}
273303	default :
274- 		pvs , total , err  =  packages_model .SearchVersions (ctx , & packages_model.PackageSearchOptions {
304+ 		pvs , pvsTotal , err  =  packages_model .SearchVersions (ctx , & packages_model.PackageSearchOptions {
275305			Paginator :  db .NewAbsoluteListOptions (0 , 5 ),
276306			PackageID :  pd .Package .ID ,
277307			IsInternal : optional .Some (false ),
@@ -283,7 +313,7 @@ func ViewPackageVersion(ctx *context.Context) {
283313	}
284314
285315	ctx .Data ["LatestVersions" ] =  pvs 
286- 	ctx .Data ["TotalVersionCount" ] =  total 
316+ 	ctx .Data ["TotalVersionCount" ] =  pvsTotal 
287317
288318	ctx .Data ["CanWritePackages" ] =  ctx .Package .AccessMode  >=  perm .AccessModeWrite  ||  ctx .IsUserSiteAdmin ()
289319
0 commit comments