Extract app from torrent handling code
Fixes https://jira.coreos.com/browse/QUAY-969
This commit is contained in:
parent
c92c0ca5e1
commit
0fdefd78e9
7 changed files with 63 additions and 53 deletions
|
@ -7,7 +7,8 @@ import subprocess
|
|||
|
||||
from flask import abort
|
||||
|
||||
from app import app, config_provider, superusers, OVERRIDE_CONFIG_DIRECTORY, ip_resolver
|
||||
from app import (app, config_provider, superusers, OVERRIDE_CONFIG_DIRECTORY, ip_resolver,
|
||||
instance_keys)
|
||||
from auth.permissions import SuperUserPermission
|
||||
from auth.auth_context import get_authenticated_user
|
||||
from data.database import configure
|
||||
|
@ -15,12 +16,12 @@ from data.runmigration import run_alembic_migration
|
|||
from data.users import get_federated_service_name, get_users_handler
|
||||
from endpoints.api.suconfig_models_pre_oci import pre_oci_model as model
|
||||
from endpoints.api import (ApiResource, nickname, resource, internal_only, show_if,
|
||||
require_fresh_login, request, validate_json_request, verify_not_prod,
|
||||
InvalidRequest)
|
||||
require_fresh_login, request, validate_json_request, verify_not_prod)
|
||||
from endpoints.common import common_login
|
||||
from util.config.configutil import add_enterprise_config_defaults
|
||||
from util.config.database import sync_database_with_config
|
||||
from util.config.validator import validate_service_for_config, is_valid_config_upload_filename, ValidatorContext
|
||||
from util.config.validator import (validate_service_for_config, is_valid_config_upload_filename,
|
||||
ValidatorContext)
|
||||
|
||||
import features
|
||||
|
||||
|
@ -405,7 +406,9 @@ class SuperUserConfigValidate(ApiResource):
|
|||
# this is also safe since this method does not access any information not given in the request.
|
||||
if not config_provider.config_exists() or SuperUserPermission().can():
|
||||
config = request.get_json()['config']
|
||||
validator_context = ValidatorContext.from_app(app, config, request.get_json().get('password', ''),
|
||||
validator_context = ValidatorContext.from_app(app, config,
|
||||
request.get_json().get('password', ''),
|
||||
instance_keys=instance_keys,
|
||||
ip_resolver=ip_resolver,
|
||||
config_provider=config_provider)
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ from flask import redirect, Blueprint, abort, send_file, make_response, request
|
|||
|
||||
import features
|
||||
|
||||
from app import app, signer, storage, metric_queue, config_provider, ip_resolver
|
||||
from app import app, signer, storage, metric_queue, config_provider, ip_resolver, instance_keys
|
||||
from auth.auth_context import get_authenticated_user
|
||||
from auth.decorators import process_auth
|
||||
from auth.permissions import ReadRepositoryPermission
|
||||
|
@ -22,8 +22,8 @@ from util.registry.filelike import wrap_with_handler
|
|||
from util.registry.queuefile import QueueFile
|
||||
from util.registry.queueprocess import QueueProcess
|
||||
from util.registry.tarlayerformat import TarLayerFormatterReporter
|
||||
from util.registry.torrent import (
|
||||
make_torrent, per_user_torrent_filename, public_torrent_filename, PieceHasher)
|
||||
from util.registry.torrent import (make_torrent, per_user_torrent_filename, public_torrent_filename,
|
||||
PieceHasher, TorrentConfiguration)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -137,6 +137,9 @@ def _torrent_for_blob(blob, is_public):
|
|||
# We cannot support webseeds for storages that cannot provide direct downloads.
|
||||
exact_abort(501, 'Storage engine does not support seeding.')
|
||||
|
||||
# Load the config for building torrents.
|
||||
torrent_config = TorrentConfiguration.from_app_config(instance_keys, app.config)
|
||||
|
||||
# Build the filename for the torrent.
|
||||
if is_public:
|
||||
name = public_torrent_filename(blob.uuid)
|
||||
|
@ -145,10 +148,10 @@ def _torrent_for_blob(blob, is_public):
|
|||
if not user:
|
||||
abort(403)
|
||||
|
||||
name = per_user_torrent_filename(user.uuid, blob.uuid)
|
||||
name = per_user_torrent_filename(torrent_config, user.uuid, blob.uuid)
|
||||
|
||||
# Return the torrent file.
|
||||
torrent_file = make_torrent(name, webseed, blob.size, torrent_info.piece_length,
|
||||
torrent_file = make_torrent(torrent_config, name, webseed, blob.size, torrent_info.piece_length,
|
||||
torrent_info.pieces)
|
||||
|
||||
headers = {
|
||||
|
|
Reference in a new issue