1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
//! Authentication methods for the conda ecosystem
use std::str::FromStr;
use serde::{Deserialize, Serialize};
/// The different Authentication methods that are supported in the conda
/// ecosystem
#[derive(Clone, PartialEq, Eq, Serialize, Deserialize, Debug)]
pub enum Authentication {
/// A bearer token is sent as a header of the form
/// `Authorization: Bearer {TOKEN}`
BearerToken(String),
/// A basic authentication token is sent as HTTP basic auth
BasicHTTP {
/// The username to use for basic auth
username: String,
/// The password to use for basic auth
password: String,
},
/// A conda token is sent in the URL as `/t/{TOKEN}/...`
CondaToken(String),
}
/// An error that can occur when parsing an authentication string
#[derive(Debug)]
pub enum AuthenticationParseError {
/// The scheme is not valid
InvalidScheme,
/// The token could not be parsed
InvalidToken,
}
impl FromStr for Authentication {
type Err = AuthenticationParseError;
/// Parse an authentication string into an Authentication struct
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
serde_json::from_str(s).map_err(|_err| AuthenticationParseError::InvalidToken)
}
}