google-auth 2.55.2__tar.gz → 2.56.0__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.
- {google_auth-2.55.2/google_auth.egg-info → google_auth-2.56.0}/PKG-INFO +21 -15
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/transport/mtls.py +1 -5
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/environment_vars.py +3 -0
- google_auth-2.56.0/google/auth/transport/mtls.py +306 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/requests.py +1 -5
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/urllib3.py +1 -5
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/version.py +1 -1
- {google_auth-2.55.2 → google_auth-2.56.0/google_auth.egg-info}/PKG-INFO +21 -15
- {google_auth-2.55.2 → google_auth-2.56.0}/google_auth.egg-info/SOURCES.txt +1 -0
- google_auth-2.56.0/google_auth.egg-info/requires.txt +87 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/setup.py +13 -6
- google_auth-2.56.0/tests/transport/aio/conftest.py +17 -0
- google_auth-2.55.2/tests/transport/aio/conftest.py → google_auth-2.56.0/tests/transport/aioresponses_compat.py +30 -10
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test__mtls_helper.py +97 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test_aio_mtls_helper.py +1 -1
- google_auth-2.56.0/tests/transport/test_mtls.py +478 -0
- google_auth-2.55.2/google/auth/transport/mtls.py +0 -142
- google_auth-2.55.2/google_auth.egg-info/requires.txt +0 -61
- google_auth-2.55.2/tests/transport/test_mtls.py +0 -175
- {google_auth-2.55.2 → google_auth-2.56.0}/LICENSE +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/MANIFEST.in +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/README.rst +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_agent_identity_utils.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_cache.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_cloud_sdk.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_credentials_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_credentials_base.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_default.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_default_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_exponential_backoff.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_helpers.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_jwt_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_oauth2client.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_refresh_worker.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_regional_access_boundary_utils.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/_service_account_info.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/_helpers.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/transport/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/transport/aiohttp.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aio/transport/sessions.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/api_key.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/app_engine.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/aws.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/compute_engine/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/compute_engine/_metadata.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/compute_engine/_mtls.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/compute_engine/credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/_cryptography_rsa.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/_helpers.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/_python_rsa.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/base.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/es.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/es256.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/crypt/rsa.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/downscoped.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/exceptions.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/external_account.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/external_account_authorized_user.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/iam.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/identity_pool.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/impersonated_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/jwt.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/metrics.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/pluggable.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/py.typed +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/_aiohttp_requests.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/_custom_tls_signer.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/_http_client.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/_mtls_helper.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/_requests_base.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/auth/transport/grpc.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/_client.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/_client_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/_credentials_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/_id_token_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/_reauth_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/_service_account_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/challenges.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/gdch_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/id_token.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/py.typed +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/reauth.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/service_account.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/sts.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/utils.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/webauthn_handler.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/webauthn_handler_factory.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google/oauth2/webauthn_types.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google_auth.egg-info/dependency_links.txt +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/google_auth.egg-info/top_level.txt +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/setup.cfg +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/aio/test__helpers.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/compute_engine/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/compute_engine/data/smbios_product_name +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/compute_engine/data/smbios_product_name_non_google +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/compute_engine/test__metadata.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/compute_engine/test__mtls.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/compute_engine/test_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/conftest.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/test__cryptography_rsa.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/test__python_rsa.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/test_crypt.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/test_es.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/test_es256.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/crypt/test_rsa.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/authorized_user.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/authorized_user_cloud_sdk.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/authorized_user_cloud_sdk_with_quota_project_id.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/authorized_user_with_rapt_token.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/client_secrets.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/context_aware_metadata.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/enterprise_cert_invalid.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/enterprise_cert_valid.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/enterprise_cert_valid_provider.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es256_privatekey.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es256_public_cert.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es256_publickey.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es256_service_account.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es384_privatekey.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es384_public_cert.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es384_publickey.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/es384_service_account.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/external_account_authorized_user.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/external_account_authorized_user_non_gdu.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/external_subject_token.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/external_subject_token.txt +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/gdch_service_account.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/impersonated_service_account_authorized_user_source.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/impersonated_service_account_external_account_authorized_user_source.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/impersonated_service_account_service_account_source.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/impersonated_service_account_with_quota_project.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/old_oauth_credentials_py3.pickle +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/other_cert.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/pem_from_pkcs12.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/privatekey.p12 +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/privatekey.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/privatekey.pub +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/public_cert.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/service_account.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/service_account_non_gdu.json +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/trust_chain_with_leaf.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/trust_chain_without_leaf.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/data/trust_chain_wrong_order.pem +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test__client.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_challenges.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_gdch_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_id_token.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_reauth.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_service_account.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_sts.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_utils.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_webauthn_handler.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_webauthn_handler_factory.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/oauth2/test_webauthn_types.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__cache.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__cloud_sdk.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__default.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__exponential_backoff.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__helpers.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__oauth2client.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__refresh_worker.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__regional_access_boundary_utils.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test__service_account_info.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_agent_identity_utils.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_api_key.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_app_engine.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_aws.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_credentials_async.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_downscoped.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_exceptions.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_external_account.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_external_account_authorized_user.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_iam.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_identity_pool.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_impersonated_credentials.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_jwt.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_metrics.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_packaging.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/test_pluggable.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/__init__.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/aio/test_aiohttp.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/aio/test_sessions.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/aio/test_sessions_mtls.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/compliance.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test__custom_tls_signer.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test__http_client.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test_grpc.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test_requests.py +0 -0
- {google_auth-2.55.2 → google_auth-2.56.0}/tests/transport/test_urllib3.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: google-auth
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.56.0
|
|
4
4
|
Summary: Google Authentication Library
|
|
5
5
|
Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-auth
|
|
6
6
|
Author: Google Cloud Platform
|
|
@@ -24,22 +24,27 @@ Classifier: Topic :: Internet :: WWW/HTTP
|
|
|
24
24
|
Requires-Python: >=3.10
|
|
25
25
|
License-File: LICENSE
|
|
26
26
|
Requires-Dist: pyasn1-modules>=0.2.1
|
|
27
|
-
Requires-Dist: cryptography>=38.0.3
|
|
27
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14"
|
|
28
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14"
|
|
28
29
|
Provides-Extra: cryptography
|
|
29
|
-
Requires-Dist: cryptography>=38.0.3; extra == "cryptography"
|
|
30
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14" and extra == "cryptography"
|
|
31
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14" and extra == "cryptography"
|
|
30
32
|
Provides-Extra: pyopenssl
|
|
31
|
-
Requires-Dist: cryptography>=38.0.3; extra == "pyopenssl"
|
|
33
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14" and extra == "pyopenssl"
|
|
34
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14" and extra == "pyopenssl"
|
|
32
35
|
Provides-Extra: aiohttp
|
|
33
|
-
Requires-Dist: aiohttp<4.0.0,>=3.8.0; extra == "aiohttp"
|
|
34
|
-
Requires-Dist:
|
|
36
|
+
Requires-Dist: aiohttp<4.0.0,>=3.8.0; python_version < "3.14" and extra == "aiohttp"
|
|
37
|
+
Requires-Dist: aiohttp<4.0.0,>=3.9.0; python_version >= "3.14" and extra == "aiohttp"
|
|
38
|
+
Requires-Dist: requests<3.0.0,>=2.30.0; extra == "aiohttp"
|
|
35
39
|
Provides-Extra: enterprise-cert
|
|
36
|
-
Requires-Dist: cryptography>=38.0.3; extra == "enterprise-cert"
|
|
40
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14" and extra == "enterprise-cert"
|
|
41
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14" and extra == "enterprise-cert"
|
|
37
42
|
Provides-Extra: pyjwt
|
|
38
43
|
Requires-Dist: pyjwt>=2.0; extra == "pyjwt"
|
|
39
44
|
Provides-Extra: reauth
|
|
40
45
|
Requires-Dist: pyu2f>=0.1.5; extra == "reauth"
|
|
41
46
|
Provides-Extra: requests
|
|
42
|
-
Requires-Dist: requests<3.0.0,>=2.
|
|
47
|
+
Requires-Dist: requests<3.0.0,>=2.30.0; extra == "requests"
|
|
43
48
|
Provides-Extra: testing
|
|
44
49
|
Requires-Dist: grpcio<2.0.0,>=1.59.0; python_version < "3.14" and extra == "testing"
|
|
45
50
|
Requires-Dist: grpcio<2.0.0,>=1.75.1; python_version >= "3.14" and extra == "testing"
|
|
@@ -51,17 +56,18 @@ Requires-Dist: pytest-cov; extra == "testing"
|
|
|
51
56
|
Requires-Dist: pytest-localserver; extra == "testing"
|
|
52
57
|
Requires-Dist: pyu2f>=0.1.5; extra == "testing"
|
|
53
58
|
Requires-Dist: responses; extra == "testing"
|
|
54
|
-
Requires-Dist: urllib3; extra == "testing"
|
|
55
|
-
Requires-Dist: packaging; extra == "testing"
|
|
56
|
-
Requires-Dist: aiohttp<4.0.0,>=3.8.0; extra == "testing"
|
|
57
|
-
Requires-Dist:
|
|
59
|
+
Requires-Dist: urllib3<3.0.0,>=1.26.15; extra == "testing"
|
|
60
|
+
Requires-Dist: packaging>=20.0; extra == "testing"
|
|
61
|
+
Requires-Dist: aiohttp<4.0.0,>=3.8.0; python_version < "3.14" and extra == "testing"
|
|
62
|
+
Requires-Dist: aiohttp<4.0.0,>=3.9.0; python_version >= "3.14" and extra == "testing"
|
|
63
|
+
Requires-Dist: requests<3.0.0,>=2.30.0; extra == "testing"
|
|
58
64
|
Requires-Dist: aioresponses; extra == "testing"
|
|
59
65
|
Requires-Dist: pytest-asyncio; extra == "testing"
|
|
60
66
|
Provides-Extra: urllib3
|
|
61
|
-
Requires-Dist: urllib3; extra == "urllib3"
|
|
62
|
-
Requires-Dist: packaging; extra == "urllib3"
|
|
67
|
+
Requires-Dist: urllib3<3.0.0,>=1.26.15; extra == "urllib3"
|
|
68
|
+
Requires-Dist: packaging>=20.0; extra == "urllib3"
|
|
63
69
|
Provides-Extra: rsa
|
|
64
|
-
Requires-Dist: rsa<5,>=
|
|
70
|
+
Requires-Dist: rsa<5,>=4.0.0; extra == "rsa"
|
|
65
71
|
Provides-Extra: grpc
|
|
66
72
|
Requires-Dist: grpcio<2.0.0,>=1.59.0; python_version < "3.14" and extra == "grpc"
|
|
67
73
|
Requires-Dist: grpcio<2.0.0,>=1.75.1; python_version >= "3.14" and extra == "grpc"
|
|
@@ -55,11 +55,7 @@ def make_client_cert_ssl_context(
|
|
|
55
55
|
):
|
|
56
56
|
context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
|
|
57
57
|
if cert_path:
|
|
58
|
-
password =
|
|
59
|
-
passphrase_val.decode("utf-8")
|
|
60
|
-
if isinstance(passphrase_val, bytes)
|
|
61
|
-
else passphrase_val
|
|
62
|
-
)
|
|
58
|
+
password = passphrase_val
|
|
63
59
|
context.load_cert_chain(
|
|
64
60
|
certfile=cert_path,
|
|
65
61
|
keyfile=key_path,
|
|
@@ -133,3 +133,6 @@ GOOGLE_API_PREVENT_AGENT_TOKEN_SHARING_FOR_GCP_SERVICES = (
|
|
|
133
133
|
"GOOGLE_API_PREVENT_AGENT_TOKEN_SHARING_FOR_GCP_SERVICES"
|
|
134
134
|
)
|
|
135
135
|
"""Environment variable to prevent agent token sharing for GCP services."""
|
|
136
|
+
|
|
137
|
+
GOOGLE_API_USE_MTLS_ENDPOINT = "GOOGLE_API_USE_MTLS_ENDPOINT"
|
|
138
|
+
"""Environment variable controlling whether to use mTLS endpoint or not."""
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
# Copyright 2020 Google LLC
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Utilites for mutual TLS."""
|
|
16
|
+
|
|
17
|
+
import enum
|
|
18
|
+
import logging
|
|
19
|
+
from os import getenv
|
|
20
|
+
import ssl
|
|
21
|
+
from typing import Optional
|
|
22
|
+
|
|
23
|
+
from google.auth import environment_vars
|
|
24
|
+
from google.auth import exceptions
|
|
25
|
+
from google.auth.transport import _mtls_helper
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
_LOGGER = logging.getLogger(__name__)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class UseMtlsEndpointMode(enum.Enum):
|
|
32
|
+
ALWAYS = "always"
|
|
33
|
+
NEVER = "never"
|
|
34
|
+
AUTO = "auto"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def has_default_client_cert_source(include_context_aware=True):
|
|
38
|
+
"""Check if default client SSL credentials exists on the device.
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
include_context_aware (bool): include_context_aware indicates if context_aware
|
|
42
|
+
path location will be checked or should it be skipped.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
bool: indicating if the default client cert source exists.
|
|
46
|
+
"""
|
|
47
|
+
if (
|
|
48
|
+
include_context_aware
|
|
49
|
+
and _mtls_helper._check_config_path(_mtls_helper.CONTEXT_AWARE_METADATA_PATH)
|
|
50
|
+
is not None
|
|
51
|
+
):
|
|
52
|
+
return True
|
|
53
|
+
if (
|
|
54
|
+
_mtls_helper._check_config_path(
|
|
55
|
+
_mtls_helper.CERTIFICATE_CONFIGURATION_DEFAULT_PATH
|
|
56
|
+
)
|
|
57
|
+
is not None
|
|
58
|
+
):
|
|
59
|
+
return True
|
|
60
|
+
cert_config_path = getenv("GOOGLE_API_CERTIFICATE_CONFIG")
|
|
61
|
+
if (
|
|
62
|
+
cert_config_path
|
|
63
|
+
and _mtls_helper._check_config_path(cert_config_path) is not None
|
|
64
|
+
):
|
|
65
|
+
return True
|
|
66
|
+
return False
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def default_client_cert_source():
|
|
70
|
+
"""Get a callback which returns the default client SSL credentials.
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
Callable[[], [bytes, bytes]]: A callback which returns the default
|
|
74
|
+
client certificate bytes and private key bytes, both in PEM format.
|
|
75
|
+
|
|
76
|
+
Raises:
|
|
77
|
+
google.auth.exceptions.MutualTLSChannelError: If the default
|
|
78
|
+
client SSL credentials don't exist or are malformed.
|
|
79
|
+
"""
|
|
80
|
+
if not has_default_client_cert_source(include_context_aware=True):
|
|
81
|
+
raise exceptions.MutualTLSChannelError(
|
|
82
|
+
"Default client cert source doesn't exist"
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
def callback():
|
|
86
|
+
try:
|
|
87
|
+
_, cert_bytes, key_bytes = _mtls_helper.get_client_cert_and_key()
|
|
88
|
+
except (OSError, RuntimeError, ValueError) as caught_exc:
|
|
89
|
+
new_exc = exceptions.MutualTLSChannelError(caught_exc)
|
|
90
|
+
raise new_exc from caught_exc
|
|
91
|
+
|
|
92
|
+
return cert_bytes, key_bytes
|
|
93
|
+
|
|
94
|
+
return callback
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def default_client_encrypted_cert_source(cert_path, key_path):
|
|
98
|
+
"""Get a callback which returns the default encrpyted client SSL credentials.
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
cert_path (str): The cert file path. The default client certificate will
|
|
102
|
+
be written to this file when the returned callback is called.
|
|
103
|
+
key_path (str): The key file path. The default encrypted client key will
|
|
104
|
+
be written to this file when the returned callback is called.
|
|
105
|
+
|
|
106
|
+
Returns:
|
|
107
|
+
Callable[[], [str, str, bytes]]: A callback which generates the default
|
|
108
|
+
client certificate, encrpyted private key and passphrase. It writes
|
|
109
|
+
the certificate and private key into the cert_path and key_path, and
|
|
110
|
+
returns the cert_path, key_path and passphrase bytes.
|
|
111
|
+
|
|
112
|
+
Raises:
|
|
113
|
+
google.auth.exceptions.MutualTLSChannelError: If any problem
|
|
114
|
+
occurs when loading or saving the client certificate and key.
|
|
115
|
+
"""
|
|
116
|
+
if not has_default_client_cert_source(include_context_aware=True):
|
|
117
|
+
raise exceptions.MutualTLSChannelError(
|
|
118
|
+
"Default client encrypted cert source doesn't exist"
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
def callback():
|
|
122
|
+
try:
|
|
123
|
+
(
|
|
124
|
+
_,
|
|
125
|
+
cert_bytes,
|
|
126
|
+
key_bytes,
|
|
127
|
+
passphrase_bytes,
|
|
128
|
+
) = _mtls_helper.get_client_ssl_credentials(generate_encrypted_key=True)
|
|
129
|
+
with open(cert_path, "wb") as cert_file:
|
|
130
|
+
cert_file.write(cert_bytes)
|
|
131
|
+
with open(key_path, "wb") as key_file:
|
|
132
|
+
key_file.write(key_bytes)
|
|
133
|
+
except (exceptions.ClientCertError, OSError) as caught_exc:
|
|
134
|
+
new_exc = exceptions.MutualTLSChannelError(caught_exc)
|
|
135
|
+
raise new_exc from caught_exc
|
|
136
|
+
|
|
137
|
+
return cert_path, key_path, passphrase_bytes
|
|
138
|
+
|
|
139
|
+
return callback
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def should_use_client_cert():
|
|
143
|
+
"""Returns boolean for whether the client certificate should be used for mTLS.
|
|
144
|
+
|
|
145
|
+
This is a wrapper around _mtls_helper.check_use_client_cert().
|
|
146
|
+
If GOOGLE_API_USE_CLIENT_CERTIFICATE is set to true or false, a corresponding
|
|
147
|
+
bool value will be returned
|
|
148
|
+
If GOOGLE_API_USE_CLIENT_CERTIFICATE is unset, the value will be inferred by
|
|
149
|
+
reading a file pointed at by GOOGLE_API_CERTIFICATE_CONFIG, and verifying it
|
|
150
|
+
contains a "workload" section. If so, the function will return True,
|
|
151
|
+
otherwise False.
|
|
152
|
+
|
|
153
|
+
Returns:
|
|
154
|
+
bool: indicating whether the client certificate should be used for mTLS.
|
|
155
|
+
"""
|
|
156
|
+
return _mtls_helper.check_use_client_cert()
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def _load_client_cert_into_context(
|
|
160
|
+
ctx: ssl.SSLContext,
|
|
161
|
+
cert_bytes: bytes,
|
|
162
|
+
key_bytes: bytes,
|
|
163
|
+
passphrase: Optional[bytes] = None,
|
|
164
|
+
) -> None:
|
|
165
|
+
"""Load a client certificate and key into an SSL context.
|
|
166
|
+
|
|
167
|
+
Args:
|
|
168
|
+
ctx (ssl.SSLContext): The SSL context to load the certificate and key into.
|
|
169
|
+
cert_bytes (bytes): The client certificate bytes in PEM format.
|
|
170
|
+
key_bytes (bytes): The client private key bytes in PEM format.
|
|
171
|
+
passphrase (Optional[bytes]): The passphrase for the client private key.
|
|
172
|
+
|
|
173
|
+
Raises:
|
|
174
|
+
google.auth.exceptions.MutualTLSChannelError: If the SSL context is invalid,
|
|
175
|
+
or if loading the certificate and key fails.
|
|
176
|
+
"""
|
|
177
|
+
if not isinstance(ctx, ssl.SSLContext):
|
|
178
|
+
raise exceptions.MutualTLSChannelError(
|
|
179
|
+
"Failed to load client certificate and key for mTLS. The provided context "
|
|
180
|
+
"object is invalid or does not support loading certificate chains."
|
|
181
|
+
)
|
|
182
|
+
|
|
183
|
+
try:
|
|
184
|
+
with _mtls_helper.secure_cert_key_paths(
|
|
185
|
+
cert_bytes, key_bytes, passphrase=passphrase
|
|
186
|
+
) as (
|
|
187
|
+
cert_path,
|
|
188
|
+
key_path,
|
|
189
|
+
passphrase_val,
|
|
190
|
+
):
|
|
191
|
+
if cert_path is None or key_path is None:
|
|
192
|
+
raise exceptions.MutualTLSChannelError(
|
|
193
|
+
"Failed to generate temporary file paths for the client certificate and key."
|
|
194
|
+
)
|
|
195
|
+
ctx.load_cert_chain(
|
|
196
|
+
certfile=cert_path, keyfile=key_path, password=passphrase_val
|
|
197
|
+
)
|
|
198
|
+
except (
|
|
199
|
+
ssl.SSLError,
|
|
200
|
+
OSError,
|
|
201
|
+
ValueError,
|
|
202
|
+
RuntimeError,
|
|
203
|
+
TypeError,
|
|
204
|
+
) as caught_exc:
|
|
205
|
+
new_exc = exceptions.MutualTLSChannelError(caught_exc)
|
|
206
|
+
raise new_exc from caught_exc
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def load_default_client_cert(ctx: ssl.SSLContext) -> bool:
|
|
210
|
+
"""Load the default client certificate and key into an SSL context if configured.
|
|
211
|
+
|
|
212
|
+
If client certificates are enabled and a default client certificate source is
|
|
213
|
+
found, the certificate and key are loaded into the SSL context.
|
|
214
|
+
|
|
215
|
+
Args:
|
|
216
|
+
ctx (ssl.SSLContext): The SSL context to load the default client certificate
|
|
217
|
+
and key into.
|
|
218
|
+
|
|
219
|
+
Returns:
|
|
220
|
+
bool: True if client certificates are enabled and the default client
|
|
221
|
+
certificate was successfully loaded. False if client certificates
|
|
222
|
+
are disabled or if no default certificate source is configured.
|
|
223
|
+
|
|
224
|
+
Raises:
|
|
225
|
+
google.auth.exceptions.MutualTLSChannelError: If the default client certificate
|
|
226
|
+
or key is malformed.
|
|
227
|
+
"""
|
|
228
|
+
if not should_use_client_cert() or not has_default_client_cert_source():
|
|
229
|
+
return False
|
|
230
|
+
try:
|
|
231
|
+
(
|
|
232
|
+
has_cert,
|
|
233
|
+
cert_bytes,
|
|
234
|
+
key_bytes,
|
|
235
|
+
passphrase,
|
|
236
|
+
) = _mtls_helper.get_client_ssl_credentials()
|
|
237
|
+
except (
|
|
238
|
+
exceptions.ClientCertError,
|
|
239
|
+
OSError,
|
|
240
|
+
RuntimeError,
|
|
241
|
+
ValueError,
|
|
242
|
+
) as caught_exc:
|
|
243
|
+
new_exc = exceptions.MutualTLSChannelError(caught_exc)
|
|
244
|
+
raise new_exc from caught_exc
|
|
245
|
+
else:
|
|
246
|
+
if not has_cert:
|
|
247
|
+
return False
|
|
248
|
+
_load_client_cert_into_context(ctx, cert_bytes, key_bytes, passphrase)
|
|
249
|
+
return True
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def get_default_ssl_context() -> Optional[ssl.SSLContext]:
|
|
253
|
+
"""Get a default SSL context loaded with the default client certificate.
|
|
254
|
+
|
|
255
|
+
Returns:
|
|
256
|
+
ssl.SSLContext: An SSL context loaded with the default client
|
|
257
|
+
certificate, or None if client certificates are not configured
|
|
258
|
+
or available.
|
|
259
|
+
|
|
260
|
+
Raises:
|
|
261
|
+
google.auth.exceptions.MutualTLSChannelError: If the default client certificate
|
|
262
|
+
or key is malformed.
|
|
263
|
+
"""
|
|
264
|
+
if not should_use_client_cert() or not has_default_client_cert_source():
|
|
265
|
+
return None
|
|
266
|
+
|
|
267
|
+
ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
|
|
268
|
+
return ctx if load_default_client_cert(ctx) else None
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
def should_use_mtls_endpoint(
|
|
272
|
+
client_cert_available: Optional[bool] = None,
|
|
273
|
+
) -> bool:
|
|
274
|
+
"""Determine whether to use an mTLS endpoint.
|
|
275
|
+
|
|
276
|
+
This relies on the GOOGLE_API_USE_MTLS_ENDPOINT environment variable. If set to
|
|
277
|
+
"always", returns True. If set to "never", returns False. If set to "auto"
|
|
278
|
+
or unset, returns whether a client certificate is available.
|
|
279
|
+
|
|
280
|
+
Args:
|
|
281
|
+
client_cert_available (Optional[bool]): indicating if a client certificate
|
|
282
|
+
is available. If None, this is determined by checking if client
|
|
283
|
+
certificates are enabled using :func:`should_use_client_cert`.
|
|
284
|
+
|
|
285
|
+
Returns:
|
|
286
|
+
bool: indicating if an mTLS endpoint should be used.
|
|
287
|
+
"""
|
|
288
|
+
if client_cert_available is None:
|
|
289
|
+
client_cert_available = should_use_client_cert()
|
|
290
|
+
|
|
291
|
+
use_mtls_endpoint = getenv(environment_vars.GOOGLE_API_USE_MTLS_ENDPOINT)
|
|
292
|
+
use_mtls_endpoint = (use_mtls_endpoint or "auto").strip().lower()
|
|
293
|
+
try:
|
|
294
|
+
mode = UseMtlsEndpointMode(use_mtls_endpoint)
|
|
295
|
+
except ValueError:
|
|
296
|
+
raise exceptions.MutualTLSChannelError(
|
|
297
|
+
f"Unsupported {environment_vars.GOOGLE_API_USE_MTLS_ENDPOINT} value "
|
|
298
|
+
f"'{use_mtls_endpoint}'. Accepted values: never, auto, always."
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
if mode == UseMtlsEndpointMode.ALWAYS:
|
|
302
|
+
return True
|
|
303
|
+
if mode == UseMtlsEndpointMode.NEVER:
|
|
304
|
+
return False
|
|
305
|
+
if mode == UseMtlsEndpointMode.AUTO:
|
|
306
|
+
return client_cert_available
|
|
@@ -224,11 +224,7 @@ class _MutualTlsAdapter(requests.adapters.HTTPAdapter):
|
|
|
224
224
|
key_path,
|
|
225
225
|
passphrase,
|
|
226
226
|
):
|
|
227
|
-
password =
|
|
228
|
-
passphrase.decode("utf-8")
|
|
229
|
-
if isinstance(passphrase, bytes)
|
|
230
|
-
else passphrase
|
|
231
|
-
)
|
|
227
|
+
password = passphrase
|
|
232
228
|
ctx_poolmanager.load_cert_chain(
|
|
233
229
|
certfile=cert_path,
|
|
234
230
|
keyfile=key_path,
|
|
@@ -188,11 +188,7 @@ def _make_mutual_tls_http(cert, key):
|
|
|
188
188
|
key_path,
|
|
189
189
|
passphrase,
|
|
190
190
|
):
|
|
191
|
-
password =
|
|
192
|
-
passphrase.decode("utf-8")
|
|
193
|
-
if isinstance(passphrase, bytes)
|
|
194
|
-
else passphrase
|
|
195
|
-
)
|
|
191
|
+
password = passphrase
|
|
196
192
|
ctx.load_cert_chain(
|
|
197
193
|
certfile=cert_path,
|
|
198
194
|
keyfile=key_path,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: google-auth
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.56.0
|
|
4
4
|
Summary: Google Authentication Library
|
|
5
5
|
Home-page: https://github.com/googleapis/google-cloud-python/tree/main/packages/google-auth
|
|
6
6
|
Author: Google Cloud Platform
|
|
@@ -24,22 +24,27 @@ Classifier: Topic :: Internet :: WWW/HTTP
|
|
|
24
24
|
Requires-Python: >=3.10
|
|
25
25
|
License-File: LICENSE
|
|
26
26
|
Requires-Dist: pyasn1-modules>=0.2.1
|
|
27
|
-
Requires-Dist: cryptography>=38.0.3
|
|
27
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14"
|
|
28
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14"
|
|
28
29
|
Provides-Extra: cryptography
|
|
29
|
-
Requires-Dist: cryptography>=38.0.3; extra == "cryptography"
|
|
30
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14" and extra == "cryptography"
|
|
31
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14" and extra == "cryptography"
|
|
30
32
|
Provides-Extra: pyopenssl
|
|
31
|
-
Requires-Dist: cryptography>=38.0.3; extra == "pyopenssl"
|
|
33
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14" and extra == "pyopenssl"
|
|
34
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14" and extra == "pyopenssl"
|
|
32
35
|
Provides-Extra: aiohttp
|
|
33
|
-
Requires-Dist: aiohttp<4.0.0,>=3.8.0; extra == "aiohttp"
|
|
34
|
-
Requires-Dist:
|
|
36
|
+
Requires-Dist: aiohttp<4.0.0,>=3.8.0; python_version < "3.14" and extra == "aiohttp"
|
|
37
|
+
Requires-Dist: aiohttp<4.0.0,>=3.9.0; python_version >= "3.14" and extra == "aiohttp"
|
|
38
|
+
Requires-Dist: requests<3.0.0,>=2.30.0; extra == "aiohttp"
|
|
35
39
|
Provides-Extra: enterprise-cert
|
|
36
|
-
Requires-Dist: cryptography>=38.0.3; extra == "enterprise-cert"
|
|
40
|
+
Requires-Dist: cryptography>=38.0.3; python_version < "3.14" and extra == "enterprise-cert"
|
|
41
|
+
Requires-Dist: cryptography>=41.0.5; python_version >= "3.14" and extra == "enterprise-cert"
|
|
37
42
|
Provides-Extra: pyjwt
|
|
38
43
|
Requires-Dist: pyjwt>=2.0; extra == "pyjwt"
|
|
39
44
|
Provides-Extra: reauth
|
|
40
45
|
Requires-Dist: pyu2f>=0.1.5; extra == "reauth"
|
|
41
46
|
Provides-Extra: requests
|
|
42
|
-
Requires-Dist: requests<3.0.0,>=2.
|
|
47
|
+
Requires-Dist: requests<3.0.0,>=2.30.0; extra == "requests"
|
|
43
48
|
Provides-Extra: testing
|
|
44
49
|
Requires-Dist: grpcio<2.0.0,>=1.59.0; python_version < "3.14" and extra == "testing"
|
|
45
50
|
Requires-Dist: grpcio<2.0.0,>=1.75.1; python_version >= "3.14" and extra == "testing"
|
|
@@ -51,17 +56,18 @@ Requires-Dist: pytest-cov; extra == "testing"
|
|
|
51
56
|
Requires-Dist: pytest-localserver; extra == "testing"
|
|
52
57
|
Requires-Dist: pyu2f>=0.1.5; extra == "testing"
|
|
53
58
|
Requires-Dist: responses; extra == "testing"
|
|
54
|
-
Requires-Dist: urllib3; extra == "testing"
|
|
55
|
-
Requires-Dist: packaging; extra == "testing"
|
|
56
|
-
Requires-Dist: aiohttp<4.0.0,>=3.8.0; extra == "testing"
|
|
57
|
-
Requires-Dist:
|
|
59
|
+
Requires-Dist: urllib3<3.0.0,>=1.26.15; extra == "testing"
|
|
60
|
+
Requires-Dist: packaging>=20.0; extra == "testing"
|
|
61
|
+
Requires-Dist: aiohttp<4.0.0,>=3.8.0; python_version < "3.14" and extra == "testing"
|
|
62
|
+
Requires-Dist: aiohttp<4.0.0,>=3.9.0; python_version >= "3.14" and extra == "testing"
|
|
63
|
+
Requires-Dist: requests<3.0.0,>=2.30.0; extra == "testing"
|
|
58
64
|
Requires-Dist: aioresponses; extra == "testing"
|
|
59
65
|
Requires-Dist: pytest-asyncio; extra == "testing"
|
|
60
66
|
Provides-Extra: urllib3
|
|
61
|
-
Requires-Dist: urllib3; extra == "urllib3"
|
|
62
|
-
Requires-Dist: packaging; extra == "urllib3"
|
|
67
|
+
Requires-Dist: urllib3<3.0.0,>=1.26.15; extra == "urllib3"
|
|
68
|
+
Requires-Dist: packaging>=20.0; extra == "urllib3"
|
|
63
69
|
Provides-Extra: rsa
|
|
64
|
-
Requires-Dist: rsa<5,>=
|
|
70
|
+
Requires-Dist: rsa<5,>=4.0.0; extra == "rsa"
|
|
65
71
|
Provides-Extra: grpc
|
|
66
72
|
Requires-Dist: grpcio<2.0.0,>=1.59.0; python_version < "3.14" and extra == "grpc"
|
|
67
73
|
Requires-Dist: grpcio<2.0.0,>=1.75.1; python_version >= "3.14" and extra == "grpc"
|
|
@@ -181,6 +181,7 @@ tests/oauth2/test_webauthn_handler.py
|
|
|
181
181
|
tests/oauth2/test_webauthn_handler_factory.py
|
|
182
182
|
tests/oauth2/test_webauthn_types.py
|
|
183
183
|
tests/transport/__init__.py
|
|
184
|
+
tests/transport/aioresponses_compat.py
|
|
184
185
|
tests/transport/compliance.py
|
|
185
186
|
tests/transport/test__custom_tls_signer.py
|
|
186
187
|
tests/transport/test__http_client.py
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
pyasn1-modules>=0.2.1
|
|
2
|
+
|
|
3
|
+
[:python_version < "3.14"]
|
|
4
|
+
cryptography>=38.0.3
|
|
5
|
+
|
|
6
|
+
[:python_version >= "3.14"]
|
|
7
|
+
cryptography>=41.0.5
|
|
8
|
+
|
|
9
|
+
[aiohttp]
|
|
10
|
+
requests<3.0.0,>=2.30.0
|
|
11
|
+
|
|
12
|
+
[aiohttp:python_version < "3.14"]
|
|
13
|
+
aiohttp<4.0.0,>=3.8.0
|
|
14
|
+
|
|
15
|
+
[aiohttp:python_version >= "3.14"]
|
|
16
|
+
aiohttp<4.0.0,>=3.9.0
|
|
17
|
+
|
|
18
|
+
[cryptography]
|
|
19
|
+
|
|
20
|
+
[cryptography:python_version < "3.14"]
|
|
21
|
+
cryptography>=38.0.3
|
|
22
|
+
|
|
23
|
+
[cryptography:python_version >= "3.14"]
|
|
24
|
+
cryptography>=41.0.5
|
|
25
|
+
|
|
26
|
+
[enterprise_cert]
|
|
27
|
+
|
|
28
|
+
[enterprise_cert:python_version < "3.14"]
|
|
29
|
+
cryptography>=38.0.3
|
|
30
|
+
|
|
31
|
+
[enterprise_cert:python_version >= "3.14"]
|
|
32
|
+
cryptography>=41.0.5
|
|
33
|
+
|
|
34
|
+
[grpc]
|
|
35
|
+
|
|
36
|
+
[grpc:python_version < "3.14"]
|
|
37
|
+
grpcio<2.0.0,>=1.59.0
|
|
38
|
+
|
|
39
|
+
[grpc:python_version >= "3.14"]
|
|
40
|
+
grpcio<2.0.0,>=1.75.1
|
|
41
|
+
|
|
42
|
+
[pyjwt]
|
|
43
|
+
pyjwt>=2.0
|
|
44
|
+
|
|
45
|
+
[pyopenssl]
|
|
46
|
+
|
|
47
|
+
[pyopenssl:python_version < "3.14"]
|
|
48
|
+
cryptography>=38.0.3
|
|
49
|
+
|
|
50
|
+
[pyopenssl:python_version >= "3.14"]
|
|
51
|
+
cryptography>=41.0.5
|
|
52
|
+
|
|
53
|
+
[reauth]
|
|
54
|
+
pyu2f>=0.1.5
|
|
55
|
+
|
|
56
|
+
[requests]
|
|
57
|
+
requests<3.0.0,>=2.30.0
|
|
58
|
+
|
|
59
|
+
[rsa]
|
|
60
|
+
rsa<5,>=4.0.0
|
|
61
|
+
|
|
62
|
+
[testing]
|
|
63
|
+
flask
|
|
64
|
+
freezegun
|
|
65
|
+
pyjwt>=2.0
|
|
66
|
+
pytest
|
|
67
|
+
pytest-cov
|
|
68
|
+
pytest-localserver
|
|
69
|
+
pyu2f>=0.1.5
|
|
70
|
+
responses
|
|
71
|
+
urllib3<3.0.0,>=1.26.15
|
|
72
|
+
packaging>=20.0
|
|
73
|
+
requests<3.0.0,>=2.30.0
|
|
74
|
+
aioresponses
|
|
75
|
+
pytest-asyncio
|
|
76
|
+
|
|
77
|
+
[testing:python_version < "3.14"]
|
|
78
|
+
grpcio<2.0.0,>=1.59.0
|
|
79
|
+
aiohttp<4.0.0,>=3.8.0
|
|
80
|
+
|
|
81
|
+
[testing:python_version >= "3.14"]
|
|
82
|
+
grpcio<2.0.0,>=1.75.1
|
|
83
|
+
aiohttp<4.0.0,>=3.9.0
|
|
84
|
+
|
|
85
|
+
[urllib3]
|
|
86
|
+
urllib3<3.0.0,>=1.26.15
|
|
87
|
+
packaging>=20.0
|
|
@@ -19,7 +19,8 @@ from setuptools import find_namespace_packages
|
|
|
19
19
|
from setuptools import setup
|
|
20
20
|
|
|
21
21
|
cryptography_base_require = [
|
|
22
|
-
"cryptography >= 38.0.3",
|
|
22
|
+
"cryptography >= 38.0.3; python_version < '3.14'",
|
|
23
|
+
"cryptography >= 41.0.5; python_version >= '3.14'",
|
|
23
24
|
]
|
|
24
25
|
|
|
25
26
|
DEPENDENCIES = (
|
|
@@ -27,9 +28,13 @@ DEPENDENCIES = (
|
|
|
27
28
|
*cryptography_base_require,
|
|
28
29
|
)
|
|
29
30
|
|
|
30
|
-
requests_extra_require = ["requests >= 2.
|
|
31
|
+
requests_extra_require = ["requests >= 2.30.0, < 3.0.0"]
|
|
31
32
|
|
|
32
|
-
aiohttp_extra_require = [
|
|
33
|
+
aiohttp_extra_require = [
|
|
34
|
+
"aiohttp >= 3.8.0, < 4.0.0; python_version < '3.14'",
|
|
35
|
+
"aiohttp >= 3.9.0, < 4.0.0; python_version >= '3.14'",
|
|
36
|
+
*requests_extra_require,
|
|
37
|
+
]
|
|
33
38
|
|
|
34
39
|
pyjwt_extra_require = ["pyjwt>=2.0"]
|
|
35
40
|
|
|
@@ -37,10 +42,12 @@ reauth_extra_require = ["pyu2f>=0.1.5"]
|
|
|
37
42
|
|
|
38
43
|
enterprise_cert_extra_require = cryptography_base_require
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
|
|
45
|
+
urllib3_extra_require = [
|
|
46
|
+
"urllib3 >= 1.26.15, < 3.0.0",
|
|
47
|
+
"packaging >= 20.0",
|
|
48
|
+
]
|
|
42
49
|
|
|
43
|
-
rsa_extra_require = ["rsa>=
|
|
50
|
+
rsa_extra_require = ["rsa>=4.0.0,<5"]
|
|
44
51
|
|
|
45
52
|
grpc_extra_require = [
|
|
46
53
|
"grpcio >= 1.59.0, < 2.0.0; python_version < '3.14'",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Copyright 2026 Google LLC
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from tests.transport.aioresponses_compat import patch_aioresponses
|
|
16
|
+
|
|
17
|
+
patch_aioresponses()
|