6 releases

new 0.4.4 Mar 21, 2024
0.4.2 Feb 9, 2024
0.4.1 Nov 18, 2023
0.4.0 Sep 18, 2023
0.1.0 Dec 16, 2020

#212 in Authentication

Download history 7416/week @ 2023-12-06 7129/week @ 2023-12-13 6176/week @ 2023-12-20 7795/week @ 2023-12-27 7814/week @ 2024-01-03 7537/week @ 2024-01-10 7895/week @ 2024-01-17 6816/week @ 2024-01-24 7500/week @ 2024-01-31 12195/week @ 2024-02-07 12409/week @ 2024-02-14 14080/week @ 2024-02-21 21527/week @ 2024-02-28 19833/week @ 2024-03-06 24043/week @ 2024-03-13 21355/week @ 2024-03-20

90,227 downloads per month
Used in 30 crates (7 directly)

MIT/Apache

32KB
653 lines

cargo-credential

This package is a library to assist writing a Cargo credential helper, which provides an interface to store tokens for authorizing access to a registry such as https://crates.io/.

Documentation about credential processes may be found at https://doc.rust-lang.org/nightly/cargo/reference/credential-provider-protocol.html

Example implementations may be found at https://github.com/rust-lang/cargo/tree/master/credential

Usage

Create a Cargo project with this as a dependency:

# Add this to your Cargo.toml:

[dependencies]
cargo-credential = "0.4"

And then include a main.rs binary which implements the Credential trait, and calls the main function which will call the appropriate method of the trait:

// src/main.rs

use cargo_credential::{Credential, Error};

struct MyCredential;

impl Credential for MyCredential {
    /// implement trait methods here...
}

fn main() {
    cargo_credential::main(MyCredential);
}

lib.rs:

Helper library for writing Cargo credential providers.

A credential process should have a struct that implements the Credential trait. The main function should be called with an instance of that struct, such as:

fn main() {
    cargo_credential::main(MyCredential);
}

While in the perform function, stdin and stdout will be re-attached to the active console. This allows credential providers to be interactive if necessary.

Error handling

Error::UrlNotSupported

A credential provider may only support some registry URLs. If this is the case and an unsupported index URL is passed to the provider, it should respond with Error::UrlNotSupported. Other credential providers may be attempted by Cargo.

Error::NotFound

When attempting an Action::Get or Action::Logout, if a credential can not be found, the provider should respond with Error::NotFound. Other credential providers may be attempted by Cargo.

Error::OperationNotSupported

A credential provider might not support all operations. For example if the provider only supports Action::Get, Error::OperationNotSupported should be returned for all other requests.

Error::Other

All other errors go here. The error will be shown to the user in Cargo, including the full error chain using std::error::Error::source.

Example

Dependencies

~1–12MB
~120K SLoC