From e0cde7baa75e3162b03034879b3dcd8bdf291e8a Mon Sep 17 00:00:00 2001 From: Lukasz Drozdz Date: Wed, 20 Nov 2024 12:10:23 +0100 Subject: [PATCH 1/2] add more error logging on impersonation failure --- src/gcp.rs | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/gcp.rs b/src/gcp.rs index d558a676d9e71..4adfe0c1fb9c4 100644 --- a/src/gcp.rs +++ b/src/gcp.rs @@ -345,6 +345,7 @@ async fn do_fetch_impersonated_token( // Create an HTTP client and make the POST request let client = Client::new(); + let response = client .post(&url) .bearer_auth(base_token) // Use the base token for authorization @@ -356,17 +357,32 @@ async fn do_fetch_impersonated_token( } async fn token_from_json(resp: Response) -> crate::Result { - if !resp.status().is_success() { - let token_err = resp.json::().await?; + let is_success = resp.status().is_success(); + let resp = resp.bytes().await?; + if !is_success { + error!( + message = "No success in response.", + raw_resp = String::from_utf8_lossy(&resp).into_owned(), + ); + let token_err: TokenErr = serde_json::from_slice(&resp)?; return Err(token_err.into()) } + #[derive(Deserialize)] #[serde(rename_all = "camelCase")] struct TokenCamelCase { access_token: String, expire_time: String, } - let token = resp.json::().await?; + let token: TokenCamelCase = serde_json::from_slice(&resp.clone()).map_err(|e| { + error!( + message = "Failed to parse OAuth token JSON.", + error = %e, + raw_resp = String::from_utf8_lossy(&resp).into_owned(), + ); + e + })?; + let remapped = json!({ "access_token": token.access_token, "token_type": "Bearer", From b1df78ba7b6b37f7dbec917e5e2db2f6aa62d4c7 Mon Sep 17 00:00:00 2001 From: Lukasz Drozdz Date: Wed, 20 Nov 2024 12:10:54 +0100 Subject: [PATCH 2/2] tidy --- src/gcp.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gcp.rs b/src/gcp.rs index 4adfe0c1fb9c4..7302284270879 100644 --- a/src/gcp.rs +++ b/src/gcp.rs @@ -345,7 +345,6 @@ async fn do_fetch_impersonated_token( // Create an HTTP client and make the POST request let client = Client::new(); - let response = client .post(&url) .bearer_auth(base_token) // Use the base token for authorization