#actix-web #web-framework #web-server #resources #fetch #client #webfinger

actix-webfinger

用于创建和检索Webfinger资源的类型和辅助函数

20个版本

0.5.0 2023年8月17日
0.4.1 2022年3月8日
0.4.0-beta.52021年12月30日
0.4.0-beta.42021年11月18日
0.1.0 2019年1月28日

#383 in HTTP服务器

每月49次下载
用于 ap-relay

GPL-3.0 许可证

31KB
351

Actix Webfinger

一个库,用于使用Actix Web Web框架解析和提供webfinger对象。

此crate提供的主要功能是通过Actix Web客户端的Webfinger::fetch方法和Actix Web服务器端的Resolver<S>特质实现的。

用法

首先,将Actix Webfinger添加为依赖项

[dependencies]
actix-rt = "2.6.0"
actix-web = "4.0.0"
actix-webfinger = "0.4.0"

然后在您的应用程序中使用它

客户端示例

use actix_webfinger::Webfinger;
use awc::Client;
use std::error::Error;

#[actix_rt::main]
async fn main() -> Result<(), Box<dyn Error>> {
    let client = Client::default();
    let wf = Webfinger::fetch(
        &client,
        Some("acct:"),
        "asonix@localhost:8000",
        "localhost:8000",
        false,
    )
    .await?;

    println!("asonix's webfinger:\n{:#?}", wf);
    Ok(())
}

服务器示例

use actix_web::{middleware::Logger, web::Data, App, HttpServer};
use actix_webfinger::{Resolver, Webfinger};
use std::{error::Error, future::Future, pin::Pin};

#[derive(Clone, Debug)]
pub struct MyState {
    domain: String,
}

pub struct MyResolver;

type LocalBoxFuture<'a, Output> = Pin<Box<dyn Future<Output = Output> + 'a>>;

impl Resolver for MyResolver {
    type State = Data<MyState>;
    type Error = actix_web::error::JsonPayloadError;

    fn find(
        scheme: Option<&str>,
        account: &str,
        domain: &str,
        state: Data<MyState>,
    ) -> LocalBoxFuture<'static, Result<Option<Webfinger>, Self::Error>> {
        let w = if scheme == Some("acct:") && domain == state.domain {
            Some(Webfinger::new(&format!("{}@{}", account, domain)))
        } else {
            None
        };

        Box::pin(async move { Ok(w) })
    }
}

#[actix_rt::main]
async fn main() -> Result<(), Box<dyn Error>> {
    std::env::set_var("RUST_LOG", "info");
    pretty_env_logger::init();
    HttpServer::new(|| {
        App::new()
            .app_data(Data::new(MyState {
                domain: "localhost:8000".to_owned(),
            }))
            .wrap(Logger::default())
            .service(actix_webfinger::resource::<MyResolver>())
    })
    .bind("127.0.0.1:8000")?
    .run()
    .await?;

    Ok(())
}

贡献

请随意为任何您发现的问题提交问题。请注意,任何贡献的代码都将按照GPLv3许可证授权。

许可证

版权©2020 Riley Trautman

Actix Webfinger是自由软件:您可以按照自由软件基金会发布的GNU通用公共许可证的条款重新分发和/或修改它,许可证版本为3,或(根据您的要求)任何更高版本。

Actix Webfinger是在希望它将是有用的前提下分发的,但不提供任何保证;甚至没有关于适销性或特定用途适用性的暗示性保证。有关更多详细信息,请参阅GNU通用公共许可证。此文件是Tokio ZMQ的一部分。

您应该已经随Actix Webfinger一起收到GNU通用公共许可证的副本。如果没有,请参阅http://www.gnu.org/licenses/

依赖项

~14–26MB
~459K SLoC