From d4a9ce8f6279af55cbe4ec59f8be142e3599a078 Mon Sep 17 00:00:00 2001 From: Adrian Benavides Date: Tue, 4 Feb 2025 09:37:01 +0100 Subject: [PATCH] chore(rust): add more logs around enrollment tickets parsing logic --- .../ockam_api/src/cli_state/enrollments.rs | 17 +++++++++++++---- .../ockam/ockam_command/src/value_parsers.rs | 14 ++++++++------ 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/implementations/rust/ockam/ockam_api/src/cli_state/enrollments.rs b/implementations/rust/ockam/ockam_api/src/cli_state/enrollments.rs index db3605ad8ad..43f08b4e78c 100644 --- a/implementations/rust/ockam/ockam_api/src/cli_state/enrollments.rs +++ b/implementations/rust/ockam/ockam_api/src/cli_state/enrollments.rs @@ -276,11 +276,17 @@ impl FromStr for LegacyEnrollmentTicket { fn from_str(contents: &str) -> std::result::Result { if let Ok(data) = hex::decode(contents) { - Ok(serde_json::from_slice(&data) - .map_err(|_err| ApiError::core("Failed to decode EnrollmentTicket json"))?) + debug!(%contents, "decoding hex-encoded LegacyEnrollmentTicket"); + Ok(serde_json::from_slice(&data).map_err(|_err| { + ApiError::core( + "Failed to decode LegacyEnrollmentTicket json from hex-encoded string", + ) + })?) } else { - Ok(serde_json::from_str(contents) - .map_err(|_err| ApiError::core("Failed to decode EnrollmentTicket json"))?) + debug!(%contents, "decoding LegacyEnrollmentTicket from raw contents"); + Ok(serde_json::from_str(contents).map_err(|_err| { + ApiError::core("Failed to decode LegacyEnrollmentTicket json from raw contents") + })?) } } } @@ -370,6 +376,7 @@ impl FromStr for ExportedEnrollmentTicket { // Decode as comma-separated text let values: Vec<&str> = contents.split(',').collect(); if values.len() < Self::MANDATORY_FIELDS_NUM { + error!(%contents, ?values, "missing fields in enrollment ticket: expected at least {}, got {}", Self::MANDATORY_FIELDS_NUM, values.len()); return Err(ApiError::core("Missing fields in enrollment ticket").into()); } let ( @@ -463,6 +470,7 @@ impl EnrollmentTicket { authority_change_history: impl Into, authority_route: MultiAddr, ) -> Result { + debug!("Creating enrollment ticket"); let project_id = project_id.into(); let project_change_history = project_change_history.into(); let project_identity = Identity::import_from_string( @@ -493,6 +501,7 @@ impl EnrollmentTicket { one_time_code: OneTimeCode, project: &ProjectModel, ) -> Result { + debug!(?project, "Creating enrollment ticket from project"); let project_change_history = project .project_change_history .as_ref() diff --git a/implementations/rust/ockam/ockam_command/src/value_parsers.rs b/implementations/rust/ockam/ockam_command/src/value_parsers.rs index 17e89044374..d9a45dba8a0 100644 --- a/implementations/rust/ockam/ockam_command/src/value_parsers.rs +++ b/implementations/rust/ockam/ockam_command/src/value_parsers.rs @@ -4,7 +4,7 @@ use miette::{miette, Context, IntoDiagnostic}; use ockam_api::cli_state::{EnrollmentTicket, ExportedEnrollmentTicket, LegacyEnrollmentTicket}; use serde::Deserialize; use std::str::FromStr; -use tracing::trace; +use tracing::{trace, warn}; use url::Url; /// Parse a single key-value pair @@ -52,7 +52,7 @@ pub(crate) async fn parse_config_or_path_or_url<'de, T: Deserialize<'de>>( Ok(value.to_string()) } else { Err(miette!( - "Failed to parse value {} as a path, URL or configuration", + "Failed to parse value {} as a path, URL or inline configuration", value )) } @@ -61,9 +61,10 @@ pub(crate) async fn parse_config_or_path_or_url<'de, T: Deserialize<'de>>( } pub(crate) async fn parse_string_or_path_or_url(value: &str) -> miette::Result { - parse_path_or_url(value) - .await - .or_else(|_| Ok(value.to_string())) + parse_path_or_url(value).await.or_else(|err| { + warn!(%value, %err, "Couldn't parse value as a path or URL. Returning plain value to be processed as inline contents"); + Ok(value.to_string()) + }) } pub(crate) async fn parse_path_or_url(value: &str) -> miette::Result { @@ -85,7 +86,8 @@ pub(crate) async fn parse_path_or_url(value: &str) -> miette::Result { .into_diagnostic() .context("Failed to read contents from file") } else { - Err(miette!("Failed to parse value {} as a path or URL", value)) + warn!(%value, "Couldn't parse value as a path or URL"); + Err(miette!("Couldn't parse value '{}' as a path or URL", value)) } }