mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-06-17 11:59:30 +00:00
cleanup package route
This commit is contained in:
parent
e801d53e61
commit
ba12aed572
5 changed files with 42 additions and 77 deletions
|
@ -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() {
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue