From e6d7d10744e0066c4fe392ef7b011cd70529f2a6 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 8 Mar 2022 10:29:47 +0100 Subject: [PATCH 1/9] updated the configuration command --- cli/src/modules/configuration.rs | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/cli/src/modules/configuration.rs b/cli/src/modules/configuration.rs index 2a54e666..17f3e5a5 100644 --- a/cli/src/modules/configuration.rs +++ b/cli/src/modules/configuration.rs @@ -2,7 +2,8 @@ use crate::error; use crate::error::Result; use crate::utils::config::{get_config_path, Configurations}; use clap::{Args, Subcommand}; -use log::info; +use colored::*; +use log; use std::fs; use std::path::Path; @@ -23,16 +24,36 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< match options.commands { ConfigurationSubcommands::Initialize => { initialize(&config_path)?; - info!("Initialized the configuration!"); + log::info!( + "{} configuration file at {}.", + "Initialised".cyan(), + config_path.display() + ); Ok(()) } - ConfigurationSubcommands::View => view(&config_path), + ConfigurationSubcommands::View => { + log::debug!( + "Loaded configuration from {}", + String::from(config_path.to_str().unwrap()).bold() + ); + + let _ = match view(&config_path) { + Ok(config) => config, + Err(e) => { + log::error!( + "Cannot not read configuration file. Try initializing configuration first." + ); + return Err(e); + } + }; + return Ok(()); + } } } fn view(path: &Path) -> Result<()> { let output = fs::read_to_string(path)?; - info!("{}", output); + log::info!("{}", output); Ok(()) } From 251ea90cc0d0e4cf0268c017fb824586f84b518f Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 8 Mar 2022 10:40:24 +0100 Subject: [PATCH 2/9] updated connections command and invite sub-command --- cli/src/modules/connections.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/cli/src/modules/connections.rs b/cli/src/modules/connections.rs index f766df98..36f5bbb2 100644 --- a/cli/src/modules/connections.rs +++ b/cli/src/modules/connections.rs @@ -68,13 +68,19 @@ pub async fn parse_connection_args( }; agent.create_invitation(options).await.map(|response| { loader.stop(); + info!( + "{}", + format!( + "{} invite with connection id: {}\n", + "Created".green(), + response.0.bold(), + ) + ); if *qr { - info!( - "{}", - format!("{}: {}", "Connection id".green(), response.connection_id) - ); + info!("Scan this QR code to accept the invitation:\n"); print_qr_code(response.invitation_url).unwrap(); } else { + info!("Another agent can use this URL to accept your invitation:\n"); info!("{}", response.invitation_url) } }) From cfc3910dc41ce57c4d736a52c3bde937e3353b7f Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 8 Mar 2022 10:58:35 +0100 Subject: [PATCH 3/9] added status code to error output for internal server error --- agent/src/error.rs | 4 ++-- cloudagent-python/src/web.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/src/error.rs b/agent/src/error.rs index 1c2832cf..25ecb63a 100644 --- a/agent/src/error.rs +++ b/agent/src/error.rs @@ -5,8 +5,8 @@ pub enum Error { AuthorizationFailed, UnableToParseResponse, UrlDoesNotExist, - InternalServerError, UnknownResponseStatusCode(String), + InternalServerError(u16), UnreachableUrl, HttpServiceUnavailable, } @@ -21,8 +21,8 @@ impl Display for Error { Error::AuthorizationFailed => write!(f, "Failed to authorize. Either the wrong or no api-key is provided."), Error::UnableToParseResponse => write!(f, "Unable to parse the response from the server. Is the cloudagent the correct version?"), Error::UrlDoesNotExist => write!(f, "Path does not exist on endpoint. This can happen when querying by id and the id is not valid."), - Error::InternalServerError => write!(f, "Internal Server Error!"), Error::UnknownResponseStatusCode(msg) => write!(f, "Received unknown status code from the server. Endpoint is likely incorrect. If the endpoint is correct, please report this error at https://github.com/animo/aries-cli/issues/new \nAdditional info: {}", msg), + Error::InternalServerError(status) => write!(f, "Internal Server Error (status code: {})!", status), Error::UnreachableUrl => write!(f, "Provided url is unreachable. Is the provided endpoint valid?"), Error::HttpServiceUnavailable => write!(f, "Cloudagent is currently unavailable. Are you sure the agent is online?") diff --git a/cloudagent-python/src/web.rs b/cloudagent-python/src/web.rs index 4771dced..eba49571 100644 --- a/cloudagent-python/src/web.rs +++ b/cloudagent-python/src/web.rs @@ -64,7 +64,7 @@ impl CloudAgent { // TODO: This response is quite ugly. Is it only used at cred_def_id? 422 => Err(res.text().await?.into()), 503 => Err(Error::HttpServiceUnavailable.into()), - 500..=599 => Err(Error::InternalServerError.into()), + 500..=599 => Err(Error::InternalServerError(res.status().as_u16()).into()), _ => Err(Error::UnknownResponseStatusCode(res.text().await?).into()), } } From cd1b6c834281d0b02744a169e17edcbe3024a6e6 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Tue, 8 Mar 2022 10:59:36 +0100 Subject: [PATCH 4/9] replace info! etc with log::info! etc. in credential-definition --- cli/src/modules/credential_definition.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cli/src/modules/credential_definition.rs b/cli/src/modules/credential_definition.rs index 320c60f0..115a81a6 100644 --- a/cli/src/modules/credential_definition.rs +++ b/cli/src/modules/credential_definition.rs @@ -1,6 +1,6 @@ use agent::modules::credential_definition::CredentialDefinitionModule; use clap::{Args, Subcommand}; -use log::{debug, info}; +use log; use serde_json::json; use crate::{ @@ -42,9 +42,9 @@ pub async fn parse_credential_definition_args( "tag": cred_def.credential_definition.tag, "ver": cred_def.credential_definition.ver, }); - debug!("{}", pretty_stringify_obj(cred_def)); + log::debug!("{}", pretty_stringify_obj(cred_def)); copy!("{}", pretty_stringify_obj(&loggable)); - info!("{}", pretty_stringify_obj(loggable)); + log::info!("{}", pretty_stringify_obj(loggable)); }); } @@ -54,7 +54,11 @@ pub async fn parse_credential_definition_args( agent.create(schema_id.to_string()).await.map(|cred_def| { loader.stop(); copy!("{}", cred_def.credential_definition_id); - info!("{}", cred_def.credential_definition_id); + info!( + "{} credential definition with id: {}.", + "Created".green(), + cred_def.credential_definition_id + ) }) } }, From 2c29376a6c360c11331e21f87ee209df2c2fc515 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Thu, 10 Mar 2022 17:05:58 +0100 Subject: [PATCH 5/9] more feedbacl after creating a credential --- cli/src/modules/credential_definition.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/src/modules/credential_definition.rs b/cli/src/modules/credential_definition.rs index 115a81a6..c10c0d53 100644 --- a/cli/src/modules/credential_definition.rs +++ b/cli/src/modules/credential_definition.rs @@ -1,5 +1,6 @@ use agent::modules::credential_definition::CredentialDefinitionModule; use clap::{Args, Subcommand}; +use colored::*; use log; use serde_json::json; From dae3a874c59720eb47fb58514dfda445e3b3c0de Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Mon, 14 Mar 2022 15:23:23 +0100 Subject: [PATCH 6/9] do not namespace log calls --- cli/src/modules/configuration.rs | 10 +++++----- cli/src/modules/credential_definition.rs | 6 +++--- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/src/modules/configuration.rs b/cli/src/modules/configuration.rs index 17f3e5a5..15f29788 100644 --- a/cli/src/modules/configuration.rs +++ b/cli/src/modules/configuration.rs @@ -3,7 +3,7 @@ use crate::error::Result; use crate::utils::config::{get_config_path, Configurations}; use clap::{Args, Subcommand}; use colored::*; -use log; +use log::{debug, info}; use std::fs; use std::path::Path; @@ -24,7 +24,7 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< match options.commands { ConfigurationSubcommands::Initialize => { initialize(&config_path)?; - log::info!( + info!( "{} configuration file at {}.", "Initialised".cyan(), config_path.display() @@ -32,7 +32,7 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< Ok(()) } ConfigurationSubcommands::View => { - log::debug!( + debug!( "Loaded configuration from {}", String::from(config_path.to_str().unwrap()).bold() ); @@ -40,7 +40,7 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< let _ = match view(&config_path) { Ok(config) => config, Err(e) => { - log::error!( + error!( "Cannot not read configuration file. Try initializing configuration first." ); return Err(e); @@ -53,7 +53,7 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< fn view(path: &Path) -> Result<()> { let output = fs::read_to_string(path)?; - log::info!("{}", output); + info!("{}", output); Ok(()) } diff --git a/cli/src/modules/credential_definition.rs b/cli/src/modules/credential_definition.rs index c10c0d53..7e441b58 100644 --- a/cli/src/modules/credential_definition.rs +++ b/cli/src/modules/credential_definition.rs @@ -1,7 +1,7 @@ use agent::modules::credential_definition::CredentialDefinitionModule; use clap::{Args, Subcommand}; use colored::*; -use log; +use log:{debug, info}; use serde_json::json; use crate::{ @@ -43,9 +43,9 @@ pub async fn parse_credential_definition_args( "tag": cred_def.credential_definition.tag, "ver": cred_def.credential_definition.ver, }); - log::debug!("{}", pretty_stringify_obj(cred_def)); + debug!("{}", pretty_stringify_obj(cred_def)); copy!("{}", pretty_stringify_obj(&loggable)); - log::info!("{}", pretty_stringify_obj(loggable)); + info!("{}", pretty_stringify_obj(loggable)); }); } From 06ca6137809615cbf566dfe15b9e9e4a7f9bf872 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Mon, 14 Mar 2022 15:31:35 +0100 Subject: [PATCH 7/9] added debug log and new custom error for non existing config file --- cli/src/error.rs | 2 ++ cli/src/modules/configuration.rs | 14 ++++---------- cli/src/modules/credential_definition.rs | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/cli/src/error.rs b/cli/src/error.rs index 34d79a51..cce07aeb 100644 --- a/cli/src/error.rs +++ b/cli/src/error.rs @@ -2,6 +2,7 @@ use std::fmt::{Display, Formatter}; #[derive(Debug)] pub enum Error { + CannotReadConfigurationFile, InvalidConfigurationPath, InvalidConfigurationStructure, InvalidEnvironment, @@ -21,6 +22,7 @@ pub type Result = std::result::Result>; impl Display for Error { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { + Error::CannotReadConfigurationFile => write!(f, "Cannot not read configuration file. Try initializing configuration first."), Error::InvalidConfigurationPath => write!(f, "Invalid configuration path."), Error::InvalidEnvironment => write!(f, "Invalid environment."), Error::NoEndpointSupplied => write!(f, "No endpoint supplied. Supply an endpoint either via `--endpoint` or via `--config`."), diff --git a/cli/src/modules/configuration.rs b/cli/src/modules/configuration.rs index 15f29788..739f9041 100644 --- a/cli/src/modules/configuration.rs +++ b/cli/src/modules/configuration.rs @@ -37,16 +37,10 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< String::from(config_path.to_str().unwrap()).bold() ); - let _ = match view(&config_path) { - Ok(config) => config, - Err(e) => { - error!( - "Cannot not read configuration file. Try initializing configuration first." - ); - return Err(e); - } - }; - return Ok(()); + view(&config_path).map_err(|err| { + debug!("Failed to read config file: {}", err); + return error::Error::CannotReadConfigurationFile.into(); + }) } } } diff --git a/cli/src/modules/credential_definition.rs b/cli/src/modules/credential_definition.rs index 7e441b58..7f345fb0 100644 --- a/cli/src/modules/credential_definition.rs +++ b/cli/src/modules/credential_definition.rs @@ -1,7 +1,7 @@ use agent::modules::credential_definition::CredentialDefinitionModule; use clap::{Args, Subcommand}; use colored::*; -use log:{debug, info}; +use log::{debug, info}; use serde_json::json; use crate::{ From 5fae86a33e7dfcd9afe65a2c3a1b4cce91ffa0f3 Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Mon, 14 Mar 2022 15:54:22 +0100 Subject: [PATCH 8/9] update to use refactored agent responses --- cli/src/modules/configuration.rs | 2 +- cli/src/modules/connections.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/src/modules/configuration.rs b/cli/src/modules/configuration.rs index 739f9041..da6df423 100644 --- a/cli/src/modules/configuration.rs +++ b/cli/src/modules/configuration.rs @@ -39,7 +39,7 @@ pub async fn parse_configuration_args(options: &ConfigurationOptions) -> Result< view(&config_path).map_err(|err| { debug!("Failed to read config file: {}", err); - return error::Error::CannotReadConfigurationFile.into(); + error::Error::CannotReadConfigurationFile.into() }) } } diff --git a/cli/src/modules/connections.rs b/cli/src/modules/connections.rs index 36f5bbb2..97153963 100644 --- a/cli/src/modules/connections.rs +++ b/cli/src/modules/connections.rs @@ -73,7 +73,7 @@ pub async fn parse_connection_args( format!( "{} invite with connection id: {}\n", "Created".green(), - response.0.bold(), + response.connection_id, ) ); if *qr { From b61b784e1a996fad50a595049acc0c6bdbee02bb Mon Sep 17 00:00:00 2001 From: Jean-Louis Leysens Date: Mon, 14 Mar 2022 19:20:25 +0100 Subject: [PATCH 9/9] update copy --- cli/src/error.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/src/error.rs b/cli/src/error.rs index cce07aeb..bb123bdb 100644 --- a/cli/src/error.rs +++ b/cli/src/error.rs @@ -22,7 +22,7 @@ pub type Result = std::result::Result>; impl Display for Error { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { - Error::CannotReadConfigurationFile => write!(f, "Cannot not read configuration file. Try initializing configuration first."), + Error::CannotReadConfigurationFile => write!(f, "Cannot not read configuration file. Try initializing first using: `aries-cli configuration initialize`."), Error::InvalidConfigurationPath => write!(f, "Invalid configuration path."), Error::InvalidEnvironment => write!(f, "Invalid environment."), Error::NoEndpointSupplied => write!(f, "No endpoint supplied. Supply an endpoint either via `--endpoint` or via `--config`."),