#federation #decentralization #resources #fetch #serve #find #fetching

webfinger

A crate to help you fetch and serve WebFinger resources

8 releases (4 breaking)

0.5.1 Jun 12, 2022
0.5.0 Jul 31, 2019
0.4.1 May 11, 2019
0.4.0 Mar 17, 2019
0.1.0 Jun 18, 2018

#9 in #federation

Download history 4/week @ 2024-08-29 4/week @ 2024-09-05 6/week @ 2024-09-12 10/week @ 2024-09-19 27/week @ 2024-09-26 22/week @ 2024-10-03 12/week @ 2024-10-10 7/week @ 2024-10-17 1/week @ 2024-10-24 2/week @ 2024-10-31 3/week @ 2024-11-14 9/week @ 2024-11-21 7/week @ 2024-11-28 14/week @ 2024-12-05 31/week @ 2024-12-12

62 downloads per month

GPL-3.0 license

22KB
467 lines

WebFinger Crates.io Libraries.io dependency status for GitHub repo Codecov Build Status

A crate to help you fetch and serve WebFinger resources.

Examples

Fetching a resource:

use webfinger::resolve;

fn main() {
    let res = resolve("acct:test@example.org", true).expect("Error while fetching resource");

    println!("Places to get more informations about {}:", res.subject);
    for link in res.links.into_iter() {
        println!("- {}", link.href);
    }
}

Serving resources:

use webfinger::Resolver;

pub struct MyResolver;

impl Resolver<DatabaseConnection> for MyResolver {
    fn instance_domain<'a>() -> &'a str {
        "instance.tld"
    }

    fn find(acct: String, db: DatabaseConnection) -> Result<Webfinger, ResolverError> {
        if let Some(user) = db.find_user_by_name(acct) {
            Ok(Webfinger {
                subject: acct.clone(),
                aliases: vec![acct.clone()],
                links: vec![
                    Link {
                        rel: "http://webfinger.net/rel/profile-page".to_string(),
                        mime_type: None,
                        href: user.profile_url()
                    }
                ]
            })
        } else {
            Err(ResolverError::NotFound)
        }
    }
}

fn main() {
    // Start a web server and map /.well-known/webfinger to a function calling MyResolver::endpoint
}

Dependencies

~4–16MB
~221K SLoC