Merge pull request #10367 from ywk253100/191227_list

Remove the manifest list middleware
This commit is contained in:
Wenkai Yin(尹文开) 2019-12-31 14:53:21 +08:00 committed by GitHub
commit 6571135cbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 72 deletions

View File

@ -23,7 +23,6 @@ import (
"github.com/goharbor/harbor/src/core/middlewares/countquota" "github.com/goharbor/harbor/src/core/middlewares/countquota"
"github.com/goharbor/harbor/src/core/middlewares/immutable" "github.com/goharbor/harbor/src/core/middlewares/immutable"
"github.com/goharbor/harbor/src/core/middlewares/listrepo" "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/readonly"
"github.com/goharbor/harbor/src/core/middlewares/regtoken" "github.com/goharbor/harbor/src/core/middlewares/regtoken"
"github.com/goharbor/harbor/src/core/middlewares/sizequota" "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 { func (b *DefaultCreator) geMiddleware(mName string) alice.Constructor {
middlewares := map[string]alice.Constructor{ middlewares := map[string]alice.Constructor{
CHART: func(next http.Handler) http.Handler { return chart.New(next) }, CHART: func(next http.Handler) http.Handler { return chart.New(next) },
READONLY: func(next http.Handler) http.Handler { return readonly.New(next) }, READONLY: func(next http.Handler) http.Handler { return readonly.New(next) },
URL: func(next http.Handler) http.Handler { return url.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) },
LISTREPO: func(next http.Handler) http.Handler { return listrepo.New(next) }, CONTENTTRUST: func(next http.Handler) http.Handler { return contenttrust.New(next) },
CONTENTTRUST: func(next http.Handler) http.Handler { return contenttrust.New(next) }, VULNERABLE: func(next http.Handler) http.Handler { return vulnerable.New(next) },
VULNERABLE: func(next http.Handler) http.Handler { return vulnerable.New(next) }, SIZEQUOTA: func(next http.Handler) http.Handler { return sizequota.New(next) },
SIZEQUOTA: func(next http.Handler) http.Handler { return sizequota.New(next) }, COUNTQUOTA: func(next http.Handler) http.Handler { return countquota.New(next) },
COUNTQUOTA: func(next http.Handler) http.Handler { return countquota.New(next) }, IMMUTABLE: func(next http.Handler) http.Handler { return immutable.New(next) },
IMMUTABLE: func(next http.Handler) http.Handler { return immutable.New(next) }, REGTOKEN: func(next http.Handler) http.Handler { return regtoken.New(next) },
REGTOKEN: func(next http.Handler) http.Handler { return regtoken.New(next) },
} }
return middlewares[mName] return middlewares[mName]
} }

View File

@ -16,24 +16,23 @@ package middlewares
// const variables // const variables
const ( const (
CHART = "chart" CHART = "chart"
READONLY = "readonly" READONLY = "readonly"
URL = "url" URL = "url"
MUITIPLEMANIFEST = "manifest" LISTREPO = "listrepo"
LISTREPO = "listrepo" CONTENTTRUST = "contenttrust"
CONTENTTRUST = "contenttrust" VULNERABLE = "vulnerable"
VULNERABLE = "vulnerable" SIZEQUOTA = "sizequota"
SIZEQUOTA = "sizequota" COUNTQUOTA = "countquota"
COUNTQUOTA = "countquota" IMMUTABLE = "immutable"
IMMUTABLE = "immutable" REGTOKEN = "regtoken"
REGTOKEN = "regtoken"
) )
// ChartMiddlewares middlewares for chart server // ChartMiddlewares middlewares for chart server
var ChartMiddlewares = []string{CHART} var ChartMiddlewares = []string{CHART}
// Middlewares with sequential organization // 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 ... // MiddlewaresLocal ...
var MiddlewaresLocal = []string{SIZEQUOTA, IMMUTABLE, COUNTQUOTA} var MiddlewaresLocal = []string{SIZEQUOTA, IMMUTABLE, COUNTQUOTA}

View File

@ -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)
}