Skip to main content

apm/cmd/
register.rs

1use anyhow::Result;
2use std::path::Path;
3
4pub fn run(root: &Path, username: &str, inferred: bool) -> Result<()> {
5    if inferred {
6        eprintln!("Registering as: {username}");
7    }
8    let config = apm_core::config::Config::load(root)?;
9    let url = format!("{}/api/auth/otp", config.server.url);
10    let body = serde_json::json!({"username": username});
11    let client = reqwest::blocking::Client::new();
12    let resp = client
13        .post(&url)
14        .json(&body)
15        .send()
16        .map_err(|e| anyhow::anyhow!("error: cannot connect to apm-server: {e}"))?;
17    if !resp.status().is_success() {
18        let status = resp.status();
19        eprintln!("error: server returned {status}");
20        std::process::exit(1);
21    }
22    let json: serde_json::Value = resp
23        .json()
24        .map_err(|e| anyhow::anyhow!("error: invalid response from server: {e}"))?;
25    let otp = json
26        .get("otp")
27        .and_then(|v| v.as_str())
28        .ok_or_else(|| anyhow::anyhow!("error: missing otp field in response"))?;
29    println!("{otp}");
30    Ok(())
31}