use ri::auth::{RiAuthModule, RiAuthConfig};
use ri::core::{RiResult, RiError};
fn main() -> RiResult<()> {
println!("=== Ri Authentication Module Example ===\n");
let auth_config = RiAuthConfig {
enabled: true,
jwt_secret: "your-secret-key-here".to_string(),
jwt_expiry_secs: 3600,
session_timeout_secs: 28800,
oauth_providers: vec![],
enable_api_keys: true,
enable_session_auth: true,
};
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
let auth_module = RiAuthModule::new(auth_config).await;
let jwt_manager = auth_module.jwt_manager();
println!("1. Generating JWT token for user 'user123'...");
let token = jwt_manager.generate_token(
"user123",
vec!["admin".to_string(), "user".to_string()],
vec!["read:data".to_string(), "write:data".to_string()],
)?;
println!(" Token generated: {}...\n", &token[..50]);
println!("2. Validating JWT token...");
let claims = jwt_manager.validate_token(&token)?;
println!(" Token valid for user: {}", claims.sub);
println!(" Token expires at: {:?}", claims.exp);
println!(" Token roles: {:?}\n", claims.roles);
println!("3. Creating user session...");
let session_manager = auth_module.session_manager();
let session_id = session_manager.write().await.create_session(
"user123".to_string(),
Some("192.168.1.100".to_string()),
Some("Mozilla/5.0".to_string()),
).await?;
println!(" Session created with ID: {}\n", session_id);
println!("4. Retrieving session by ID...");
let session = session_manager.read().await.get_session(&session_id).await?;
if let Some(session_ref) = session {
println!(" Session found for user: {}", session_ref.user_id);
println!(" Session IP: {:?}", session_ref.ip_address);
println!(" Session expires at: {}\n", session_ref.expires_at);
if !session_ref.is_expired() {
println!("5. Session is active and not expired\n");
}
}
println!("6. Extending session...");
session_manager.write().await.extend_session(&session_id).await?;
println!(" Session extended successfully\n");
println!("7. Checking permissions...");
let has_admin = claims.roles.contains(&"admin".to_string());
let has_superuser = claims.roles.contains(&"superuser".to_string());
println!(" Has 'admin' role: {}", has_admin);
println!(" Has 'superuser' role: {}\n", has_superuser);
println!("=== Authentication Example Completed ===");
Ok::<(), RiError>(())
})
}