#联盟 #去中心化 #资源 #获取 #服务 #获取中 #acct

webfinger

一个用于获取和提供服务WebFinger资源的crate。

8个版本 (4个破坏性更新)

0.5.1 2022年6月12日
0.5.0 2019年7月31日
0.4.1 2019年5月11日
0.4.0 2019年3月17日
0.1.0 2018年6月18日

#1116 in Web编程

Download history 30/week @ 2024-03-14 14/week @ 2024-03-21 36/week @ 2024-03-28 28/week @ 2024-04-04 28/week @ 2024-04-11 15/week @ 2024-04-18 19/week @ 2024-04-25 6/week @ 2024-05-02 8/week @ 2024-05-09 13/week @ 2024-05-16 15/week @ 2024-05-23 21/week @ 2024-05-30 14/week @ 2024-06-06 22/week @ 2024-06-13 17/week @ 2024-06-20 7/week @ 2024-06-27

每月下载量 62次

GPL-3.0许可证

22KB
467

WebFinger Crates.io Libraries.io依赖状态GitHub仓库 Codecov 构建状态

一个用于获取和提供服务WebFinger资源的crate。

示例

获取资源

use webfinger::resolve;

fn main() {
    let res = resolve("acct:[email protected]", 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);
    }
}

服务资源

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
}

依赖

~3–19MB
~246K SLoC