Skip to content

Commit 10a32bb

Browse files
chore: add debug statements around auth checking (#422)
1 parent 82c1ca1 commit 10a32bb

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

crates/chat-cli/src/auth/builder_id.rs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ use time::OffsetDateTime;
4949
use tracing::{
5050
debug,
5151
error,
52+
info,
5253
trace,
5354
warn,
5455
};
@@ -302,6 +303,7 @@ impl BuilderIdToken {
302303

303304
/// Load the token from the keychain, refresh the token if it is expired and return it
304305
pub async fn load(database: &Database) -> Result<Option<Self>, AuthError> {
306+
trace!("loading builder id token from the secret store");
305307
match database.get_secret(Self::SECRET_KEY).await {
306308
Ok(Some(secret)) => {
307309
let token: Option<Self> = serde_json::from_str(&secret.0)?;
@@ -314,6 +316,7 @@ impl BuilderIdToken {
314316
trace!("token is expired, refreshing");
315317
token.refresh_token(&client, database, &region).await
316318
} else {
319+
trace!(?token, "found a valid token");
317320
Ok(Some(token))
318321
}
319322
},
@@ -342,6 +345,7 @@ impl BuilderIdToken {
342345
region: &Region,
343346
) -> Result<Option<Self>, AuthError> {
344347
let Some(refresh_token) = &self.refresh_token else {
348+
warn!("no refresh token was found");
345349
// if the token is expired and has no refresh token, delete it
346350
if let Err(err) = self.delete(database).await {
347351
error!(?err, "Failed to delete builder id token");
@@ -350,6 +354,7 @@ impl BuilderIdToken {
350354
return Ok(None);
351355
};
352356

357+
trace!("loading device registration from secret store");
353358
let registration = match DeviceRegistration::load_from_secret_store(database, region).await? {
354359
Some(registration) if registration.oauth_flow == self.oauth_flow => registration,
355360
// If the OIDC client registration is for a different oauth flow or doesn't exist, then
@@ -525,8 +530,22 @@ pub async fn poll_create_token(
525530

526531
pub async fn is_logged_in(database: &mut Database) -> bool {
527532
// Check for BuilderId if not using Sigv4
528-
std::env::var("AMAZON_Q_SIGV4").is_ok_and(|v| !v.is_empty())
529-
|| matches!(BuilderIdToken::load(database).await, Ok(Some(_)))
533+
if std::env::var("AMAZON_Q_SIGV4").is_ok_and(|v| !v.is_empty()) {
534+
debug!("logged in using sigv4 credentials");
535+
return true;
536+
}
537+
538+
match BuilderIdToken::load(database).await {
539+
Ok(Some(_)) => true,
540+
Ok(None) => {
541+
info!("not logged in - no valid token found");
542+
false
543+
},
544+
Err(err) => {
545+
warn!(?err, "failed to try to load a builder id token");
546+
false
547+
},
548+
}
530549
}
531550

532551
pub async fn logout(database: &mut Database) -> Result<(), AuthError> {

crates/fig_auth/src/builder_id.rs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ use time::OffsetDateTime;
5353
use tracing::{
5454
debug,
5555
error,
56+
info,
57+
trace,
5658
warn,
5759
};
5860

@@ -307,6 +309,7 @@ impl BuilderIdToken {
307309

308310
/// Load the token from the keychain, refresh the token if it is expired and return it
309311
pub async fn load(secret_store: &SecretStore, force_refresh: bool) -> Result<Option<Self>> {
312+
trace!("loading builder id token from the secret store");
310313
match secret_store.get(Self::SECRET_KEY).await {
311314
Ok(Some(secret)) => {
312315
let token: Option<Self> = serde_json::from_str(&secret.0)?;
@@ -319,13 +322,20 @@ impl BuilderIdToken {
319322
if token.is_expired() || force_refresh {
320323
token.refresh_token(&client, secret_store, &region).await
321324
} else {
325+
trace!(?token, "found a valid token");
322326
Ok(Some(token))
323327
}
324328
},
325-
None => Ok(None),
329+
None => {
330+
debug!("secret stored in the database was empty");
331+
Ok(None)
332+
},
326333
}
327334
},
328-
Ok(None) => Ok(None),
335+
Ok(None) => {
336+
debug!("no secret found in the database");
337+
Ok(None)
338+
},
329339
Err(err) => {
330340
error!(%err, "Error getting builder id token from keychain");
331341
Err(err)
@@ -341,6 +351,7 @@ impl BuilderIdToken {
341351
region: &Region,
342352
) -> Result<Option<Self>> {
343353
let Some(refresh_token) = &self.refresh_token else {
354+
warn!("no refresh token was found");
344355
// if the token is expired and has no refresh token, delete it
345356
if let Err(err) = self.delete(secret_store).await {
346357
error!(?err, "Failed to delete builder id token");
@@ -349,6 +360,7 @@ impl BuilderIdToken {
349360
return Ok(None);
350361
};
351362

363+
trace!("loading device registration from secret store");
352364
let registration = match DeviceRegistration::load_from_secret_store(secret_store, region).await? {
353365
Some(registration) if registration.oauth_flow == self.oauth_flow => registration,
354366
// If the OIDC client registration is for a different oauth flow or doesn't exist, then
@@ -559,7 +571,17 @@ pub async fn is_amzn_user() -> Result<bool> {
559571
}
560572

561573
pub async fn is_logged_in() -> bool {
562-
matches!(builder_id_token().await, Ok(Some(_)))
574+
match builder_id_token().await {
575+
Ok(Some(_)) => true,
576+
Ok(None) => {
577+
info!("not logged in - no valid token found");
578+
false
579+
},
580+
Err(err) => {
581+
warn!(?err, "failed to try to load a builder id token");
582+
false
583+
},
584+
}
563585
}
564586

565587
pub async fn logout() -> Result<()> {

crates/q_cli/src/cli/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,7 @@ impl Cli {
439439
}
440440
});
441441

442+
debug!("launching q chat binary");
442443
let exit_status = cmd.status().await?;
443444
let exit_code = exit_status
444445
.code()

0 commit comments

Comments
 (0)