1use webfinger_rs::{WebFingerRequest, WebFingerResponse};
2
3const AVATAR_REL: &str = "http://webfinger.net/rel/avatar";
4const HOST: &str = "localhost:3000";
5const PROFILE_PAGE_REL: &str = "http://webfinger.net/rel/profile-page";
6const SUBJECT: &str = "acct:carol@localhost";
7
8#[tokio::main]
9async fn main() -> Result<(), Box<dyn std::error::Error>> {
10 let _ = rustls::crypto::aws_lc_rs::default_provider().install_default();
11
12 let request = WebFingerRequest::builder(SUBJECT)?
13 .host(HOST)
14 .rel(PROFILE_PAGE_REL)
15 .rel(AVATAR_REL)
16 .build();
17
18 let reqwest_request = request.try_into_reqwest()?;
19 eprintln!("GET {}", reqwest_request.url());
20
21 let client = reqwest::Client::builder()
22 .danger_accept_invalid_certs(true)
23 .https_only(true)
24 .build()?;
25 let response = client.execute(reqwest_request).await?;
26 let response = WebFingerResponse::try_from_reqwest(response).await?;
27
28 println!("Subject: {}", response.subject);
29 for rel in [PROFILE_PAGE_REL, AVATAR_REL] {
30 if let Some(href) = response
31 .links
32 .iter()
33 .find(|link| link.rel.as_ref() == rel)
34 .and_then(|link| link.href.as_ref().map(|href| href.as_ref()))
35 {
36 println!("{rel}: {href}");
37 }
38 }
39 println!("{}", serde_json::to_string_pretty(&response)?);
40 Ok(())
41}