use tapis_authenticator::client::TapisAuthenticator;
use tapis_authenticator::models::NewToken;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("đ Tapis Authenticator SDK Examples");
println!("ââââââââââââââââââââââââââââââââââââââââ\n");
println!("đ Example 0: Create JWT Token (No Auth Required)");
println!("âââââââââââââââââââââââââââââââââââââââââââââââââââ");
let tapis_host = std::env::var("TAPIS_HOST").unwrap_or_else(|_| "tacc.tapis.io".to_string());
let base_url = format!("https://{}", tapis_host);
println!("đ Using Tapis host: {}", tapis_host);
println!("đĄ Base URL: {}\n", base_url);
let public_client = TapisAuthenticator::new(
&base_url,
None, )?;
if let (Ok(username), Ok(password)) = (
std::env::var("TAPIS_USERNAME"),
std::env::var("TAPIS_PASSWORD"),
) {
println!("â Creating JWT token for user: {}", username);
let new_token = NewToken {
username: Some(username),
password: Some(password),
grant_type: Some("password".to_string()),
..Default::default()
};
match public_client.tokens.create_token(new_token).await {
Ok(response) => {
println!("â JWT token created successfully!");
println!(" Status: {:?}", response.status);
if let Some(result) = response.result {
if let Some(access_token_str) = result.access_token.access_token {
println!(" Access Token: {}", access_token_str);
std::env::set_var("TAPIS_TOKEN", access_token_str);
}
if let Some(expires_in) = result.access_token.expires_in {
println!(" Expires In: {} seconds", expires_in);
}
}
}
Err(e) => eprintln!("â Failed to create token: {:?}", e),
}
} else {
println!("âšī¸ Skipping token creation - set TAPIS_USERNAME and TAPIS_PASSWORD to test");
println!(" Example: export TAPIS_USERNAME=myuser TAPIS_PASSWORD=mypass");
}
println!();
let jwt_token = match std::env::var("TAPIS_TOKEN") {
Ok(token) => token,
Err(_) => {
println!("âšī¸ TAPIS_TOKEN not set. Skipping authenticated examples.");
println!(" Set it with: export TAPIS_TOKEN='your_token'");
println!("\nâ
Example completed (partial - no auth token)");
return Ok(());
}
};
println!("đ§ Creating authenticated TapisAuthenticator client...");
let client = TapisAuthenticator::new(
&base_url,
Some(&jwt_token),
)?;
println!("â
Client created successfully!\n");
println!("đ Example 1: Health Check");
println!("ââââââââââââââââââââââââââ");
match client.health_check.hello().await {
Ok(response) => {
println!("â Health check passed");
println!(" Message: {:?}", response.message);
}
Err(e) => eprintln!("â Health check failed: {:?}", e),
}
println!();
println!("đ Example 2: Server Metadata");
println!("ââââââââââââââââââââââââââââââ");
match client.metadata.get_server_metadata().await {
Ok(response) => {
println!("â Server metadata retrieved");
println!(" Status: {:?}", response.status);
println!(" Version: {:?}", response.version);
}
Err(e) => eprintln!("â Failed to get metadata: {:?}", e),
}
println!();
println!("đ Example 3: User Information");
println!("âââââââââââââââââââââââââââââââ");
match client.profiles.get_userinfo().await {
Ok(response) => {
println!("â User information retrieved");
println!(" Status: {:?}", response.status);
if let Some(result) = response.result {
println!(" User data: {:#?}", result);
}
}
Err(e) => eprintln!("â Failed to get user info: {:?}", e),
}
println!();
println!("đ Example 4: List OAuth2 Clients");
println!("âââââââââââââââââââââââââââââââââââ");
match client.clients.list_clients(Some(10), Some(0)).await {
Ok(response) => {
println!("â OAuth2 clients retrieved");
println!(" Status: {:?}", response.status);
if let Some(result) = response.result {
println!(" Number of clients: {}", result.len());
for (i, client_info) in result.iter().enumerate().take(3) {
println!(" Client {}: {:#?}", i + 1, client_info);
}
}
}
Err(e) => eprintln!("â Failed to list clients: {:?}", e),
}
println!();
println!("â
All examples completed!");
println!();
println!("đ Available API Modules:");
println!(" âĸ client.admin - Tenant configuration management");
println!(" âĸ client.clients - OAuth2 client management");
println!(" âĸ client.health_check - Health and readiness checks");
println!(" âĸ client.metadata - Server metadata and version info");
println!(" âĸ client.profiles - User profile management");
println!(" âĸ client.tokens - Token creation and management");
Ok(())
}