use base64::engine::general_purpose::STANDARD;
use base64::Engine;
pub enum AuthorizationType {
Basic(Credentials),
Token(String),
}
pub struct Credentials(String);
pub enum CertificateType {
Pem(String),
Der(String),
}
impl AuthorizationType {
pub fn as_header(&self) -> (String, String) {
match self {
AuthorizationType::Basic(credentials) => (
"Authorization".to_string(),
format!("Basic {}", credentials.0),
),
AuthorizationType::Token(token) => {
("Authorization".to_string(), format!("Token {}", token))
}
}
}
}
impl Credentials {
pub fn new(username: String, password: String) -> Self {
let encoded = STANDARD.encode(format!("{}:{}", username, password));
Self(encoded)
}
}
impl CertificateType {
pub async fn as_certificate(&self) -> Result<reqwest::Certificate, Box<dyn std::error::Error>> {
match self {
CertificateType::Pem(path) => {
let certificate = tokio::fs::read(path).await?;
Ok(reqwest::Certificate::from_pem(&certificate)?)
}
CertificateType::Der(path) => {
let certificate = tokio::fs::read(path).await?;
Ok(reqwest::Certificate::from_der(&certificate)?)
}
}
}
}