use runegate::auth::{create_token, get_jwt_secret, get_magic_link_expiry, verify_token};
use std::env;
fn load_env_file() {
let env_paths = [
"/etc/runegate/runegate.env", ".env", ];
for path in &env_paths {
match dotenvy::from_path(path) {
Ok(_) => {
println!("DEBUG: Loaded environment configuration from {}", path);
return;
}
Err(_) => {
}
}
}
println!("DEBUG: No .env file found, using system environment variables only");
}
fn main() {
load_env_file();
let args: Vec<String> = env::args().collect();
if args.len() < 2 {
println!("Usage: cargo run --example test_jwt_validation <email> [action]");
println!("Actions:");
println!(" - create: Generate a token for the email (default)");
println!(" - verify: Verify a token");
return;
}
let email = &args[1];
let action = if args.len() > 2 { &args[2] } else { "create" };
let secret = get_jwt_secret();
println!("DEBUG: Using JWT secret length: {} bytes", secret.len());
match action.as_ref() {
"create" => {
let expiry_minutes = get_magic_link_expiry();
match create_token(email, expiry_minutes) {
Ok(token) => {
println!("✅ JWT Token generated for {}", email);
println!("\nToken: {}", token);
let auth_url = format!("http://localhost:7870/auth?token={}", token);
println!("\n🔐 Authentication URL:");
println!("{}", auth_url);
println!("\n📋 For testing with curl:");
println!("curl -v \"{}\"", auth_url);
println!(
"\n⚠️ Note: This token will expire in {} minutes.",
expiry_minutes
);
println!("\n🔍 Attempting immediate verification:");
match verify_token(&token) {
Ok(verified_email) => {
println!(" ✅ Token verified! Email: {}", verified_email);
}
Err(e) => {
println!(" ❌ Verification failed: {}", e);
}
}
}
Err(err) => {
println!("❌ Error generating token: {}", err);
}
}
}
"verify" => {
if args.len() < 3 {
println!("Error: Token required for verification");
return;
}
let token = &args[2];
match verify_token(token) {
Ok(email) => {
println!("✅ Token is valid for user: {}", email);
}
Err(e) => {
println!("❌ Invalid token: {}", e);
}
}
}
_ => {
println!("Unknown action: {}", action);
}
}
}