endpoints/v2: fail clients not accepting schema v1
This commit is contained in:
parent
568ca1d7ba
commit
b7573a8c88
1 changed files with 10 additions and 2 deletions
|
@ -17,7 +17,8 @@ from endpoints.v2.errors import (BlobUnknown, ManifestInvalid, ManifestUnknown,
|
||||||
NameInvalid, TagExpired)
|
NameInvalid, TagExpired)
|
||||||
from endpoints.v2.labelhandlers import handle_label
|
from endpoints.v2.labelhandlers import handle_label
|
||||||
from image.docker import ManifestException
|
from image.docker import ManifestException
|
||||||
from image.docker.schema1 import DockerSchema1Manifest, DockerSchema1ManifestBuilder
|
from image.docker.schema1 import (DOCKER_SCHEMA1_MANIFEST_CONTENT_TYPE,
|
||||||
|
DockerSchema1Manifest, DockerSchema1ManifestBuilder)
|
||||||
from image.docker.schema2 import DOCKER_SCHEMA2_CONTENT_TYPES, OCI_CONTENT_TYPES
|
from image.docker.schema2 import DOCKER_SCHEMA2_CONTENT_TYPES, OCI_CONTENT_TYPES
|
||||||
from notifications import spawn_notification
|
from notifications import spawn_notification
|
||||||
from util.audit import track_and_log
|
from util.audit import track_and_log
|
||||||
|
@ -92,7 +93,8 @@ def fetch_manifest_by_digest(namespace_name, repo_name, manifest_ref):
|
||||||
def _reject_manifest2_schema2(func):
|
def _reject_manifest2_schema2(func):
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
def wrapped(*args, **kwargs):
|
def wrapped(*args, **kwargs):
|
||||||
if request.content_type in (DOCKER_SCHEMA2_CONTENT_TYPES | OCI_CONTENT_TYPES):
|
if _doesnt_accept_schema_v1() or \
|
||||||
|
request.content_type in DOCKER_SCHEMA2_CONTENT_TYPES | OCI_CONTENT_TYPES:
|
||||||
raise ManifestInvalid(detail={'message': 'manifest schema version not supported'},
|
raise ManifestInvalid(detail={'message': 'manifest schema version not supported'},
|
||||||
http_status_code=415)
|
http_status_code=415)
|
||||||
return func(*args, **kwargs)
|
return func(*args, **kwargs)
|
||||||
|
@ -100,6 +102,12 @@ def _reject_manifest2_schema2(func):
|
||||||
return wrapped
|
return wrapped
|
||||||
|
|
||||||
|
|
||||||
|
def _doesnt_accept_schema_v1():
|
||||||
|
# If the client doesn't specify anything, still give them Schema v1.
|
||||||
|
return len(request.accept_mimetypes) != 0 and \
|
||||||
|
DOCKER_SCHEMA1_MANIFEST_CONTENT_TYPE not in request.accept_mimetypes
|
||||||
|
|
||||||
|
|
||||||
@v2_bp.route(MANIFEST_TAGNAME_ROUTE, methods=['PUT'])
|
@v2_bp.route(MANIFEST_TAGNAME_ROUTE, methods=['PUT'])
|
||||||
@_reject_manifest2_schema2
|
@_reject_manifest2_schema2
|
||||||
@parse_repository_name()
|
@parse_repository_name()
|
||||||
|
|
Reference in a new issue