2024-04-10 22:10:09 +08:00
|
|
|
package handler
|
|
|
|
|
|
|
|
import (
|
|
|
|
"nf-repo/internal/interfaces"
|
|
|
|
"nf-repo/internal/opt"
|
2024-12-23 00:07:44 -08:00
|
|
|
"nf-repo/internal/tool/rerr"
|
|
|
|
|
|
|
|
"github.com/loveuer/nf"
|
|
|
|
"github.com/loveuer/nf/nft/log"
|
2024-04-10 22:10:09 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
type blob struct {
|
|
|
|
blobHandler interfaces.BlobHandler
|
|
|
|
uploadHandler interfaces.UploadHandler
|
|
|
|
}
|
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
var b = &blob{}
|
2024-04-10 22:10:09 +08:00
|
|
|
|
|
|
|
func Root(bh interfaces.BlobHandler, uh interfaces.UploadHandler, mh interfaces.ManifestHandler) nf.HandlerFunc {
|
|
|
|
b.blobHandler = bh
|
|
|
|
b.uploadHandler = uh
|
|
|
|
return func(c *nf.Ctx) error {
|
|
|
|
if isBlob(c) {
|
|
|
|
return handleBlobs(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
if isManifest(c) {
|
2024-12-23 00:07:44 -08:00
|
|
|
return handleManifest(c, mh, bh)
|
2024-04-10 22:10:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if isTags(c) {
|
|
|
|
return handleTags(c, mh)
|
|
|
|
}
|
|
|
|
|
|
|
|
if isCatalog(c) {
|
|
|
|
return handleCatalog(c, mh)
|
|
|
|
}
|
|
|
|
|
|
|
|
if opt.ReferrersEnabled && isReferrers(c) {
|
|
|
|
return handleReferrers(c, mh)
|
|
|
|
}
|
|
|
|
|
2024-05-05 19:11:57 +08:00
|
|
|
c.SetHeader("Docker-Distribution-API-Version", "registry/2.0")
|
2024-04-10 22:10:09 +08:00
|
|
|
|
2024-12-23 00:07:44 -08:00
|
|
|
log.Warn("root.go Root: path = %s, method = %s, headers = %v", c.Path(), c.Method(), c.Request.Header)
|
2024-05-05 19:11:57 +08:00
|
|
|
|
|
|
|
return rerr.Error(c, rerr.ErrUnauthorized)
|
2024-04-10 22:10:09 +08:00
|
|
|
}
|
|
|
|
}
|