From 2661db74857ae278f346217faec69b5261b2c48b Mon Sep 17 00:00:00 2001 From: Evan Cordell Date: Sat, 15 Apr 2017 08:26:33 -0400 Subject: [PATCH] Add flag to enable trust per repo (#2541) * Add flag to enable trust per repo * Add api for enabling/disabling trust * Add new LogEntryKind for changing repo trust settings Also add tests for repo trust api * Add `set_trust` method to repository * Expose new logkind to UI * Fix registry tests * Rebase migrations and regen test.db * Raise downstreamissue if trust metadata can't be removed * Refactor change_repo_trust * Add show_if to change_repo_trust endpoint --- data/database.py | 1 + data/interfaces/v2.py | 4 +- ...313d3cb_add_trust_enabled_to_repository.py | 34 +++++++++++++ data/model/repository.py | 5 ++ endpoints/api/repository.py | 48 +++++++++++++++++- endpoints/api/test/test_repository.py | 42 +++++++++++++++ endpoints/api/test/test_security.py | 6 +++ endpoints/v2/test/test_v2auth.py | 24 +++++++-- endpoints/v2/v2auth.py | 14 +++-- initdb.py | 1 + static/js/directives/ui/logs-view.js | 8 +++ test/data/test.db | Bin 1667072 -> 1667072 bytes util/security/registry_jwt.py | 1 + 13 files changed, 176 insertions(+), 12 deletions(-) create mode 100644 data/migrations/versions/ed01e313d3cb_add_trust_enabled_to_repository.py create mode 100644 endpoints/api/test/test_repository.py diff --git a/data/database.py b/data/database.py index caf4f560b..457b9f77a 100644 --- a/data/database.py +++ b/data/database.py @@ -568,6 +568,7 @@ class Repository(BaseModel): description = FullIndexedTextField(match_function=db_match_func, null=True) badge_token = CharField(default=uuid_generator) kind = EnumField(RepositoryKind) + trust_enabled = BooleanField(default=False) class Meta: database = db diff --git a/data/interfaces/v2.py b/data/interfaces/v2.py index a119d9b93..f949ddc4e 100644 --- a/data/interfaces/v2.py +++ b/data/interfaces/v2.py @@ -13,7 +13,7 @@ _MEDIA_TYPE = "application/vnd.docker.distribution.manifest.v1+prettyjws" class Repository(namedtuple('Repository', ['id', 'name', 'namespace_name', 'description', - 'is_public', 'kind'])): + 'is_public', 'kind', 'trust_enabled'])): """ Repository represents a namespaced collection of tags. :type id: int @@ -22,6 +22,7 @@ class Repository(namedtuple('Repository', ['id', 'name', 'namespace_name', 'desc :type description: string :type is_public: bool :type kind: string + :type trust_enabled: bool """ class ManifestJSON(namedtuple('ManifestJSON', ['digest', 'json', 'media_type'])): @@ -536,6 +537,7 @@ def _repository_for_repo(repo): description=repo.description, is_public=model.repository.is_repository_public(repo), kind=model.repository.get_repo_kind_name(repo), + trust_enabled=repo.trust_enabled, ) diff --git a/data/migrations/versions/ed01e313d3cb_add_trust_enabled_to_repository.py b/data/migrations/versions/ed01e313d3cb_add_trust_enabled_to_repository.py new file mode 100644 index 000000000..323f337c8 --- /dev/null +++ b/data/migrations/versions/ed01e313d3cb_add_trust_enabled_to_repository.py @@ -0,0 +1,34 @@ +"""Add trust_enabled to repository + +Revision ID: ed01e313d3cb +Revises: c3d4b7ebcdf7 +Create Date: 2017-04-14 17:38:03.319695 + +""" + +# revision identifiers, used by Alembic. +revision = 'ed01e313d3cb' +down_revision = 'c3d4b7ebcdf7' + +from alembic import op +import sqlalchemy as sa + +def upgrade(tables): + ### commands auto generated by Alembic - please adjust! ### + op.add_column('repository', sa.Column('trust_enabled', sa.Boolean(), nullable=False)) + ### end Alembic commands ### + op.bulk_insert(tables.logentrykind, [ + {'name': 'change_repo_trust'}, + ]) + + +def downgrade(tables): + ### commands auto generated by Alembic - please adjust! ### + op.drop_column('repository', 'trust_enabled') + ### end Alembic commands ### + + op.execute(tables + .logentrykind + .delete() + .where(tables. + logentrykind.name == op.inline_literal('change_repo_trust'))) diff --git a/data/model/repository.py b/data/model/repository.py index 7af1c1c48..bf14dc97e 100644 --- a/data/model/repository.py +++ b/data/model/repository.py @@ -279,6 +279,11 @@ def unstar_repository(user, repository): .execute()) except Star.DoesNotExist: raise DataModelException('Star not found.') + + +def set_trust(repo, trust_enabled): + repo.trust_enabled = trust_enabled + repo.save() def get_user_starred_repositories(user, kind_filter='image'): diff --git a/endpoints/api/repository.py b/endpoints/api/repository.py index 86f8fe4d4..fa890708e 100644 --- a/endpoints/api/repository.py +++ b/endpoints/api/repository.py @@ -15,8 +15,8 @@ from endpoints.api import (truthy_bool, format_date, nickname, log_action, valid require_repo_read, require_repo_write, require_repo_admin, RepositoryParamResource, resource, query_param, parse_args, ApiResource, request_error, require_scope, path_param, page_support, parse_args, - query_param, truthy_bool, disallow_for_app_repositories) -from endpoints.exception import Unauthorized, NotFound, InvalidRequest, ExceedsLicenseException + query_param, truthy_bool, disallow_for_app_repositories, show_if) +from endpoints.exception import Unauthorized, NotFound, InvalidRequest, ExceedsLicenseException, DownstreamIssue from endpoints.api.billing import lookup_allowed_private_repos, get_namespace_plan from endpoints.api.subscribe import check_repository_usage @@ -377,6 +377,7 @@ class Repository(RepositoryParamResource): 'is_organization': repo.namespace_user.organization, 'is_starred': is_starred, 'status_token': repo.badge_token if not is_public else '', + 'trust_enabled': repo.trust_enabled, } if stats is not None: @@ -464,3 +465,46 @@ class RepositoryVisibility(RepositoryParamResource): {'repo': repository, 'namespace': namespace, 'visibility': values['visibility']}, repo=repo) return {'success': True} + + +@resource('/v1/repository//changetrust') +@path_param('repository', 'The full path of the repository. e.g. namespace/name') +class RepositoryTrust(RepositoryParamResource): + """ Custom verb for changing the trust settings of the repository. """ + schemas = { + 'ChangeRepoTrust': { + 'type': 'object', + 'description': 'Change the trust settings for the repository.', + 'required': [ + 'trust_enabled', + ], + 'properties': { + 'trust_enabled': { + 'type': 'boolean', + 'description': 'Whether or not signing is enabled for the repository.' + }, + } + } + } + + @show_if(features.SIGNING) + @require_repo_admin + @nickname('changeRepoTrust') + @validate_json_request('ChangeRepoTrust') + def post(self, namespace, repository): + """ Change the visibility of a repository. """ + repo = model.repository.get_repository(namespace, repository) + if not repo: + raise NotFound() + + if not tuf_metadata_api.delete_metadata(namespace, repository): + raise DownstreamIssue({'message': 'Unable to delete downstream trust metadata'}) + + values = request.get_json() + model.repository.set_trust(repo, values['trust_enabled']) + + log_action('change_repo_trust', namespace, + {'repo': repository, 'namespace': namespace, 'trust_enabled': values['trust_enabled']}, + repo=repo) + + return {'success': True} diff --git a/endpoints/api/test/test_repository.py b/endpoints/api/test/test_repository.py new file mode 100644 index 000000000..f686fd9e4 --- /dev/null +++ b/endpoints/api/test/test_repository.py @@ -0,0 +1,42 @@ +import pytest + +from endpoints.api.test.shared import client_with_identity, conduct_api_call +from endpoints.api.repository import RepositoryTrust +from test.fixtures import app, appconfig, database_uri, init_db_path, sqlitedb_file +from mock import patch, ANY, MagicMock + + +INVALID_RESPONSE = { + u'detail': u"u'invalid_req' is not of type 'boolean'", + u'error_message': u"u'invalid_req' is not of type 'boolean'", + u'error_type': u'invalid_request', + u'status': 400, + u'title': u'invalid_request', + u'type': u'http://localhost/api/v1/error/invalid_request' +} + +NOT_FOUND_RESPONSE = { + u'detail': u'Not Found', + u'error_message': u'Not Found', + u'error_type': u'not_found', + u'message': u'You have requested this URI [/api/v1/repository/devtable/repo/changetrust] but did you mean /api/v1/repository//changetrust or /api/v1/repository//changevisibility or /api/v1/repository//tag//images ?', + u'status': 404, + u'title': u'not_found', + u'type': u'http://localhost/api/v1/error/not_found' +} + + +@pytest.mark.parametrize('trust_enabled,repo_found,expected_body,expected_status', [ + (True, True,{'success': True}, 200), + (False, True, {'success': True}, 200), + (False, False, NOT_FOUND_RESPONSE, 404), + ('invalid_req', False, INVALID_RESPONSE , 400), +]) +def test_post_changetrust(trust_enabled, repo_found, expected_body, expected_status, client): + with patch('endpoints.api.repository.tuf_metadata_api'): + with patch('endpoints.api.repository.model') as mock_model: + mock_model.repository.get_repository.return_value = MagicMock() if repo_found else None + with client_with_identity('devtable', client) as cl: + params = {'repository': 'devtable/repo'} + request_body = {'trust_enabled': trust_enabled} + assert expected_body == conduct_api_call(cl, RepositoryTrust, 'POST', params, request_body, expected_status).json diff --git a/endpoints/api/test/test_security.py b/endpoints/api/test/test_security.py index 425ad1682..bfcae8b99 100644 --- a/endpoints/api/test/test_security.py +++ b/endpoints/api/test/test_security.py @@ -7,6 +7,7 @@ from endpoints.api.test.shared import client_with_identity, conduct_api_call from endpoints.api.superuser import SuperUserRepositoryBuildLogs, SuperUserRepositoryBuildResource from endpoints.api.superuser import SuperUserRepositoryBuildStatus from endpoints.api.signing import RepositorySignatures +from endpoints.api.repository import RepositoryTrust from test.fixtures import app, appconfig, database_uri, init_db_path, sqlitedb_file TEAM_PARAMS = {'orgname': 'buynlarge', 'teamname': 'owners'} @@ -42,6 +43,11 @@ REPO_PARAMS = {'repository': 'devtable/someapp'} (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'freshuser', 403), (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'reader', 403), (RepositorySignatures, 'GET', REPO_PARAMS, {}, 'devtable', 200), + + (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, None, 403), + (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'freshuser', 403), + (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'reader', 403), + (RepositoryTrust, 'POST', REPO_PARAMS, {'trust_enabled': True}, 'devtable', 404), ]) def test_api_security(resource, method, params, body, identity, expected, client): with client_with_identity(identity, client) as cl: diff --git a/endpoints/v2/test/test_v2auth.py b/endpoints/v2/test/test_v2auth.py index 38b4167fd..ec0502a3a 100644 --- a/endpoints/v2/test/test_v2auth.py +++ b/endpoints/v2/test/test_v2auth.py @@ -3,10 +3,14 @@ import pytest import flask from flask_principal import Identity, Principal -from endpoints.v2.v2auth import get_tuf_root +from endpoints.v2.v2auth import get_tuf_root from auth import permissions -from util.security.registry_jwt import QUAY_TUF_ROOT, SIGNER_TUF_ROOT +from util.security.registry_jwt import QUAY_TUF_ROOT, SIGNER_TUF_ROOT, DISABLED_TUF_ROOT +from test import testconfig +from mock import Mock + + def admin_identity(namespace, reponame): identity = Identity('admin') identity.provides.add(permissions._RepositoryNeed(namespace, reponame, 'admin')) @@ -27,7 +31,7 @@ def read_identity(namespace, reponame): def app_with_principal(): app = flask.Flask(__name__) - app.config.update(SECRET_KEY='secret', TESTING=True) + app.config.from_object(testconfig.TestConfig()) principal = Principal(app) return app, principal @@ -44,5 +48,17 @@ def test_get_tuf_root(identity, expected): app, principal = app_with_principal() with app.test_request_context('/'): principal.set_identity(identity) - actual = get_tuf_root("namespace", "repo") + actual = get_tuf_root(Mock(), "namespace", "repo") assert actual == expected, "should be %s, but was %s" % (expected, actual) + + +@pytest.mark.parametrize('trust_enabled,tuf_root', [ + (True, QUAY_TUF_ROOT), + (False, DISABLED_TUF_ROOT), +]) +def test_trust_disabled(trust_enabled,tuf_root): + app, principal = app_with_principal() + with app.test_request_context('/'): + principal.set_identity(read_identity("namespace", "repo")) + actual = get_tuf_root(Mock(trust_enabled=trust_enabled), "namespace", "repo") + assert actual == tuf_root, "should be %s, but was %s" % (tuf_root, actual) diff --git a/endpoints/v2/v2auth.py b/endpoints/v2/v2auth.py index 12e7863a8..0d9e8ffb0 100644 --- a/endpoints/v2/v2auth.py +++ b/endpoints/v2/v2auth.py @@ -4,6 +4,7 @@ import re from cachetools import lru_cache from flask import request, jsonify, abort +import features from app import app, userevents, instance_keys from auth.auth_context import get_authenticated_user, get_validated_token, get_validated_oauth_token from auth.decorators import process_basic_auth @@ -15,7 +16,8 @@ from endpoints.v2.errors import InvalidLogin, NameInvalid, InvalidRequest, Unsup from data.interfaces.v2 import pre_oci_model as model from util.cache import no_cache from util.names import parse_namespace_repository, REPOSITORY_NAME_REGEX -from util.security.registry_jwt import generate_bearer_token, build_context_and_subject, QUAY_TUF_ROOT, SIGNER_TUF_ROOT +from util.security.registry_jwt import (generate_bearer_token, build_context_and_subject, QUAY_TUF_ROOT, + SIGNER_TUF_ROOT, DISABLED_TUF_ROOT) logger = logging.getLogger(__name__) @@ -64,7 +66,7 @@ def generate_registry_jwt(auth_result): user_event_data = { 'action': 'login', } - tuf_root = QUAY_TUF_ROOT + tuf_root = DISABLED_TUF_ROOT if len(scope_param) > 0: match = get_scope_regex().match(scope_param) @@ -164,8 +166,7 @@ def generate_registry_jwt(auth_result): 'repository': reponame, 'namespace': namespace, } - - tuf_root = get_tuf_root(namespace, reponame) + tuf_root = get_tuf_root(repo, namespace, reponame) elif user is None and token is None: # In this case, we are doing an auth flow, and it's not an anonymous pull @@ -184,7 +185,10 @@ def generate_registry_jwt(auth_result): return jsonify({'token': token}) -def get_tuf_root(namespace, reponame): +def get_tuf_root(repo, namespace, reponame): + if not features.SIGNING or repo is None or not repo.trust_enabled: + return DISABLED_TUF_ROOT + # Users with write access to a repo will see signer-rooted TUF metadata if ModifyRepositoryPermission(namespace, reponame).can(): return SIGNER_TUF_ROOT diff --git a/initdb.py b/initdb.py index 855ee11b3..efcb99da8 100644 --- a/initdb.py +++ b/initdb.py @@ -296,6 +296,7 @@ def initialize_database(): LogEntryKind.create(name='change_repo_permission') LogEntryKind.create(name='delete_repo_permission') LogEntryKind.create(name='change_repo_visibility') + LogEntryKind.create(name='change_repo_trust') LogEntryKind.create(name='add_repo_accesstoken') LogEntryKind.create(name='delete_repo_accesstoken') LogEntryKind.create(name='set_repo_description') diff --git a/static/js/directives/ui/logs-view.js b/static/js/directives/ui/logs-view.js index 7bdf43b97..d1054b026 100644 --- a/static/js/directives/ui/logs-view.js +++ b/static/js/directives/ui/logs-view.js @@ -136,6 +136,13 @@ angular.module('quay').directive('logsView', function () { 'create_tag': 'Tag {tag} created in repository {namespace}/{repo} on image {image} by user {username}', 'move_tag': 'Tag {tag} moved from image {original_image} to image {image} in repository {namespace}/{repo} by user {username}', 'change_repo_visibility': 'Change visibility for repository {namespace}/{repo} to {visibility}', + 'change_repo_trust': function(metadata) { + if (metadata.trust_enabled) { + return 'Trust enabled for {namespace}/{repo}'; + } else { + return 'Trust disabled for {namespace}/{repo}'; + } + }, 'add_repo_accesstoken': 'Create access token {token} in repository {repo}', 'delete_repo_accesstoken': 'Delete access token {token} in repository {repo}', 'set_repo_description': 'Change description for repository {namespace}/{repo}', @@ -265,6 +272,7 @@ angular.module('quay').directive('logsView', function () { 'change_repo_permission': 'Change repository permission', 'delete_repo_permission': 'Remove user permission from repository', 'change_repo_visibility': 'Change repository visibility', + 'change_repo_trust': 'Change repository trust settings', 'add_repo_accesstoken': 'Create access token', 'delete_repo_accesstoken': 'Delete access token', 'set_repo_description': 'Change repository description', diff --git a/test/data/test.db b/test/data/test.db index abfe7ef0799d3b7992cdc5ccb048c56209bff8f5..c8f6dc9128d18f8caf1c95ac1d725d90af85244f 100644 GIT binary patch delta 74639 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 AegFUf delta 69250 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𝔲z2{XcZqH)|fd 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 PXMbFu*O&L*v)A7N`gj%< diff --git a/util/security/registry_jwt.py b/util/security/registry_jwt.py index 373e990a7..e6d39d656 100644 --- a/util/security/registry_jwt.py +++ b/util/security/registry_jwt.py @@ -11,6 +11,7 @@ ALGORITHM = 'RS256' CLAIM_TUF_ROOT = 'com.apostille.root' QUAY_TUF_ROOT = 'quay' SIGNER_TUF_ROOT = 'signer' +DISABLED_TUF_ROOT = '$disabled' # The number of allowed seconds of clock skew for a JWT. The iat, nbf and exp are adjusted with this # count.