package handler import ( "nf-repo/internal/interfaces" "nf-repo/internal/opt" "nf-repo/internal/tool/rerr" "github.com/loveuer/nf" "github.com/loveuer/nf/nft/log" ) type blob struct { blobHandler interfaces.BlobHandler uploadHandler interfaces.UploadHandler } var b = &blob{} 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) { return handleManifest(c, mh, bh) } if isTags(c) { return handleTags(c, mh) } if isCatalog(c) { return handleCatalog(c, mh) } if opt.ReferrersEnabled && isReferrers(c) { return handleReferrers(c, mh) } c.SetHeader("Docker-Distribution-API-Version", "registry/2.0") log.Warn("root.go Root: path = %s, method = %s, headers = %v", c.Path(), c.Method(), c.Request.Header) return rerr.Error(c, rerr.ErrUnauthorized) } }