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

MIT 许可协议

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