5
1
Fork 0
A crate to help you fetch and serve WebFinger resources
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
KitaitiMakoto 51b49e8629 Merge pull request 'Specify async-trait version' (#13) from specify-async-trait-version into main
Reviewed-on: #13
vor 2 Jahren
src Remove unnecessary mut vor 2 Jahren
.gitattributes add git attributes and remove executable bit from files in repo vor 4 Jahren
.gitignore Add support for group: and custom prefixes (fixes #3) vor 5 Jahren
.travis.yml add async tests to travis test script vor 4 Jahren
Cargo.toml Specify async-trait version vor 2 Jahren
LICENSE add git attributes and remove executable bit from files in repo vor 4 Jahren
README.md add git attributes and remove executable bit from files in repo vor 4 Jahren
coverage.sh Try to add codecov vor 5 Jahren

README.md

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
}