pub mod allow_all;
pub mod api_key;
pub mod jwt;
pub mod peer_creds;
pub mod signature;
pub use allow_all::AllowAllProvider;
pub use api_key::ApiKeyProvider;
pub use jwt::JwtProvider;
pub use peer_creds::PeerCredProvider;
pub use signature::SignatureProvider;
use crate::core::auth::{AuthProvider, AuthProviderChain, AuthResult, Credentials};
use std::sync::Arc;
pub fn development_auth_chain() -> AuthProviderChain {
AuthProviderChain::new().add_provider(Box::new(AllowAllProvider::new()))
}
pub fn create_auth_chain(providers: &[String]) -> AuthProviderChain {
let mut chain = AuthProviderChain::new();
for provider_name in providers {
match provider_name.as_str() {
"allow-all" | "permissive" => {
chain = chain.add_provider(Box::new(AllowAllProvider::new()));
}
"jwt" => {
chain = chain.add_provider(Box::new(JwtProvider::new_with_defaults()));
}
"api-key" => {
chain = chain.add_provider(Box::new(ApiKeyProvider::new()));
}
"peer-creds" | "peer-credentials" => {
chain = chain.add_provider(Box::new(PeerCredProvider::new()));
}
"signature" | "ed25519" => {
chain = chain.add_provider(Box::new(SignatureProvider::new()));
}
_ => {
tracing::warn!("Unknown auth provider: {}", provider_name);
}
}
}
chain
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_development_auth_chain() {
let _chain = development_auth_chain();
}
#[test]
fn test_create_auth_chain_empty() {
let _chain = create_auth_chain(&[]);
}
#[test]
fn test_create_auth_chain_allow_all() {
let _chain = create_auth_chain(&["allow-all".to_string()]);
}
#[test]
fn test_create_auth_chain_permissive() {
let _chain = create_auth_chain(&["permissive".to_string()]);
}
#[test]
fn test_create_auth_chain_jwt() {
let _chain = create_auth_chain(&["jwt".to_string()]);
}
#[test]
fn test_create_auth_chain_api_key() {
let _chain = create_auth_chain(&["api-key".to_string()]);
}
#[test]
fn test_create_auth_chain_peer_creds() {
let _chain = create_auth_chain(&["peer-creds".to_string()]);
}
#[test]
fn test_create_auth_chain_peer_credentials() {
let _chain = create_auth_chain(&["peer-credentials".to_string()]);
}
#[test]
fn test_create_auth_chain_signature() {
let _chain = create_auth_chain(&["signature".to_string()]);
}
#[test]
fn test_create_auth_chain_ed25519() {
let _chain = create_auth_chain(&["ed25519".to_string()]);
}
#[test]
fn test_create_auth_chain_unknown() {
let _chain = create_auth_chain(&["unknown-provider".to_string()]);
}
#[test]
fn test_create_auth_chain_multiple() {
let _chain = create_auth_chain(&[
"allow-all".to_string(),
"jwt".to_string(),
"api-key".to_string(),
]);
}
#[test]
fn test_create_auth_chain_with_unknown() {
let _chain = create_auth_chain(&[
"allow-all".to_string(),
"unknown".to_string(),
"jwt".to_string(),
]);
}
}