initial import for Open Source 🎉
This commit is contained in:
parent
1898c361f3
commit
9c0dd3b722
2048 changed files with 218743 additions and 0 deletions
76
endpoints/v1/__init__.py
Normal file
76
endpoints/v1/__init__.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
import logging
|
||||
|
||||
from functools import wraps
|
||||
|
||||
from flask import Blueprint, make_response, jsonify
|
||||
|
||||
import features
|
||||
|
||||
from app import metric_queue, app
|
||||
from data.readreplica import ReadOnlyModeException
|
||||
from endpoints.decorators import anon_protect, anon_allowed
|
||||
from util.metrics.metricqueue import time_blueprint
|
||||
from util.http import abort
|
||||
|
||||
v1_bp = Blueprint('v1', __name__)
|
||||
time_blueprint(v1_bp, metric_queue)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Note: This is *not* part of the Docker index spec. This is here for our own health check,
|
||||
# since we have nginx handle the _ping below.
|
||||
@v1_bp.route('/_internal_ping')
|
||||
@anon_allowed
|
||||
def internal_ping():
|
||||
return make_response('true', 200)
|
||||
|
||||
|
||||
@v1_bp.route('/_ping')
|
||||
@anon_allowed
|
||||
def ping():
|
||||
# NOTE: any changes made here must also be reflected in the nginx config
|
||||
response = make_response('true', 200)
|
||||
response.headers['X-Docker-Registry-Version'] = '0.6.0'
|
||||
response.headers['X-Docker-Registry-Standalone'] = '0'
|
||||
return response
|
||||
|
||||
|
||||
@v1_bp.app_errorhandler(ReadOnlyModeException)
|
||||
def handle_readonly(ex):
|
||||
response = jsonify({'message': 'System is currently read-only. Pulls will succeed but all ' +
|
||||
'write operations are currently suspended.',
|
||||
'is_readonly': True})
|
||||
response.status_code = 503
|
||||
return response
|
||||
|
||||
|
||||
def check_v1_push_enabled(namespace_name_kwarg='namespace_name'):
|
||||
""" Decorator which checks if V1 push is enabled for the current namespace. The first argument
|
||||
to the wrapped function must be the namespace name or there must be a kwarg with the
|
||||
name `namespace_name`.
|
||||
"""
|
||||
def wrapper(wrapped):
|
||||
@wraps(wrapped)
|
||||
def decorated(*args, **kwargs):
|
||||
if namespace_name_kwarg in kwargs:
|
||||
namespace_name = kwargs[namespace_name_kwarg]
|
||||
else:
|
||||
namespace_name = args[0]
|
||||
|
||||
if features.RESTRICTED_V1_PUSH:
|
||||
whitelist = app.config.get('V1_PUSH_WHITELIST') or []
|
||||
logger.debug('V1 push is restricted to whitelist: %s', whitelist)
|
||||
if namespace_name not in whitelist:
|
||||
abort(405,
|
||||
message=('V1 push support has been deprecated. To enable for this ' +
|
||||
'namespace, please contact support.'))
|
||||
|
||||
return wrapped(*args, **kwargs)
|
||||
return decorated
|
||||
return wrapper
|
||||
|
||||
|
||||
from endpoints.v1 import (
|
||||
index,
|
||||
registry,
|
||||
tag,)
|
Reference in a new issue