From acf898f10cb9ee8a663b77b469efb6b8faef77d0 Mon Sep 17 00:00:00 2001 From: Joe Neeman Date: Mon, 17 Oct 2022 16:35:10 -0500 Subject: [PATCH] Account for the fact that access tokens are optional now. --- src/error.rs | 9 +++++++++ src/service_account_impersonator.rs | 5 +++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/error.rs b/src/error.rs index d43073b..fc665f8 100644 --- a/src/error.rs +++ b/src/error.rs @@ -154,6 +154,8 @@ pub enum Error { UserError(String), /// A lower level IO error. LowLevelError(io::Error), + /// We required an access token, but received a response that didn't contain one. + MissingAccessToken, /// Other errors produced by a storage provider OtherError(anyhow::Error), } @@ -206,6 +208,13 @@ impl fmt::Display for Error { } Error::UserError(ref s) => s.fmt(f), Error::LowLevelError(ref e) => e.fmt(f), + Error::MissingAccessToken => { + write!( + f, + "Expected an access token, but received a response without one" + )?; + Ok(()) + } Error::OtherError(ref e) => e.fmt(f), } } diff --git a/src/service_account_impersonator.rs b/src/service_account_impersonator.rs index 57bd5c5..3acb06b 100644 --- a/src/service_account_impersonator.rs +++ b/src/service_account_impersonator.rs @@ -55,7 +55,7 @@ impl From for TokenInfo { ) .ok(); TokenInfo { - access_token: resp.access_token, + access_token: Some(resp.access_token), refresh_token: None, expires_at, id_token: None, @@ -99,7 +99,8 @@ impl ServiceAccountImpersonationFlow { .inner_flow .token(hyper_client, scopes) .await? - .access_token; + .access_token + .ok_or(Error::MissingAccessToken)?; let scopes: Vec<_> = scopes.iter().map(|s| s.as_ref()).collect(); let req_body = Request {