use std::time::Duration;
use pb_mapper::{Client, ClientConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let ttl = Duration::from_secs(
std::env::args()
.nth(1)
.and_then(|raw| raw.parse().ok())
.unwrap_or(3600),
);
let client = Client::new(ClientConfig {
server: std::env::var("PB_MAPPER_SERVER")?,
credential: std::env::var("MSG_HEADER_KEY")?,
keep_alive: false,
namespace: None,
})?;
let admin = client.admin()?;
let issued = admin.issue_key(ttl, Some("sdk-example".into())).await?;
println!(
"issued key {} ({}), expires at {}",
issued.key_id, issued.state, issued.expires_at
);
println!("hand this to the workload: {}", issued.credential);
let shown = admin.show_key(issued.key_id).await?;
println!("show: label={:?} state={}", shown.label, shown.state);
let revealed = admin.reveal_key(issued.key_id).await?;
assert_eq!(revealed.credential, issued.credential);
let renewed = admin.renew_key(issued.key_id, ttl * 2).await?;
println!("renewed until {}", renewed.expires_at);
for key in admin.list_keys_all().await? {
println!(" key {} {:?} {}", key.key_id, key.label, key.state);
}
let revoked = admin.revoke_key(issued.key_id).await?;
println!("revoked key {}: {}", revoked.key_id, revoked.state);
println!("garbage-collected {} credential(s)", admin.gc_keys().await?);
let status = admin.auth_status().await?;
println!(
"auth: {} active / {} capacity, {} successes, {} failures, legacy {:?}",
status.active_keys,
status.capacity,
status.auth_successes,
status.auth_failures,
status.legacy_protocol
);
Ok(())
}