Skip to main content

mockforge_core/config/
auth.rs

1//! Authentication configuration types
2
3use serde::{Deserialize, Serialize};
4use std::collections::HashMap;
5
6/// Authentication configuration for HTTP requests
7#[derive(Debug, Clone, Serialize, Deserialize)]
8#[serde(default)]
9#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
10pub struct AuthConfig {
11    /// JWT configuration
12    pub jwt: Option<JwtConfig>,
13    /// OAuth2 configuration
14    pub oauth2: Option<OAuth2Config>,
15    /// Basic auth configuration
16    pub basic_auth: Option<BasicAuthConfig>,
17    /// API key configuration
18    pub api_key: Option<ApiKeyConfig>,
19    /// Whether to require authentication for all requests
20    pub require_auth: bool,
21}
22
23/// JWT authentication configuration
24#[derive(Debug, Clone, Serialize, Deserialize)]
25#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
26pub struct JwtConfig {
27    /// JWT secret key for HMAC algorithms
28    pub secret: Option<String>,
29    /// RSA public key PEM for RSA algorithms
30    pub rsa_public_key: Option<String>,
31    /// ECDSA public key PEM for ECDSA algorithms
32    pub ecdsa_public_key: Option<String>,
33    /// Expected issuer
34    pub issuer: Option<String>,
35    /// Expected audience
36    pub audience: Option<String>,
37    /// Supported algorithms (defaults to HS256, RS256, ES256)
38    pub algorithms: Vec<String>,
39}
40
41/// OAuth2 configuration
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
44pub struct OAuth2Config {
45    /// OAuth2 client ID
46    pub client_id: String,
47    /// OAuth2 client secret
48    pub client_secret: String,
49    /// Token introspection URL
50    pub introspection_url: String,
51    /// Authorization server URL
52    pub auth_url: Option<String>,
53    /// Token URL
54    pub token_url: Option<String>,
55    /// Expected token type
56    pub token_type_hint: Option<String>,
57}
58
59/// Basic authentication configuration
60#[derive(Debug, Clone, Serialize, Deserialize)]
61#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
62pub struct BasicAuthConfig {
63    /// Username/password pairs
64    pub credentials: HashMap<String, String>,
65}
66
67/// API key configuration
68#[derive(Debug, Clone, Serialize, Deserialize)]
69#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
70pub struct ApiKeyConfig {
71    /// Expected header name (default: X-API-Key)
72    pub header_name: String,
73    /// Expected query parameter name
74    pub query_name: Option<String>,
75    /// Valid API keys
76    pub keys: Vec<String>,
77}
78
79impl Default for AuthConfig {
80    fn default() -> Self {
81        Self {
82            jwt: None,
83            oauth2: None,
84            basic_auth: None,
85            api_key: Some(ApiKeyConfig {
86                header_name: "X-API-Key".to_string(),
87                query_name: None,
88                keys: vec![],
89            }),
90            require_auth: false,
91        }
92    }
93}