Skip to main content

token_check/
token_check.rs

1use baidu_netdisk_sdk::auth::AccessToken;
2use baidu_netdisk_sdk::BaiduNetDiskClient;
3use std::time::SystemTime;
4use std::time::UNIX_EPOCH;
5
6#[tokio::main]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8    // Initialize logger
9    env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("debug")).init();
10
11    println!("=== Token Validation and Refresh Test ===");
12    println!();
13
14    // Create client
15    let client = BaiduNetDiskClient::builder().build()?;
16
17    println!("Client created successfully");
18    println!();
19
20    // Test 1: Load token from environment
21    println!("Test 1: Loading token from environment...");
22    client.load_token_from_env()?;
23
24    let token = client.get_valid_token().await?;
25    println!("Token loaded successfully: {}", token.access_token);
26    println!();
27
28    // Test 2: Check token validity
29    println!("Test 2: Checking token validity...");
30    println!("Token acquired at: {}", token.acquired_at);
31    println!("Token expires in: {} seconds", token.expires_in);
32    println!("Token remaining seconds: {}", token.remaining_seconds());
33    println!("Token is expired: {}", token.is_expired());
34
35    if !token.is_expired() {
36        println!("✓ Token is valid");
37    } else {
38        println!("✗ Token is expired");
39    }
40    println!();
41
42    // Test 3: Test needs_refresh logic
43    println!("Test 3: Testing needs_refresh logic...");
44    let needs_refresh = client.token_provider().needs_refresh()?;
45    println!("Token needs refresh: {}", needs_refresh);
46
47    if !needs_refresh {
48        println!("✓ Token doesn't need refresh");
49    } else {
50        println!("✗ Token needs refresh");
51    }
52    println!();
53
54    // Test 4: Try to get valid token
55    println!("Test 4: Getting valid token...");
56    match client.get_valid_token().await {
57        Ok(valid_token) => {
58            println!("✓ Got valid token: {}", valid_token.access_token);
59            println!(
60                "Token expires in: {} seconds",
61                valid_token.remaining_seconds()
62            );
63        }
64        Err(e) => {
65            println!("✗ Failed to get valid token: {}", e);
66            println!("Note: This is expected if refresh token is invalid/mock");
67        }
68    }
69    println!();
70
71    // Test 5: Test with an expired token
72    println!("Test 5: Testing with expired token...");
73    let expired_token = AccessToken {
74        access_token: "expired_token".to_string(),
75        expires_in: 1, // 1 second
76        refresh_token: "mock_refresh_token".to_string(),
77        scope: "basic netdisk".to_string(),
78        session_key: "".to_string(),
79        session_secret: "".to_string(),
80        acquired_at: SystemTime::now()
81            .duration_since(UNIX_EPOCH)
82            .unwrap_or_default()
83            .as_secs()
84            - 10, // 10 seconds ago
85    };
86
87    client.set_access_token(expired_token.clone())?;
88    println!(
89        "Expired token remaining seconds: {}",
90        expired_token.remaining_seconds()
91    );
92    println!("Expired token is_expired: {}", expired_token.is_expired());
93
94    if expired_token.is_expired() {
95        println!("✓ Expired token correctly identified");
96    } else {
97        println!("✗ Failed to identify expired token");
98    }
99    println!();
100
101    println!("=== Test completed ===");
102    Ok(())
103}