diff --git a/routers/api/packages/api.go b/routers/api/packages/api.go
index 1337ce4569..b6666c9269 100644
--- a/routers/api/packages/api.go
+++ b/routers/api/packages/api.go
@@ -153,66 +153,10 @@ func CommonRoutes() *web.Route {
})
}, reqPackageAccess(perm.AccessModeRead))
r.Group("/arch", func() {
- r.Group("/repository.key", func() {
- r.Head("", arch.GetRepositoryKey)
- r.Get("", arch.GetRepositoryKey)
- })
-
- r.Methods("HEAD,GET,PUT,DELETE", "*", func(ctx *context.Context) {
- pathGroups := strings.Split(strings.Trim(ctx.Params("*"), "/"), "/")
- groupLen := len(pathGroups)
- isGetHead := ctx.Req.Method == "HEAD" || ctx.Req.Method == "GET"
- isPut := ctx.Req.Method == "PUT"
- isDelete := ctx.Req.Method == "DELETE"
- if isGetHead {
- if groupLen < 2 {
- ctx.Status(http.StatusNotFound)
- return
- }
- if groupLen == 2 {
- ctx.SetParams("group", "")
- ctx.SetParams("arch", pathGroups[0])
- ctx.SetParams("file", pathGroups[1])
- } else {
- ctx.SetParams("group", strings.Join(pathGroups[:groupLen-2], "/"))
- ctx.SetParams("arch", pathGroups[groupLen-2])
- ctx.SetParams("file", pathGroups[groupLen-1])
- }
- arch.GetPackageOrDB(ctx)
- return
- } else if isPut {
- ctx.SetParams("group", strings.Join(pathGroups, "/"))
- reqPackageAccess(perm.AccessModeWrite)(ctx)
- if ctx.Written() {
- return
- }
- arch.PushPackage(ctx)
- return
- } else if isDelete {
- if groupLen < 3 {
- ctx.Status(http.StatusBadRequest)
- return
- }
- if groupLen == 3 {
- ctx.SetParams("group", "")
- ctx.SetParams("package", pathGroups[0])
- ctx.SetParams("version", pathGroups[1])
- ctx.SetParams("arch", pathGroups[2])
- } else {
- ctx.SetParams("group", strings.Join(pathGroups[:groupLen-3], "/"))
- ctx.SetParams("package", pathGroups[groupLen-3])
- ctx.SetParams("version", pathGroups[groupLen-2])
- ctx.SetParams("arch", pathGroups[groupLen-1])
- }
- reqPackageAccess(perm.AccessModeWrite)(ctx)
- if ctx.Written() {
- return
- }
- arch.RemovePackage(ctx)
- return
- }
- ctx.Status(http.StatusNotFound)
- })
+ r.Methods("HEAD,GET", "/repository.key", arch.GetRepositoryKey)
+ r.Methods("HEAD,GET", "*", arch.GetPackageOrDB)
+ r.Methods("PUT", "*", reqPackageAccess(perm.AccessModeWrite), arch.PushPackage)
+ r.Methods("DELETE", "*", reqPackageAccess(perm.AccessModeWrite), arch.RemovePackage)
}, reqPackageAccess(perm.AccessModeRead))
r.Group("/cargo", func() {
r.Group("/api/v1/crates", func() {
diff --git a/routers/api/packages/arch/arch.go b/routers/api/packages/arch/arch.go
index ecd2281884..3f1614b752 100644
--- a/routers/api/packages/arch/arch.go
+++ b/routers/api/packages/arch/arch.go
@@ -59,7 +59,7 @@ func GetRepositoryKey(ctx *context.Context) {
}
func PushPackage(ctx *context.Context) {
- group := ctx.Params("group")
+ group := strings.Trim(ctx.Params("*"), "/")
releaser := refreshLocker(ctx, group)
defer releaser()
upload, needToClose, err := ctx.UploadStream()
@@ -183,11 +183,21 @@ func PushPackage(ctx *context.Context) {
}
func GetPackageOrDB(ctx *context.Context) {
- var (
- file = ctx.Params("file")
- group = ctx.Params("group")
- arch = ctx.Params("arch")
- )
+ pathGroups := strings.Split(strings.Trim(ctx.Params("*"), "/"), "/")
+ groupLen := len(pathGroups)
+ if groupLen < 2 {
+ ctx.Status(http.StatusNotFound)
+ return
+ }
+ var file, group, arch string
+ if groupLen == 2 {
+ arch = pathGroups[0]
+ file = pathGroups[1]
+ } else {
+ group = strings.Join(pathGroups[:groupLen-2], "/")
+ arch = pathGroups[groupLen-2]
+ file = pathGroups[groupLen-1]
+ }
if archPkgOrSig.MatchString(file) {
pkg, u, pf, err := arch_service.GetPackageFile(ctx, group, file, ctx.Package.Owner.ID)
if err != nil {
@@ -220,12 +230,23 @@ func GetPackageOrDB(ctx *context.Context) {
}
func RemovePackage(ctx *context.Context) {
- var (
- group = ctx.Params("group")
- pkg = ctx.Params("package")
- ver = ctx.Params("version")
- pkgArch = ctx.Params("arch")
- )
+ pathGroups := strings.Split(strings.Trim(ctx.Params("*"), "/"), "/")
+ groupLen := len(pathGroups)
+ if groupLen < 3 {
+ ctx.Status(http.StatusBadRequest)
+ return
+ }
+ var group, pkg, ver, pkgArch string
+ if groupLen == 3 {
+ pkg = pathGroups[0]
+ ver = pathGroups[1]
+ pkgArch = pathGroups[2]
+ } else {
+ group = strings.Join(pathGroups[:groupLen-3], "/")
+ pkg = pathGroups[groupLen-3]
+ ver = pathGroups[groupLen-2]
+ pkgArch = pathGroups[groupLen-1]
+ }
releaser := refreshLocker(ctx, group)
defer releaser()
pv, err := packages_model.GetVersionByNameAndVersion(
diff --git a/routers/web/user/package.go b/routers/web/user/package.go
index d47a36e165..cb4735da7e 100644
--- a/routers/web/user/package.go
+++ b/routers/web/user/package.go
@@ -177,10 +177,11 @@ func ViewPackageVersion(ctx *context.Context) {
ctx.Data["Title"] = pd.Package.Name
ctx.Data["IsPackagesPage"] = true
ctx.Data["PackageDescriptor"] = pd
+ ctx.Data["PackageRegistryHost"] = setting.Packages.RegistryHost
switch pd.Package.Type {
case packages_model.TypeContainer:
- ctx.Data["RegistryHost"] = setting.Packages.RegistryHost
+
case packages_model.TypeAlpine:
branches := make(container.Set[string])
repositories := make(container.Set[string])
@@ -203,7 +204,6 @@ func ViewPackageVersion(ctx *context.Context) {
ctx.Data["Repositories"] = util.Sorted(repositories.Values())
ctx.Data["Architectures"] = util.Sorted(architectures.Values())
case packages_model.TypeArch:
- ctx.Data["RegistryHost"] = setting.Packages.RegistryHost
ctx.Data["SignMail"] = fmt.Sprintf("%s@noreply.%s", ctx.Package.Owner.Name, setting.Packages.RegistryHost)
groups := make(container.Set[string])
for _, f := range pd.Files {
diff --git a/templates/package/content/arch.tmpl b/templates/package/content/arch.tmpl
index 6138b1d698..6a041d323b 100644
--- a/templates/package/content/arch.tmpl
+++ b/templates/package/content/arch.tmpl
@@ -25,7 +25,7 @@ pacman-key --lsign-key '{{$.SignMail}}'
{{end -}}{{- if gt $GroupSize 1 -}}
# {{ctx.Locale.Tr "packages.arch.pacman.repo.multi.item" .}}
{{end -}}
-[{{$.PackageDescriptor.Owner.LowerName}}.{{$.RegistryHost}}]
+[{{$.PackageDescriptor.Owner.LowerName}}.{{$.PackageRegistryHost}}]
SigLevel = Required
Server =
helm pull oci://{{.RegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}} --version {{.PackageDescriptor.Version.LowerVersion}}
helm pull oci://{{.PackageRegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}} --version {{.PackageDescriptor.Version.LowerVersion}}
docker pull {{.RegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}}{{$separator}}{{.PackageDescriptor.Version.LowerVersion}}
docker pull {{.PackageRegistryHost}}/{{.PackageDescriptor.Owner.LowerName}}/{{.PackageDescriptor.Package.LowerName}}{{$separator}}{{.PackageDescriptor.Version.LowerVersion}}