4 个版本 (2 个稳定版)
1.1.0 | 2023 年 8 月 19 日 |
---|---|
1.0.0 | 2023 年 6 月 3 日 |
0.1.1 | 2023 年 5 月 30 日 |
0.1.0 | 2023 年 5 月 30 日 |
在 #reqwest-client 中排名 3
每月下载量 49
33KB
407 行
VAuth - Veeam 认证库
请注意,此库是非官方的,且未经 Veeam 审批或支持。
还请注意,v1 与 v0.1.x 版本之间存在重大更改。
此库用于认证到 Veeam 备份产品的 REST API。它支持认证到 Veeam 备份与复制、Veeam 备份 Microsoft Office 365、VONE 以及 Veeam 云备份产品(AWS、AZURE 和 GCP)。
该库被设计为 reqwest 库的包装器,并提供了一个简单的接口来认证到 Veeam REST API。
该库使用构建器模式来创建带有所需认证头部的 reqwest 客户端。
请注意,该库需要设置 VEEAM_API_PASSWORD 环境变量。这是用于认证到 Veeam REST API 的密码。
此库不是为了成为 Veeam REST API 的全功能库,也没有将其转变为全功能库的意图。
安装
运行以下命令将库添加到您的项目中
cargo add vauth
用法
使用客户端直接登录。
use vauth::{VClientBuilder, Profile, VProfile, build_url, LoginResponse};
use serde_json::Value;
use reqwest::Client;
use anyhow::Result;
use std::env;
use std::fs::{self, File};
use std::io::Write;
#[tokio::main]
async fn main() -> Result<()> {
let mut profile = Profile::get_profile(VProfile::VB365);
// Used for testing
dotenvy::dotenv()?;
let username = env::var("VEEAM_API_USERNAME").unwrap();
let address = env::var("VB365_API_ADDRESS").unwrap();
let (client, login_response) = VClientBuilder::new(&address, username)
.insecure()
.build(&mut profile)
.await?;
// Save the token for later use
let mut json_file = fs::File::create(&"token.json".to_string())?;
let token_string = serde_json::to_string_pretty(&login_response)?;
json_file.write_all(token_string.as_bytes())?;
let endpoint = build_url(&address, &"Jobs".to_string(), &profile)?;
let response: Value = client.get(&endpoint).send().await?.json().await?;
println!("{:#?}", response);
Ok(())
}
当调用构建方法时,库将尝试认证到 Veeam REST API,并返回预加载认证头部的 reqwest 客户端以及包含访问令牌(在一个元组中)的响应结构。
然后,您可以使用 reqwest 客户端立即向 Veeam REST API 发送请求,以及保存访问令牌以供以后使用。
请注意,该库使用 async/await,因此需要使用 tokio 运行时。
重用保存的响应结构。
use vauth::{Profile, VProfile, build_url, LoginResponse, build_auth_headers};
use serde_json::Value;
use reqwest::Client;
use anyhow::Result;
use std::env;
use std::fs;
#[tokio::main]
async fn main() -> Result<()> {
let mut profile = Profile::get_profile(VProfile::VB365);
// Used for testing
dotenvy::dotenv()?;
let address = env::var("VB365_API_ADDRESS")?;
let token_path = env::var("TOKEN_PATH")?;
let login_response: LoginResponse = {
let data = fs::read_to_string(token_path)?;
serde_json::from_str(&data)?
};
let client = reqwest::Client::builder()
.danger_accept_invalid_certs(true)
.build()?;
let headers = build_auth_headers(&login_response.access_token, &profile);
let endpoint = build_url(&address, &"Jobs".to_string(), &profile)?;
let response: Value = client.get(&endpoint).headers(headers).send().await?.json().await?;
println!("{:#?}", response);
Ok(())
}
默认配置文件
库为每个 API 提供默认配置文件,我将努力保持其更新。
默认配置文件如下
配置文件 | 端口 | API 版本 | X-API 版本 |
---|---|---|---|
VBR | 9419 | v1 | 1.1-rev1 |
企业管理器 | 9398 | - | - |
VB365 | 4443 | v7 | - |
VBAWS | 11005 | v1 | 1.1-rev1 |
VBGCP | 13140 | v1 | 1.2-rev0 |
VBAZURE | - | v5 | - |
VONE | 1239 | v2.1 | - |
最后更新:2023 年 5 月 30 日
您可以在构建客户端之前使用可用方法修改默认值。
let client: Client = VClientBuilder::new(&address, username)
.insecure()
.port("1234".to_string())
.api_version("v2".to_string())
.x_api_version("2.0-rev0".to_string())
创建自定义配置文件
您可以通过使用配置文件结构来创建自定义配置文件。
let mut profile = Profile::new(
"NEW_PROFILE",
":1234/api/oauth2/token'",
"v1",
"1.0-rev0",
);
配置文件结构有以下字段
字段 | 描述 |
---|---|
name | 配置文件名称。用于识别配置文件。 |
url | 用于认证的URL,必须以冒号开头 |
api_version | API版本,用于构造URL,例如:http://address:port/api/API_VERSION/... |
x_api_version | 这是X-API-Version头值。 |
然后可以将其传递给构建方法。
构建URL
库提供了一个辅助函数来构建Veeam REST API的URL。
该函数接收一个端点参数,它是URL的简写版本。
例如,要从VBR获取备份列表,端点将是"backups",通常完整的URL将是
https://<address>:<port>/api/v1/backups
您可以使用辅助函数来构建URL
let endpoint = build_url(&address, &"backups".to_string(), &profile)?;
构建认证头
库还提供了一个辅助函数,可以从保存的响应结构中构建认证头。
let headers = build_auth_headers(&access_token, &profile);
然后可以直接与reqwest客户端一起使用。
认证
除了Enterprise Manager(使用基本认证)外,库使用OAuth2对所有API进行认证。
有关认证过程的信息,请参阅Veeam的文档。
依赖关系
~8-22MB
~329K SLoC