pulp-container 2.29.1__tar.gz → 2.29.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pulp_container-2.29.1 → pulp_container-2.29.2}/CHANGES.md +8 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/PKG-INFO +3 -3
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/__init__.py +1 -1
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/cache.py +2 -2
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/downloaders.py +26 -14
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/models.py +3 -4
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container.egg-info/PKG-INFO +3 -3
- pulp_container-2.29.2/pulp_container.egg-info/requires.txt +4 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pyproject.toml +4 -4
- pulp_container-2.29.1/pulp_container.egg-info/requires.txt +0 -4
- {pulp_container-2.29.1 → pulp_container-2.29.2}/COMMITMENT +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/COPYRIGHT +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/LICENSE +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/MANIFEST.in +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/README.rst +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/functest_requirements.txt +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/access_policy.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/authorization.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/checks.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/content.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/dynaconf_hooks.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/exceptions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/fields.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/global_access_conditions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/json_schemas.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/management/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/management/commands/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/management/commands/container-handle-image-data.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/management/commands/container-repair-media-type.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/management/commands/container-repair-pull-through-distributions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0001_initial.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0001_squashed_0032_upload_artifact.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0002_containerrepository.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0003_oci_mediatype.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0004_upload.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0005_contentredirectcontentguard.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0006_containerpushrepository.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0007_clear_tags_artifacts_refs.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0008_include_exclude_tags.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0009_container_namespace.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0010_remove_uploadchunk.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0011_add_container_repository_permissions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0012_add_container_namespace_permissions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0013_add_pull_push_permissions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0014_containerdistribution_private.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0015_manage_tags_push_repo.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0016_add_delete_versions_permission.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0017_add_granular_perms.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0018_containerdistribution_description.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0019_DATA_distribution_model_swap.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0020_update_push_repo_perms.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0021_data_move_redirect_content_guard_to_core.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0022_delete_contentredirectcontentguard.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0023_manifestsignature.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0024_containerremote_sigstore.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0025_signature_stored_in_textfield.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0026_manifest_signing_service.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0027_data_translate_perms_to_roles.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0028_add_role_manage_permissions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0029_remove_blob_media_type.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0030_enforce_tagged_manifest_reference.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0031_replace_charf_with_textf.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0032_upload_artifact.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0033_raise_warning_for_repair.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0034_translate_signed_schema.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0035_alter_blob_content_ptr_and_more.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0036_containerpushrepository_pending_blobs_manifests.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0037_create_pull_through_cache_models.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0038_add_manifest_metadata_fields.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0039_manifest_data.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0040_add_remote_repo_filter.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0041_add_pull_through_pull_permissions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0042_add_manifest_nature_field.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0043_add_os_arch_image_size_manifest_fields.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0044_add_domain.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0045_alter_manifest_compressed_image_size.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0046_alter_manifest_listed_manifests.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0047_containernamespace_pulp_labels.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0048_containerremote_includes_excludes.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0049_manifestsignature_fingerprint.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0050_alter_containernamespace_options.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/modelresource.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/pull_through.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/redirects.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/registry.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/registry_api.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/replica.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/serializers.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/settings.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/builder.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/download_image_data.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/migrate_push_repository.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/recursive_add.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/recursive_remove.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/sign.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/sync_stages.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/synchronize.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/tag.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/untag.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/token_verification.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/urls.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/utils.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/viewsets.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/webserver_snippets/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/webserver_snippets/apache.conf +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/webserver_snippets/nginx.conf +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/constants.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_build_images.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_cancel_blob_upload.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_content_cache.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_crud_distributions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_crud_remotes.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_delete_blob.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_delete_manifest.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_domains.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_flatpak.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_migrate_push_repository.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_pull_content.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_pull_through_cache.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_pulpimportexport.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_push_content.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_push_signatures.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_rbac_push_repositories.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_rbac_remotes.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_rbac_repo_content.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_rbac_repo_versions.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_rbac_sync_repositories.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_recursive_add.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_recursive_remove.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_remote_filter_pull_through.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_repositories_list.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_sign_manifests.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_sync.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_sync_signatures.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_tagging_images.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_token_authentication.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/conftest.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/constants.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/utils.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/__init__.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/fixtures/ryuk_0.13.0_manifest_list.json +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_json_schemas.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_models.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_pull_through_repair.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_serializers.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_sync_stages.py +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container.egg-info/SOURCES.txt +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container.egg-info/dependency_links.txt +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container.egg-info/entry_points.txt +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container.egg-info/top_level.txt +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/setup.cfg +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/test_requirements.txt +0 -0
- {pulp_container-2.29.1 → pulp_container-2.29.2}/unittest_requirements.txt +0 -0
|
@@ -8,6 +8,14 @@
|
|
|
8
8
|
|
|
9
9
|
[//]: # (towncrier release notes start)
|
|
10
10
|
|
|
11
|
+
## 2.29.2 (2026-10-08) {: #2.29.2 }
|
|
12
|
+
|
|
13
|
+
#### Bugfixes {: #2.29.2-bugfix }
|
|
14
|
+
|
|
15
|
+
- Fixed global auth token leakage. CVE-2026-103868
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
11
19
|
## 2.29.1 (2026-09-23) {: #2.29.1 }
|
|
12
20
|
|
|
13
21
|
#### Bugfixes {: #2.29.1-bugfix }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulp-container
|
|
3
|
-
Version: 2.29.
|
|
3
|
+
Version: 2.29.2
|
|
4
4
|
Summary: Container plugin for the Pulp Project
|
|
5
5
|
Author-email: Pulp Team <pulp-list@redhat.com>
|
|
6
6
|
Project-URL: Homepage, https://pulpproject.org
|
|
@@ -18,7 +18,7 @@ Requires-Python: >=3.11
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: jsonschema<4.27,>=4.4
|
|
21
|
-
Requires-Dist: pulpcore<3.130,>=3.
|
|
22
|
-
Requires-Dist: pyjwt[crypto]<2.
|
|
21
|
+
Requires-Dist: pulpcore<3.130,>=3.118.0
|
|
22
|
+
Requires-Dist: pyjwt[crypto]<2.16,>=2.4
|
|
23
23
|
Requires-Dist: pysequoia<0.2.0,>=0.1.35
|
|
24
24
|
Dynamic: license-file
|
|
@@ -40,9 +40,9 @@ class RegistryContentCache(RegistryCache, AsyncContentCache):
|
|
|
40
40
|
key = ":".join(all_keys[k] for k in self.keys)
|
|
41
41
|
return key
|
|
42
42
|
|
|
43
|
-
async def make_response(self, key, base_key):
|
|
43
|
+
async def make_response(self, key, base_key, *args, **kwargs):
|
|
44
44
|
"""Fix the Content-Type header to remove the charset."""
|
|
45
|
-
response = await super().make_response(key, base_key)
|
|
45
|
+
response = await super().make_response(key, base_key, *args, **kwargs)
|
|
46
46
|
if response is not None:
|
|
47
47
|
if content_type := response.headers.get("Content-Type"):
|
|
48
48
|
response.headers["Content-Type"] = content_type.split(";")[0]
|
|
@@ -25,15 +25,12 @@ class RegistryAuthHttpDownloader(HttpDownloader):
|
|
|
25
25
|
Additionally, use custom headers from DeclarativeArtifact.extra_data['headers']
|
|
26
26
|
"""
|
|
27
27
|
|
|
28
|
-
registry_auth = {"bearer": None, "basic": None}
|
|
29
|
-
token_lock = asyncio.Lock()
|
|
30
|
-
|
|
31
28
|
def __init__(self, *args, **kwargs):
|
|
32
29
|
"""
|
|
33
30
|
Initialize the downloader.
|
|
34
31
|
"""
|
|
35
32
|
self.remote = kwargs.pop("remote")
|
|
36
|
-
|
|
33
|
+
self.factory = kwargs.pop("factory")
|
|
37
34
|
super().__init__(*args, **kwargs)
|
|
38
35
|
|
|
39
36
|
async def _run(self, handle_401=True, extra_data=None):
|
|
@@ -57,8 +54,8 @@ class RegistryAuthHttpDownloader(HttpDownloader):
|
|
|
57
54
|
headers = extra_data.get("headers", headers)
|
|
58
55
|
repo_name = extra_data.get("repo_name", None)
|
|
59
56
|
http_method = extra_data.get("http_method", "get") if extra_data is not None else "get"
|
|
60
|
-
this_token = self.registry_auth["bearer"]
|
|
61
|
-
basic_auth = self.registry_auth["basic"]
|
|
57
|
+
this_token = self.factory.registry_auth["bearer"]
|
|
58
|
+
basic_auth = self.factory.registry_auth["basic"]
|
|
62
59
|
auth_headers = self.auth_header(this_token, basic_auth)
|
|
63
60
|
headers.update(auth_headers)
|
|
64
61
|
# aiohttps does not allow to send auth argument and auth header together
|
|
@@ -81,16 +78,16 @@ class RegistryAuthHttpDownloader(HttpDownloader):
|
|
|
81
78
|
if "bearer" in response_auth_header.lower():
|
|
82
79
|
# Token has not been updated during request
|
|
83
80
|
if (
|
|
84
|
-
self.registry_auth["bearer"] is None
|
|
85
|
-
or self.registry_auth["bearer"] == this_token
|
|
81
|
+
self.factory.registry_auth["bearer"] is None
|
|
82
|
+
or self.factory.registry_auth["bearer"] == this_token
|
|
86
83
|
):
|
|
87
|
-
self.registry_auth["bearer"] = None
|
|
84
|
+
self.factory.registry_auth["bearer"] = None
|
|
88
85
|
await self.update_token(response_auth_header, this_token, repo_name)
|
|
89
86
|
return await self._run(handle_401=False, extra_data=extra_data)
|
|
90
87
|
elif "basic" in response_auth_header.lower():
|
|
91
88
|
if self.remote.username:
|
|
92
89
|
basic = aiohttp.BasicAuth(self.remote.username, self.remote.password)
|
|
93
|
-
self.registry_auth["basic"] = basic.encode()
|
|
90
|
+
self.factory.registry_auth["basic"] = basic.encode()
|
|
94
91
|
return await self._run(handle_401=False, extra_data=extra_data)
|
|
95
92
|
else:
|
|
96
93
|
raise
|
|
@@ -111,10 +108,10 @@ class RegistryAuthHttpDownloader(HttpDownloader):
|
|
|
111
108
|
"""
|
|
112
109
|
Update the Bearer token to be used with all requests.
|
|
113
110
|
"""
|
|
114
|
-
async with self.token_lock:
|
|
111
|
+
async with self.factory.token_lock:
|
|
115
112
|
if (
|
|
116
|
-
self.registry_auth["bearer"] is not None
|
|
117
|
-
and self.registry_auth["bearer"] == used_token
|
|
113
|
+
self.factory.registry_auth["bearer"] is not None
|
|
114
|
+
and self.factory.registry_auth["bearer"] == used_token
|
|
118
115
|
):
|
|
119
116
|
return
|
|
120
117
|
log.info("Updating bearer token")
|
|
@@ -157,7 +154,7 @@ class RegistryAuthHttpDownloader(HttpDownloader):
|
|
|
157
154
|
|
|
158
155
|
token_js = json.loads(token_data)
|
|
159
156
|
token = token_js.get("token") or token_js.get("access_token")
|
|
160
|
-
self.registry_auth["bearer"] = token
|
|
157
|
+
self.factory.registry_auth["bearer"] = token
|
|
161
158
|
|
|
162
159
|
@staticmethod
|
|
163
160
|
def auth_header(token, basic_auth):
|
|
@@ -187,6 +184,21 @@ class RegistryAuthHttpDownloader(HttpDownloader):
|
|
|
187
184
|
)
|
|
188
185
|
|
|
189
186
|
|
|
187
|
+
class RegistryAuthDownloaderFactory(DownloaderFactory):
|
|
188
|
+
"""
|
|
189
|
+
A downloader factory for registry access that can also share the authentication tokens.
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
def __init__(self, *args, **kwargs):
|
|
193
|
+
super().__init__(*args, **kwargs)
|
|
194
|
+
self.registry_auth = {"bearer": None, "basic": None}
|
|
195
|
+
self.token_lock = asyncio.Lock()
|
|
196
|
+
|
|
197
|
+
def _http_or_https(self, download_class, url, **kwargs):
|
|
198
|
+
kwargs.setdefault("factory", self)
|
|
199
|
+
return super()._http_or_https(download_class, url, **kwargs)
|
|
200
|
+
|
|
201
|
+
|
|
190
202
|
class NoAuthSignatureDownloader(HttpDownloader):
|
|
191
203
|
"""A downloader class suited for signature downloads."""
|
|
192
204
|
|
|
@@ -13,7 +13,6 @@ from django.shortcuts import redirect
|
|
|
13
13
|
from django_lifecycle import AFTER_CREATE, AFTER_DELETE, AFTER_UPDATE, hook
|
|
14
14
|
|
|
15
15
|
from pulpcore.plugin.cache import SyncContentCache
|
|
16
|
-
from pulpcore.plugin.download import DownloaderFactory
|
|
17
16
|
from pulpcore.plugin.models import (
|
|
18
17
|
Artifact,
|
|
19
18
|
AutoAddObjPermsMixin,
|
|
@@ -510,17 +509,17 @@ class ContainerRemote(Remote, AutoAddObjPermsMixin):
|
|
|
510
509
|
"""
|
|
511
510
|
Downloader Factory that maps to custom downloaders which support registry auth.
|
|
512
511
|
|
|
513
|
-
Upon first access, the
|
|
512
|
+
Upon first access, the RegistryAuthDownloaderFactory is instantiated and saved internally.
|
|
514
513
|
|
|
515
514
|
Returns:
|
|
516
|
-
DownloadFactory: The instantiated
|
|
515
|
+
DownloadFactory: The instantiated RegistryAuthDownloaderFactory to be used by
|
|
517
516
|
get_downloader()
|
|
518
517
|
|
|
519
518
|
"""
|
|
520
519
|
try:
|
|
521
520
|
return self._download_factory
|
|
522
521
|
except AttributeError:
|
|
523
|
-
self._download_factory =
|
|
522
|
+
self._download_factory = downloaders.RegistryAuthDownloaderFactory(
|
|
524
523
|
self,
|
|
525
524
|
downloader_overrides={
|
|
526
525
|
"http": downloaders.RegistryAuthHttpDownloader,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pulp-container
|
|
3
|
-
Version: 2.29.
|
|
3
|
+
Version: 2.29.2
|
|
4
4
|
Summary: Container plugin for the Pulp Project
|
|
5
5
|
Author-email: Pulp Team <pulp-list@redhat.com>
|
|
6
6
|
Project-URL: Homepage, https://pulpproject.org
|
|
@@ -18,7 +18,7 @@ Requires-Python: >=3.11
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: jsonschema<4.27,>=4.4
|
|
21
|
-
Requires-Dist: pulpcore<3.130,>=3.
|
|
22
|
-
Requires-Dist: pyjwt[crypto]<2.
|
|
21
|
+
Requires-Dist: pulpcore<3.130,>=3.118.0
|
|
22
|
+
Requires-Dist: pyjwt[crypto]<2.16,>=2.4
|
|
23
23
|
Requires-Dist: pysequoia<0.2.0,>=0.1.35
|
|
24
24
|
Dynamic: license-file
|
|
@@ -7,7 +7,7 @@ build-backend = 'setuptools.build_meta'
|
|
|
7
7
|
|
|
8
8
|
[project]
|
|
9
9
|
name = "pulp-container"
|
|
10
|
-
version = "2.29.
|
|
10
|
+
version = "2.29.2"
|
|
11
11
|
description = "Container plugin for the Pulp Project"
|
|
12
12
|
readme = "README.md"
|
|
13
13
|
authors = [
|
|
@@ -24,8 +24,8 @@ classifiers=[
|
|
|
24
24
|
requires-python = ">=3.11"
|
|
25
25
|
dependencies = [
|
|
26
26
|
"jsonschema>=4.4,<4.27",
|
|
27
|
-
"pulpcore>=3.
|
|
28
|
-
"pyjwt[crypto]>=2.4,<2.
|
|
27
|
+
"pulpcore>=3.118.0,<3.130",
|
|
28
|
+
"pyjwt[crypto]>=2.4,<2.16",
|
|
29
29
|
"pysequoia>=0.1.35,<0.2.0"
|
|
30
30
|
]
|
|
31
31
|
|
|
@@ -89,7 +89,7 @@ ignore = [
|
|
|
89
89
|
[tool.bumpversion]
|
|
90
90
|
# This section is managed by the plugin template. Do not edit manually.
|
|
91
91
|
|
|
92
|
-
current_version = "2.29.
|
|
92
|
+
current_version = "2.29.2"
|
|
93
93
|
commit = false
|
|
94
94
|
tag = false
|
|
95
95
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<alpha>0a)?(?P<patch>\\d+)(\\.(?P<release>[a-z]+))?"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/global_access_conditions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/management/commands/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0001_initial.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0003_oci_mediatype.py
RENAMED
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0004_upload.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0039_manifest_data.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/migrations/0044_add_domain.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/download_image_data.py
RENAMED
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/migrate_push_repository.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/tasks/recursive_remove.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/webserver_snippets/__init__.py
RENAMED
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/webserver_snippets/apache.conf
RENAMED
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/app/webserver_snippets/nginx.conf
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_domains.py
RENAMED
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_flatpak.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/api/test_sync.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/functional/constants.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_json_schemas.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_serializers.py
RENAMED
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container/tests/unit/test_sync_stages.py
RENAMED
|
File without changes
|
|
File without changes
|
{pulp_container-2.29.1 → pulp_container-2.29.2}/pulp_container.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|