aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/google-auth/py3/google/auth
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2024-11-22 09:21:01 +0000
committerAlexander Smirnov <alex@ydb.tech>2024-11-22 09:21:01 +0000
commita7cac42c868ca5722777ccee944217410812e72c (patch)
tree7bff7ce2a3ade72f6f15dfc634490d13628066ee /contrib/python/google-auth/py3/google/auth
parenta18f18d81996ca8e681bb6cabd441b52833d99bf (diff)
parent9478cfdab4217d3710b96329466825bf47111d7d (diff)
downloadydb-a7cac42c868ca5722777ccee944217410812e72c.tar.gz
Merge branch 'rightlib' into mergelibs-241122-0919
Diffstat (limited to 'contrib/python/google-auth/py3/google/auth')
-rw-r--r--contrib/python/google-auth/py3/google/auth/_default.py4
-rw-r--r--contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py2
-rw-r--r--contrib/python/google-auth/py3/google/auth/iam.py33
-rw-r--r--contrib/python/google-auth/py3/google/auth/impersonated_credentials.py50
-rw-r--r--contrib/python/google-auth/py3/google/auth/transport/_requests_base.py3
-rw-r--r--contrib/python/google-auth/py3/google/auth/transport/requests.py5
-rw-r--r--contrib/python/google-auth/py3/google/auth/version.py2
7 files changed, 69 insertions, 30 deletions
diff --git a/contrib/python/google-auth/py3/google/auth/_default.py b/contrib/python/google-auth/py3/google/auth/_default.py
index 7bbcf85914..cdc8b7a646 100644
--- a/contrib/python/google-auth/py3/google/auth/_default.py
+++ b/contrib/python/google-auth/py3/google/auth/_default.py
@@ -472,6 +472,10 @@ def _get_impersonated_service_account_credentials(filename, info, scopes):
source_credentials, _ = _get_service_account_credentials(
filename, source_credentials_info
)
+ elif source_credentials_type == _EXTERNAL_ACCOUNT_AUTHORIZED_USER_TYPE:
+ source_credentials, _ = _get_external_account_authorized_user_credentials(
+ filename, source_credentials_info
+ )
else:
raise exceptions.InvalidType(
"source credential of type {} is not supported.".format(
diff --git a/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py b/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py
index b66d9f9b37..8d692972fd 100644
--- a/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py
+++ b/contrib/python/google-auth/py3/google/auth/compute_engine/_metadata.py
@@ -294,7 +294,7 @@ def get_universe_domain(request):
404 occurs while retrieving metadata.
"""
universe_domain = get(
- request, "universe/universe_domain", return_none_for_not_found_error=True
+ request, "universe/universe-domain", return_none_for_not_found_error=True
)
if not universe_domain:
return "googleapis.com"
diff --git a/contrib/python/google-auth/py3/google/auth/iam.py b/contrib/python/google-auth/py3/google/auth/iam.py
index bba1624c16..dcf0dbf9d5 100644
--- a/contrib/python/google-auth/py3/google/auth/iam.py
+++ b/contrib/python/google-auth/py3/google/auth/iam.py
@@ -23,10 +23,18 @@ import base64
import http.client as http_client
import json
+from google.auth import _exponential_backoff
from google.auth import _helpers
+from google.auth import credentials
from google.auth import crypt
from google.auth import exceptions
+IAM_RETRY_CODES = {
+ http_client.INTERNAL_SERVER_ERROR,
+ http_client.BAD_GATEWAY,
+ http_client.SERVICE_UNAVAILABLE,
+ http_client.GATEWAY_TIMEOUT,
+}
_IAM_SCOPE = ["https://www.googleapis.com/auth/iam"]
@@ -82,21 +90,30 @@ class Signer(crypt.Signer):
message = _helpers.to_bytes(message)
method = "POST"
- url = _IAM_SIGN_ENDPOINT.format(self._service_account_email)
+ url = _IAM_SIGN_ENDPOINT.replace(
+ credentials.DEFAULT_UNIVERSE_DOMAIN, self._credentials.universe_domain
+ ).format(self._service_account_email)
headers = {"Content-Type": "application/json"}
body = json.dumps(
{"payload": base64.b64encode(message).decode("utf-8")}
).encode("utf-8")
- self._credentials.before_request(self._request, method, url, headers)
- response = self._request(url=url, method=method, body=body, headers=headers)
+ retries = _exponential_backoff.ExponentialBackoff()
+ for _ in retries:
+ self._credentials.before_request(self._request, method, url, headers)
- if response.status != http_client.OK:
- raise exceptions.TransportError(
- "Error calling the IAM signBlob API: {}".format(response.data)
- )
+ response = self._request(url=url, method=method, body=body, headers=headers)
- return json.loads(response.data.decode("utf-8"))
+ if response.status in IAM_RETRY_CODES:
+ continue
+
+ if response.status != http_client.OK:
+ raise exceptions.TransportError(
+ "Error calling the IAM signBlob API: {}".format(response.data)
+ )
+
+ return json.loads(response.data.decode("utf-8"))
+ raise exceptions.TransportError("exhausted signBlob endpoint retries")
@property
def key_id(self):
diff --git a/contrib/python/google-auth/py3/google/auth/impersonated_credentials.py b/contrib/python/google-auth/py3/google/auth/impersonated_credentials.py
index c42a936433..d51c8ef1e8 100644
--- a/contrib/python/google-auth/py3/google/auth/impersonated_credentials.py
+++ b/contrib/python/google-auth/py3/google/auth/impersonated_credentials.py
@@ -31,6 +31,7 @@ from datetime import datetime
import http.client as http_client
import json
+from google.auth import _exponential_backoff
from google.auth import _helpers
from google.auth import credentials
from google.auth import exceptions
@@ -45,7 +46,12 @@ _DEFAULT_TOKEN_LIFETIME_SECS = 3600 # 1 hour in seconds
def _make_iam_token_request(
- request, principal, headers, body, iam_endpoint_override=None
+ request,
+ principal,
+ headers,
+ body,
+ universe_domain=credentials.DEFAULT_UNIVERSE_DOMAIN,
+ iam_endpoint_override=None,
):
"""Makes a request to the Google Cloud IAM service for an access token.
Args:
@@ -66,7 +72,9 @@ def _make_iam_token_request(
`iamcredentials.googleapis.com` is not enabled or the
`Service Account Token Creator` is not assigned
"""
- iam_endpoint = iam_endpoint_override or iam._IAM_ENDPOINT.format(principal)
+ iam_endpoint = iam_endpoint_override or iam._IAM_ENDPOINT.replace(
+ credentials.DEFAULT_UNIVERSE_DOMAIN, universe_domain
+ ).format(principal)
body = json.dumps(body).encode("utf-8")
@@ -218,6 +226,8 @@ class Credentials(
and self._source_credentials._always_use_jwt_access
):
self._source_credentials._create_self_signed_jwt(None)
+
+ self._universe_domain = source_credentials.universe_domain
self._target_principal = target_principal
self._target_scopes = target_scopes
self._delegates = delegates
@@ -270,13 +280,16 @@ class Credentials(
principal=self._target_principal,
headers=headers,
body=body,
+ universe_domain=self.universe_domain,
iam_endpoint_override=self._iam_endpoint_override,
)
def sign_bytes(self, message):
from google.auth.transport.requests import AuthorizedSession
- iam_sign_endpoint = iam._IAM_SIGN_ENDPOINT.format(self._target_principal)
+ iam_sign_endpoint = iam._IAM_SIGN_ENDPOINT.replace(
+ credentials.DEFAULT_UNIVERSE_DOMAIN, self.universe_domain
+ ).format(self._target_principal)
body = {
"payload": base64.b64encode(message).decode("utf-8"),
@@ -288,18 +301,22 @@ class Credentials(
authed_session = AuthorizedSession(self._source_credentials)
try:
- response = authed_session.post(
- url=iam_sign_endpoint, headers=headers, json=body
- )
+ retries = _exponential_backoff.ExponentialBackoff()
+ for _ in retries:
+ response = authed_session.post(
+ url=iam_sign_endpoint, headers=headers, json=body
+ )
+ if response.status_code in iam.IAM_RETRY_CODES:
+ continue
+ if response.status_code != http_client.OK:
+ raise exceptions.TransportError(
+ "Error calling sign_bytes: {}".format(response.json())
+ )
+
+ return base64.b64decode(response.json()["signedBlob"])
finally:
authed_session.close()
-
- if response.status_code != http_client.OK:
- raise exceptions.TransportError(
- "Error calling sign_bytes: {}".format(response.json())
- )
-
- return base64.b64decode(response.json()["signedBlob"])
+ raise exceptions.TransportError("exhausted signBlob endpoint retries")
@property
def signer_email(self):
@@ -422,9 +439,10 @@ class IDTokenCredentials(credentials.CredentialsWithQuotaProject):
def refresh(self, request):
from google.auth.transport.requests import AuthorizedSession
- iam_sign_endpoint = iam._IAM_IDTOKEN_ENDPOINT.format(
- self._target_credentials.signer_email
- )
+ iam_sign_endpoint = iam._IAM_IDTOKEN_ENDPOINT.replace(
+ credentials.DEFAULT_UNIVERSE_DOMAIN,
+ self._target_credentials.universe_domain,
+ ).format(self._target_credentials.signer_email)
body = {
"audience": self._target_audience,
diff --git a/contrib/python/google-auth/py3/google/auth/transport/_requests_base.py b/contrib/python/google-auth/py3/google/auth/transport/_requests_base.py
index ec718d909a..0608223d8c 100644
--- a/contrib/python/google-auth/py3/google/auth/transport/_requests_base.py
+++ b/contrib/python/google-auth/py3/google/auth/transport/_requests_base.py
@@ -13,7 +13,8 @@
# limitations under the License.
"""Transport adapter for Base Requests."""
-
+# NOTE: The coverage for this file is temporarily disabled in `.coveragerc`
+# since it is currently unused.
import abc
diff --git a/contrib/python/google-auth/py3/google/auth/transport/requests.py b/contrib/python/google-auth/py3/google/auth/transport/requests.py
index 68f67c59bd..23a69783dc 100644
--- a/contrib/python/google-auth/py3/google/auth/transport/requests.py
+++ b/contrib/python/google-auth/py3/google/auth/transport/requests.py
@@ -38,7 +38,6 @@ from google.auth import environment_vars
from google.auth import exceptions
from google.auth import transport
import google.auth.transport._mtls_helper
-from google.auth.transport._requests_base import _BaseAuthorizedSession
from google.oauth2 import service_account
_LOGGER = logging.getLogger(__name__)
@@ -293,7 +292,7 @@ class _MutualTlsOffloadAdapter(requests.adapters.HTTPAdapter):
return super(_MutualTlsOffloadAdapter, self).proxy_manager_for(*args, **kwargs)
-class AuthorizedSession(requests.Session, _BaseAuthorizedSession):
+class AuthorizedSession(requests.Session):
"""A Requests Session class with credentials.
This class is used to perform requests to API endpoints that require
@@ -390,7 +389,7 @@ class AuthorizedSession(requests.Session, _BaseAuthorizedSession):
default_host=None,
):
super(AuthorizedSession, self).__init__()
- _BaseAuthorizedSession.__init__(self, credentials)
+ self.credentials = credentials
self._refresh_status_codes = refresh_status_codes
self._max_refresh_attempts = max_refresh_attempts
self._refresh_timeout = refresh_timeout
diff --git a/contrib/python/google-auth/py3/google/auth/version.py b/contrib/python/google-auth/py3/google/auth/version.py
index 6610120c69..15dc374707 100644
--- a/contrib/python/google-auth/py3/google/auth/version.py
+++ b/contrib/python/google-auth/py3/google/auth/version.py
@@ -12,4 +12,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-__version__ = "2.35.0"
+__version__ = "2.36.0"