use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(default)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct AuthConfig {
pub jwt: Option<JwtConfig>,
pub oauth2: Option<OAuth2Config>,
pub basic_auth: Option<BasicAuthConfig>,
pub api_key: Option<ApiKeyConfig>,
pub require_auth: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct JwtConfig {
pub secret: Option<String>,
pub rsa_public_key: Option<String>,
pub ecdsa_public_key: Option<String>,
pub issuer: Option<String>,
pub audience: Option<String>,
pub algorithms: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct OAuth2Config {
pub client_id: String,
pub client_secret: String,
pub introspection_url: String,
pub auth_url: Option<String>,
pub token_url: Option<String>,
pub token_type_hint: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct BasicAuthConfig {
pub credentials: HashMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ApiKeyConfig {
pub header_name: String,
pub query_name: Option<String>,
pub keys: Vec<String>,
}
impl Default for AuthConfig {
fn default() -> Self {
Self {
jwt: None,
oauth2: None,
basic_auth: None,
api_key: Some(ApiKeyConfig {
header_name: "X-API-Key".to_string(),
query_name: None,
keys: vec![],
}),
require_auth: false,
}
}
}