3 个不稳定版本
0.2.0 | 2021 年 12 月 5 日 |
---|---|
0.1.1 | 2021 年 11 月 30 日 |
0.1.0 | 2021 年 11 月 30 日 |
#13 in #activity-stream
98KB
2.5K SLoC
APub:构建 ActivityPub 服务器实用工具
交付
Deliver
特性定义了如何将对象发送到远程服务器。本包提供了三种 Deliver
实现:一个基于 Reqwest,一个基于 Awc,另一个基于后台任务,其中 HTTP 部分由另一个 Deliver 实现支持。
更多信息,请参阅 clients
模块
获取
Repo
特性定义了如何从一个地方获取对象。这足以用于从数据库获取以及从远程服务器获取。默认情况下没有提供数据库实现,通过 async_trait
的帮助,实现 Repo
简单易行。Apub 提供了两种 Repo
的 HTTP 实现,一个基于 Reqwest,一个基于 Apub。
更多信息,请参阅 clients
模块
接收
Ingest
特性是接受活动进入系统的主要点。 Ingest
对其摄入的类型是通用的。这允许单个类型接受多种不同实现的活动。可能值得将 Ingest<DeleteActivity>
与 Ingest<UndoActivity>
的实现不同。此外,实现可以实施 Ingest<A> where A: SomeTrait
。创建通用的 Ingest
实现将有助于在活动类型之间更好地重用代码。
有关更多类型和特性,以帮助接受活动,请参阅 ingest
模块
请求实用工具
当您正在构建一个经常进行HTTP请求的应用程序时,您可能希望预先阻止一个请求继续进行。为此行为,apub提供了Session
特质。当一个请求通过Awc或Reqwest的Repo或Deliver实现进行时,会检查当前的Session
,以查看给定的请求是否应该继续,当请求完成时,当前会话会通知请求是成功完成还是失败。默认提供了两种Session类型:BreakerSession
和RequestCountSession
。BreakerSession
旨在在应用程序所做的所有请求之间共享,并将停止对配置持续时间内有太多连续失败的域的请求。RequestCountSession
将跟踪客户端发出的总请求数量,如果超过配置的限制,则防止未来的请求。对于每个Ingest
应实例化一个新的RequestCountSession
。
请求验证
与交通类似,apub为密码学提供了两种实现,一种基于OpenSSL,另一种基于Rustcrypto库。当使用提供的HTTP Repo实现时,HTTP签名和HTTP摘要将自动应用于所有请求。
对于处理公钥和私钥,提供了两个额外的特质:PublicKeyRepo
和PrivateKeyRepo
。这些特质定义了一个API,用于存储和检索键,服务器集成可以依赖这些键进行签名和验证请求。
有关更多信息,请参阅cryptography
和activitypub::keys
模块。
ActivityPub 实现
Apub提供了一些处理几种ActivityPub对象的基特质。这些特质远非ActivityPub规范的完美表示,而是旨在简化常见类型的处理。
此外,apub还提供了一些简单具体的实现,包括对象、演员、活动和一个公钥。这些实现可能过于基础,没有太多帮助,但包括在内,以帮助原型设计。《code>SimplePublicKey类型用于PublicKeyRepo
API。
有关更多信息,请参阅activitypub
模块。
功能标志
功能 | 描述 | 默认 |
---|---|---|
完整 | 启用每个功能 | false |
with-actix-web | 启用apub的actix-web集成 | false |
with-awc | 启用apub的awc Repo和Deliver | false |
with-background-jobs | 启用apub的background_jobs交付集成 | false |
with-openssl | 启用OpenSSL的HTTP签名 | false |
with-reqwest | 启用apub的reqwest Repo和Deliver | false |
with-rustcrypto | 启用rustcrypto的HTTP签名 | false |
utils | 启用非必需的辅助类型和特质 | true |
示例
有关具体实现的示例,请参阅示例目录。
预制的Repo和Deliver实用工具实现,用于处理活动。为Ingest实现预定义的验证器,与HTTP服务器集成的apub,actix-web集成。用于构建ActivityPub服务器的类型和特质,扩展ActivityPub特质,通过FullRepo进行解引用。实现ActivityPub特质的具体类型,处理公钥和私钥的帮助工具,更多处理公钥的类型和特质,会话实现和额外特质,用于HTTP签名的加密实现,更多处理摘要的特质,更多用于签名和验证的openssl类型,更多用于签名和验证的rustcrypto类型,更多签名和验证的特质
依赖项
~1-16MB
~237K SLoC