From 190a5f2ee6b2f072a3442520a4c78223888fb363 Mon Sep 17 00:00:00 2001 From: Wenkai Yin Date: Fri, 27 Dec 2019 16:04:04 +0800 Subject: [PATCH] Remove the manifest list middleware We'll support manifest list, so this commit removes the manifest list middleware who blocks the manifest list pushing Signed-off-by: Wenkai Yin --- src/core/middlewares/chain.go | 22 ++++----- src/core/middlewares/config.go | 23 +++++---- .../middlewares/multiplmanifest/handler.go | 48 ------------------- 3 files changed, 21 insertions(+), 72 deletions(-) delete mode 100644 src/core/middlewares/multiplmanifest/handler.go diff --git a/src/core/middlewares/chain.go b/src/core/middlewares/chain.go index 630a8e8d4..c58920ee6 100644 --- a/src/core/middlewares/chain.go +++ b/src/core/middlewares/chain.go @@ -23,7 +23,6 @@ import ( "github.com/goharbor/harbor/src/core/middlewares/countquota" "github.com/goharbor/harbor/src/core/middlewares/immutable" "github.com/goharbor/harbor/src/core/middlewares/listrepo" - "github.com/goharbor/harbor/src/core/middlewares/multiplmanifest" "github.com/goharbor/harbor/src/core/middlewares/readonly" "github.com/goharbor/harbor/src/core/middlewares/regtoken" "github.com/goharbor/harbor/src/core/middlewares/sizequota" @@ -63,17 +62,16 @@ func (b *DefaultCreator) Create() *alice.Chain { func (b *DefaultCreator) geMiddleware(mName string) alice.Constructor { middlewares := map[string]alice.Constructor{ - CHART: func(next http.Handler) http.Handler { return chart.New(next) }, - READONLY: func(next http.Handler) http.Handler { return readonly.New(next) }, - URL: func(next http.Handler) http.Handler { return url.New(next) }, - MUITIPLEMANIFEST: func(next http.Handler) http.Handler { return multiplmanifest.New(next) }, - LISTREPO: func(next http.Handler) http.Handler { return listrepo.New(next) }, - CONTENTTRUST: func(next http.Handler) http.Handler { return contenttrust.New(next) }, - VULNERABLE: func(next http.Handler) http.Handler { return vulnerable.New(next) }, - SIZEQUOTA: func(next http.Handler) http.Handler { return sizequota.New(next) }, - COUNTQUOTA: func(next http.Handler) http.Handler { return countquota.New(next) }, - IMMUTABLE: func(next http.Handler) http.Handler { return immutable.New(next) }, - REGTOKEN: func(next http.Handler) http.Handler { return regtoken.New(next) }, + CHART: func(next http.Handler) http.Handler { return chart.New(next) }, + READONLY: func(next http.Handler) http.Handler { return readonly.New(next) }, + URL: func(next http.Handler) http.Handler { return url.New(next) }, + LISTREPO: func(next http.Handler) http.Handler { return listrepo.New(next) }, + CONTENTTRUST: func(next http.Handler) http.Handler { return contenttrust.New(next) }, + VULNERABLE: func(next http.Handler) http.Handler { return vulnerable.New(next) }, + SIZEQUOTA: func(next http.Handler) http.Handler { return sizequota.New(next) }, + COUNTQUOTA: func(next http.Handler) http.Handler { return countquota.New(next) }, + IMMUTABLE: func(next http.Handler) http.Handler { return immutable.New(next) }, + REGTOKEN: func(next http.Handler) http.Handler { return regtoken.New(next) }, } return middlewares[mName] } diff --git a/src/core/middlewares/config.go b/src/core/middlewares/config.go index f8147b49d..49841b44d 100644 --- a/src/core/middlewares/config.go +++ b/src/core/middlewares/config.go @@ -16,24 +16,23 @@ package middlewares // const variables const ( - CHART = "chart" - READONLY = "readonly" - URL = "url" - MUITIPLEMANIFEST = "manifest" - LISTREPO = "listrepo" - CONTENTTRUST = "contenttrust" - VULNERABLE = "vulnerable" - SIZEQUOTA = "sizequota" - COUNTQUOTA = "countquota" - IMMUTABLE = "immutable" - REGTOKEN = "regtoken" + CHART = "chart" + READONLY = "readonly" + URL = "url" + LISTREPO = "listrepo" + CONTENTTRUST = "contenttrust" + VULNERABLE = "vulnerable" + SIZEQUOTA = "sizequota" + COUNTQUOTA = "countquota" + IMMUTABLE = "immutable" + REGTOKEN = "regtoken" ) // ChartMiddlewares middlewares for chart server var ChartMiddlewares = []string{CHART} // Middlewares with sequential organization -var Middlewares = []string{READONLY, URL, REGTOKEN, MUITIPLEMANIFEST, LISTREPO, CONTENTTRUST, VULNERABLE, SIZEQUOTA, IMMUTABLE, COUNTQUOTA} +var Middlewares = []string{READONLY, URL, REGTOKEN, LISTREPO, CONTENTTRUST, VULNERABLE, SIZEQUOTA, IMMUTABLE, COUNTQUOTA} // MiddlewaresLocal ... var MiddlewaresLocal = []string{SIZEQUOTA, IMMUTABLE, COUNTQUOTA} diff --git a/src/core/middlewares/multiplmanifest/handler.go b/src/core/middlewares/multiplmanifest/handler.go deleted file mode 100644 index d0126696c..000000000 --- a/src/core/middlewares/multiplmanifest/handler.go +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright Project Harbor Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package multiplmanifest - -import ( - "github.com/goharbor/harbor/src/common/utils/log" - "github.com/goharbor/harbor/src/core/middlewares/util" - "net/http" - "strings" -) - -type multipleManifestHandler struct { - next http.Handler -} - -// New ... -func New(next http.Handler) http.Handler { - return &multipleManifestHandler{ - next: next, - } -} - -// ServeHTTP The handler is responsible for blocking request to upload manifest list by docker client, which is not supported so far by Harbor. -func (mh multipleManifestHandler) ServeHTTP(rw http.ResponseWriter, req *http.Request) { - match, _, _ := util.MatchPushManifest(req) - if match { - contentType := req.Header.Get("Content-type") - // application/vnd.docker.distribution.manifest.list.v2+json - if strings.Contains(contentType, "manifest.list.v2") { - log.Debugf("Content-type: %s is not supported, failing the response.", contentType) - http.Error(rw, util.MarshalError("UNSUPPORTED_MEDIA_TYPE", "Manifest.list is not supported."), http.StatusUnsupportedMediaType) - return - } - } - mh.next.ServeHTTP(rw, req) -}