Skip to main content

account_management/
account_management.rs

1use dvrip_rs::{Authentication, Connection, DVRIPCam, UserManagement};
2use std::time::Duration;
3
4#[tokio::main]
5async fn main() -> Result<(), Box<dyn std::error::Error>> {
6    let args: Vec<String> = std::env::args().collect();
7    if args.len() < 4 {
8        println!("Usage: {} <IP> <Username> <Password>", args[0]);
9        return Ok(());
10    }
11
12    let ip = &args[1];
13    let user = &args[2];
14    let pass = &args[3];
15
16    let mut cam = DVRIPCam::new(ip);
17
18    cam.connect(Duration::from_secs(5)).await?;
19    cam.login(user, pass).await?;
20
21    println!("--- USER LIST ---");
22    match cam.get_users().await {
23        Ok(users) => {
24            for user in users {
25                let name = user
26                    .get("Name")
27                    .and_then(|n| n.as_str())
28                    .unwrap_or("Unknown");
29                let group = user.get("Group").and_then(|g| g.as_str()).unwrap_or("None");
30                println!(" - User: {} [Group: {}]", name, group);
31            }
32        }
33        Err(e) => eprintln!("Failed to get users: {}", e),
34    }
35
36    println!("\n--- GROUP LIST ---");
37    match cam.get_groups().await {
38        Ok(groups) => {
39            for group in groups {
40                let name = group
41                    .get("Name")
42                    .and_then(|n| n.as_str())
43                    .unwrap_or("Unknown");
44                println!(" - Group: {}", name);
45            }
46        }
47        Err(e) => eprintln!("Failed to get groups: {}", e),
48    }
49
50    cam.close().await?;
51    Ok(())
52}