v2: refactor auth to use data.types
This commit is contained in:
parent
3de6000428
commit
a516c08deb
2 changed files with 15 additions and 9 deletions
|
@ -7,6 +7,14 @@ from data.types import (
|
||||||
Tag,
|
Tag,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def create_repository(namespace_name, repo_name, user):
|
||||||
|
model.repository.create_repository(namespace, reponame, user)
|
||||||
|
|
||||||
|
|
||||||
|
def repository_is_public(namespace_name, repo_name):
|
||||||
|
model.repository.repository_is_public(namespace, reponame)):
|
||||||
|
|
||||||
|
|
||||||
def get_repository(namespace_name, repo_name):
|
def get_repository(namespace_name, repo_name):
|
||||||
repo = model.repository.get_repository(namespace_name, repo_name)
|
repo = model.repository.get_repository(namespace_name, repo_name)
|
||||||
if repo is None:
|
if repo is None:
|
||||||
|
|
|
@ -5,7 +5,6 @@ from cachetools import lru_cache
|
||||||
from flask import request, jsonify, abort
|
from flask import request, jsonify, abort
|
||||||
|
|
||||||
from app import app, userevents, instance_keys
|
from app import app, userevents, instance_keys
|
||||||
from data import model
|
|
||||||
from auth.auth import process_auth
|
from auth.auth import process_auth
|
||||||
from auth.auth_context import get_authenticated_user, get_validated_token, get_validated_oauth_token
|
from auth.auth_context import get_authenticated_user, get_validated_token, get_validated_oauth_token
|
||||||
from auth.permissions import (ModifyRepositoryPermission, ReadRepositoryPermission,
|
from auth.permissions import (ModifyRepositoryPermission, ReadRepositoryPermission,
|
||||||
|
@ -21,9 +20,7 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
TOKEN_VALIDITY_LIFETIME_S = 60 * 60 # 1 hour
|
TOKEN_VALIDITY_LIFETIME_S = 60 * 60 # 1 hour
|
||||||
SCOPE_REGEX_TEMPLATE = (
|
SCOPE_REGEX_TEMPLATE = r'^repository:((?:{}\/)?((?:[\.a-zA-Z0-9_\-]+\/)?[\.a-zA-Z0-9_\-]+)):((?:push|pull|\*)(?:,(?:push|pull|\*))*)$'
|
||||||
r'^repository:((?:{}\/)?((?:[\.a-zA-Z0-9_\-]+\/)?[\.a-zA-Z0-9_\-]+)):((?:push|pull|\*)(?:,(?:push|pull|\*))*)$'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@lru_cache(maxsize=1)
|
@lru_cache(maxsize=1)
|
||||||
|
@ -38,7 +35,8 @@ def get_scope_regex():
|
||||||
@no_cache
|
@no_cache
|
||||||
@anon_protect
|
@anon_protect
|
||||||
def generate_registry_jwt():
|
def generate_registry_jwt():
|
||||||
""" This endpoint will generate a JWT conforming to the Docker registry v2 auth spec:
|
"""
|
||||||
|
This endpoint will generate a JWT conforming to the Docker Registry v2 Auth Spec:
|
||||||
https://docs.docker.com/registry/spec/auth/token/
|
https://docs.docker.com/registry/spec/auth/token/
|
||||||
"""
|
"""
|
||||||
audience_param = request.args.get('service')
|
audience_param = request.args.get('service')
|
||||||
|
@ -97,7 +95,7 @@ def generate_registry_jwt():
|
||||||
if user is not None or token is not None:
|
if user is not None or token is not None:
|
||||||
# Lookup the repository. If it exists, make sure the entity has modify
|
# Lookup the repository. If it exists, make sure the entity has modify
|
||||||
# permission. Otherwise, make sure the entity has create permission.
|
# permission. Otherwise, make sure the entity has create permission.
|
||||||
repo = model.repository.get_repository(namespace, reponame)
|
repo = v2.get_repository(namespace, reponame)
|
||||||
if repo:
|
if repo:
|
||||||
if ModifyRepositoryPermission(namespace, reponame).can():
|
if ModifyRepositoryPermission(namespace, reponame).can():
|
||||||
final_actions.append('push')
|
final_actions.append('push')
|
||||||
|
@ -106,7 +104,7 @@ def generate_registry_jwt():
|
||||||
else:
|
else:
|
||||||
if CreateRepositoryPermission(namespace).can() and user is not None:
|
if CreateRepositoryPermission(namespace).can() and user is not None:
|
||||||
logger.debug('Creating repository: %s/%s', namespace, reponame)
|
logger.debug('Creating repository: %s/%s', namespace, reponame)
|
||||||
model.repository.create_repository(namespace, reponame, user)
|
v2.create_repository(namespace, reponame, user)
|
||||||
final_actions.append('push')
|
final_actions.append('push')
|
||||||
else:
|
else:
|
||||||
logger.debug('No permission to create repository %s/%s', namespace, reponame)
|
logger.debug('No permission to create repository %s/%s', namespace, reponame)
|
||||||
|
@ -114,7 +112,7 @@ def generate_registry_jwt():
|
||||||
if 'pull' in actions:
|
if 'pull' in actions:
|
||||||
# Grant pull if the user can read the repo or it is public.
|
# Grant pull if the user can read the repo or it is public.
|
||||||
if (ReadRepositoryPermission(namespace, reponame).can() or
|
if (ReadRepositoryPermission(namespace, reponame).can() or
|
||||||
model.repository.repository_is_public(namespace, reponame)):
|
v2.repository_is_public(namespace, reponame)):
|
||||||
final_actions.append('pull')
|
final_actions.append('pull')
|
||||||
else:
|
else:
|
||||||
logger.debug('No permission to pull repository %s/%s', namespace, reponame)
|
logger.debug('No permission to pull repository %s/%s', namespace, reponame)
|
||||||
|
|
Reference in a new issue