Skip to main content

basic_auth/
main.rs

1use std::env;
2use std::error::Error;
3
4use nano_get::{Client, Request};
5
6fn env_or_default(name: &str, fallback: &str) -> String {
7    env::var(name).unwrap_or_else(|_| fallback.to_string())
8}
9
10fn print_setup() {
11    println!("The basic-auth example needs a real protected endpoint.");
12    println!("Set NANO_GET_BASIC_AUTH_URL to a URL that challenges with HTTP Basic auth.");
13    println!("Optional overrides:");
14    println!("  NANO_GET_BASIC_AUTH_USER");
15    println!("  NANO_GET_BASIC_AUTH_PASS");
16}
17
18fn main() -> Result<(), Box<dyn Error>> {
19    let Some(url) = env::var("NANO_GET_BASIC_AUTH_URL").ok() else {
20        print_setup();
21        return Ok(());
22    };
23
24    let user = env_or_default("NANO_GET_BASIC_AUTH_USER", "demo-user");
25    let pass = env_or_default("NANO_GET_BASIC_AUTH_PASS", "demo-pass");
26
27    let challenge_driven = Client::builder()
28        .basic_auth(user.clone(), pass.clone())
29        .build()
30        .execute(Request::get(&url)?)?;
31
32    let preemptive = Client::builder()
33        .preemptive_basic_auth(user.clone(), pass.clone())
34        .build()
35        .execute(Request::get(&url)?)?;
36
37    let mut request = Request::get(&url)?;
38    request.basic_auth(user, pass)?;
39    let manual = request.execute()?;
40
41    println!("basic-auth example");
42    println!("challenge-driven status: {}", challenge_driven.status_code);
43    println!("preemptive status: {}", preemptive.status_code);
44    println!("request-level override status: {}", manual.status_code);
45
46    Ok(())
47}