26个版本 (13个破坏性更新)
0.14.0 | 2023年9月13日 |
---|---|
0.12.0 | 2023年8月7日 |
0.11.0 | 2023年7月16日 |
0.5.3 | 2023年3月26日 |
1582 在 Web编程 中
每月下载 149 次
95KB
2.5K SLoC
Rust中对Proton REST API的非官方绑定
此项目旨在在Rust中实现Proton REST API。它完全基于从 go-proton-api 和 Proton Bridge 仓库中可用的信息。
免责声明
这是一个 非官方 项目,处于 开发中。自行承担此仓库中代码的风险。如果发生数据丢失或账户被封锁,项目作者将不承担任何责任。
构建要求
- Rust
- Go >= 1.19
此库当前使用一个Go库来处理身份验证的SRP部分。虽然Rust有srpcrate可用,但为了避免与Proton服务器的问题,我们目前使用go-proton-api内部使用的库。
安全性
此项目当前需要使用unsafe与srp的Go绑定进行交互
lib.rs
:
Proton REST API的非官方Rust绑定。它完全基于从 go-proton-api 和 Proton Bridge 仓库中可用的信息。
免责声明
这些是 非官方 绑定,自行承担风险。如果你遇到数据丢失或账户被封锁,作者将不承担责任。
入门
异步登录新会话
use proton_api_rs::{http, Session, SessionType, http::Sequence};
use proton_api_rs::domain::SecretString;
async fn example<T:http::ClientAsync>() {
let client = http::ClientBuilder::new()
.user_agent("MyUserAgent/0.0.0")
.base_url("server_url")
.app_version("[email protected]")
.build::<T>().unwrap();
let session = match Session::login(&"[email protected]", &SecretString::new("my_proton_password".into()), None).do_async(&client).await.unwrap(){
// Session is authenticated, no 2FA verifications necessary.
SessionType::Authenticated(c) => c,
// Session needs 2FA TOTP auth.
SessionType::AwaitingTotp(t) => {
t.submit_totp("000000").do_async(&client).await.unwrap()
}
};
// session is now authenticated and can access the rest of the API.
// ...
session.logout().do_async(&client).await.unwrap();
}
同步登录新会话
use proton_api_rs::{Session, http, SessionType, http::Sequence};
use proton_api_rs::domain::SecretString;
fn example<T:http::ClientSync>() {
let client = http::ClientBuilder::new()
.user_agent("MyUserAgent/0.0.0")
.base_url("server_url")
.app_version("[email protected]")
.build::<T>().unwrap();
let session = match Session::login("[email protected]", &SecretString::new("my_proton_password".into()), None).do_sync(&client).unwrap(){
// Session is authenticated, no 2FA verifications necessary.
SessionType::Authenticated(c) => c,
// Session needs 2FA TOTP auth.
SessionType::AwaitingTotp(t) => {
t.submit_totp("000000").do_sync(&client).unwrap()
}
};
// session is now authenticated and can access the rest of the API.
// ...
session.logout().do_sync(&client).unwrap();
}
使用先前会话的令牌登录
use proton_api_rs::{http, Session, SessionType, http::Sequence};
use proton_api_rs::domain::UserUid;
async fn example<T:http::ClientAsync>() {
let user_uid = "user_uid".into();
let user_refresh_token = "token";
let client = http::ClientBuilder::new()
.user_agent("MyUserAgent/0.0.0")
.base_url("server_url")
.app_version("[email protected]")
.build::<T>().unwrap();
let session = Session::refresh(&user_uid, &user_refresh_token).do_async(&client).await.unwrap();
// session is now authenticated and can access the rest of the API.
// ...
session.logout().do_async(&client).await.unwrap();
}
依赖项
~2–17MB
~258K SLoC