A crate to help you fetch and serve WebFinger resources
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
Gelez 4e8f12810c
Merge pull request #11 from Plume-org/feat/async-trait
11ヶ月前
src add tests for AsyncResolver; use cargo clippy for further guidance. 11ヶ月前
.gitattributes add git attributes and remove executable bit from files in repo 11ヶ月前
.gitignore Initial commit 2年前
.travis.yml add async tests to travis test script 11ヶ月前
Cargo.toml update mockito to fix its compile issue 11ヶ月前
LICENSE Add a license file (GPL-3.0) 2年前
README.md Add some badges! 2年前
coverage.sh Try to add codecov 2年前

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
}