65 releases

0.16.1 Nov 4, 2024
0.16.0 Jul 4, 2024
0.15.2 Jun 7, 2024
0.15.0 Mar 26, 2024
0.0.3 Mar 28, 2022

#59 in Web programming

Download history 21292/week @ 2024-07-24 18741/week @ 2024-07-31 25244/week @ 2024-08-07 22327/week @ 2024-08-14 31429/week @ 2024-08-21 25693/week @ 2024-08-28 18904/week @ 2024-09-04 18491/week @ 2024-09-11 19455/week @ 2024-09-18 21675/week @ 2024-09-25 17729/week @ 2024-10-02 18992/week @ 2024-10-09 27836/week @ 2024-10-16 21449/week @ 2024-10-23 28269/week @ 2024-10-30 17782/week @ 2024-11-06

99,689 downloads per month
Used in 35 crates (2 directly)

Apache-2.0

275KB
6K SLoC

reqsign   Build Status Latest Version Crate Downloads

Signing API requests without effort.


Most API is simple. But they could be complicated when they are hidden from complex abstraction. reqsign bring the simple API back: build, sign, send.

Quick Start

use anyhow::Result;
use reqsign::AwsConfig;
use reqsign::AwsLoader;
use reqsign::AwsV4Signer;
use reqwest::Client;
use reqwest::Request;
use reqwest::Url;

#[tokio::main]
async fn main() -> Result<()> {
    // Signer can load region and credentials from environment by default.
    let client = Client::new();
    let config = AwsConfig::default().from_profile().from_env();
    let loader = AwsLoader::new(client.clone(), config);
    let signer = AwsV4Signer::new("s3", "us-east-1");
    // Construct request
    let url = Url::parse("https://s3.amazonaws.com/testbucket")?;
    let mut req = reqwest::Request::new(http::Method::GET, url);
    // Signing request with Signer
    let credential = loader.load().await?.unwrap();
    signer.sign(&mut req, &credential)?;
    // Sending already signed request.
    let resp = client.execute(req).await?;
    println!("resp got status: {}", resp.status());
    Ok(())
}

Features

  • Pure rust with minimal dependencies.
  • Test again official SDK and services.
  • Supported services
    • Aliyun OSS: reqsign::AliyunOssSigner
    • AWS services (SigV4): reqsign::AwsV4Signer
    • Azure Storage services: reqsign::AzureStorageSigner
    • Google services: reqsign::GoogleSigner
    • Huawei Cloud OBS: reqsign::HuaweicloudObsSigner

Contributing

Check out the CONTRIBUTING.md guide for more details on getting started with contributing to this project.

Getting help

Submit issues for bug report or asking questions in discussion.

Acknowledge

Inspired a lot from:

License

Licensed under Apache License, Version 2.0.

Dependencies

~3–18MB
~272K SLoC