use anyhow::Result;
use crate::cli::ConnectAction;
use crate::output;
pub async fn run(
action: ConnectAction,
env_override: Option<&str>,
output_fmt: &crate::cli::OutputFormat,
) -> Result<()> {
let client = crate::client::load_client(env_override)?;
match action {
ConnectAction::AppCreate {
name,
description,
site,
redirect_uri,
logo,
} => {
let mut body = serde_json::json!({ "name": name });
if let Some(d) = description {
body["description"] = serde_json::json!(d);
}
if let Some(s) = site {
body["site"] = serde_json::json!(s);
}
if let Some(r) = redirect_uri {
body["redirect_uri"] = serde_json::json!(r);
}
if let Some(l) = logo {
body["logo"] = serde_json::json!(l);
}
let result = pagbank_sdk::endpoints::connect::create_app(&client, &body).await?;
let val = serde_json::to_value(result)?;
match output_fmt {
crate::cli::OutputFormat::Json => output::print_json(&val),
crate::cli::OutputFormat::Table => {
output::print_object_table("Aplicação Connect Criada", &val)
}
}
Ok(())
}
ConnectAction::AppGet { id } => {
let result = pagbank_sdk::endpoints::connect::get_app(&client, &id).await?;
let val = serde_json::to_value(result)?;
match output_fmt {
crate::cli::OutputFormat::Json => output::print_json(&val),
crate::cli::OutputFormat::Table => {
output::print_object_table("Aplicação Connect", &val)
}
}
Ok(())
}
ConnectAction::Authorize {
app_id,
redirect_uri,
scope,
} => {
let url = pagbank_sdk::endpoints::connect::get_authorize_url(
&client,
&app_id,
&redirect_uri,
&scope,
)
.await;
output::print_info(&format!("URL de autorização:\n{url}"));
Ok(())
}
ConnectAction::Token { code } => {
let client_id = client.config.client_id.as_deref().unwrap_or("");
let client_secret = client.config.client_secret.as_deref().unwrap_or("");
let body = serde_json::json!({
"grant_type": "authorization_code",
"code": code,
"client_id": client_id,
"client_secret": client_secret,
});
let result = pagbank_sdk::endpoints::connect::create_token(&client, &body).await?;
let val = serde_json::to_value(result)?;
match output_fmt {
crate::cli::OutputFormat::Json => output::print_json(&val),
crate::cli::OutputFormat::Table => output::print_object_table("Access Token", &val),
}
Ok(())
}
ConnectAction::TokenRefresh { refresh_token } => {
let client_id = client.config.client_id.as_deref().unwrap_or("");
let client_secret = client.config.client_secret.as_deref().unwrap_or("");
let body = serde_json::json!({
"grant_type": "refresh_token",
"refresh_token": refresh_token,
"client_id": client_id,
"client_secret": client_secret,
});
let result = pagbank_sdk::endpoints::connect::refresh_token(&client, &body).await?;
let val = serde_json::to_value(result)?;
match output_fmt {
crate::cli::OutputFormat::Json => output::print_json(&val),
crate::cli::OutputFormat::Table => {
output::print_object_table("Token Renovado", &val)
}
}
Ok(())
}
ConnectAction::TokenRevoke { token } => {
let body = serde_json::json!({ "token": token });
pagbank_sdk::endpoints::connect::revoke_token(&client, &body).await?;
output::print_success("Token revogado com sucesso");
Ok(())
}
ConnectAction::AuthorizeSms {
bank_branch,
account_number,
} => {
let body = serde_json::json!({
"bank_branch": bank_branch,
"account_number": account_number,
});
let result = pagbank_sdk::endpoints::connect::create_sms_auth(&client, &body).await?;
let val = serde_json::to_value(result)?;
match output_fmt {
crate::cli::OutputFormat::Json => output::print_json(&val),
crate::cli::OutputFormat::Table => {
output::print_object_table("Autorização SMS", &val)
}
}
Ok(())
}
}
}