create interfaces for v1 and v2 data model

This commit is contained in:
Jimmy Zelinskie 2016-08-30 15:05:15 -04:00
parent b775458d4b
commit c06d395f96
14 changed files with 1048 additions and 732 deletions

View file

@ -6,9 +6,8 @@ from functools import wraps
from flask import request, make_response, jsonify, session
from data.interfaces import v1
from data.interfaces.v1 import PreOCIModel as model
from app import authentication, userevents, metric_queue
from app import authentication, userevents
from auth.auth import process_auth, generate_signed_token
from auth.auth_context import get_authenticated_user, get_validated_token, get_validated_oauth_token
from auth.permissions import (ModifyRepositoryPermission, UserAdminPermission,
@ -86,17 +85,17 @@ def create_user():
success = make_response('"Username or email already exists"', 400)
if username == '$token':
if v1.load_token(password):
if model.load_token(password):
return success
abort(400, 'Invalid access token.', issue='invalid-access-token')
elif username == '$oauthtoken':
if v1.validate_oauth_token(password):
if model.validate_oauth_token(password):
return success
abort(400, 'Invalid oauth access token.', issue='invalid-oauth-access-token')
elif '+' in username:
if v1.verify_robot(username, password):
if model.verify_robot(username, password):
return success
abort(400, 'Invalid robot account or password.', issue='robot-login-failure')
@ -147,7 +146,7 @@ def update_user(username):
if 'password' in update_request:
logger.debug('Updating user password')
v1.change_user_password(get_authenticated_user(), update_request['password'])
model.change_user_password(get_authenticated_user(), update_request['password'])
return jsonify({
'username': get_authenticated_user().username,
@ -167,7 +166,7 @@ def create_repository(namespace_name, repo_name):
abort(400, message='Invalid repository name. Repository names cannot contain slashes.')
logger.debug('Looking up repository %s/%s', namespace_name, repo_name)
repo = v1.get_repository(namespace_name, repo_name)
repo = model.get_repository(namespace_name, repo_name)
logger.debug('Found repository %s/%s', namespace_name, repo_name)
if not repo and get_authenticated_user() is None:
@ -195,7 +194,7 @@ def create_repository(namespace_name, repo_name):
logger.debug('Creating repository %s/%s with owner: %s', namespace_name, repo_name,
get_authenticated_user().username)
v1.create_repository(namespace_name, repo_name, get_authenticated_user())
model.create_repository(namespace_name, repo_name, get_authenticated_user())
if get_authenticated_user():
user_event_data = {
@ -220,7 +219,7 @@ def update_images(namespace_name, repo_name):
if permission.can():
logger.debug('Looking up repository')
repo = v1.get_repository(namespace_name, repo_name)
repo = model.get_repository(namespace_name, repo_name)
if not repo:
# Make sure the repo actually exists.
abort(404, message='Unknown repository', issue='unknown-repo')
@ -250,10 +249,10 @@ def get_repository_images(namespace_name, repo_name):
permission = ReadRepositoryPermission(namespace_name, repo_name)
# TODO invalidate token?
if permission.can() or v1.repository_is_public(namespace_name, repo_name):
if permission.can() or model.repository_is_public(namespace_name, repo_name):
# We can't rely on permissions to tell us if a repo exists anymore
logger.debug('Looking up repository')
repo = v1.get_repository(namespace_name, repo_name)
repo = model.get_repository(namespace_name, repo_name)
if not repo:
abort(404, message='Unknown repository', issue='unknown-repo')
@ -319,7 +318,7 @@ def _conduct_repo_search(username, query, results):
return ReadRepositoryPermission(repo.namespace_name, repo.name).can()
only_public = username is None
matching_repos = v1.get_sorted_matching_repositories(query, only_public, can_read, limit=5)
matching_repos = model.get_sorted_matching_repositories(query, only_public, can_read, limit=5)
for repo in matching_repos:
results.append({