use serde::Deserialize;
pub fn default_challenge_ttl() -> u64 {
300
}
#[derive(Debug, Clone, Deserialize)]
pub struct WebAuthnConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default)]
pub rp_id: Option<String>,
#[serde(default)]
pub rp_name: Option<String>,
#[serde(default)]
pub rp_origin: Option<String>,
#[serde(default = "default_challenge_ttl")]
pub challenge_ttl_seconds: u64,
#[serde(default = "default_true")]
pub allow_platform: bool,
#[serde(default = "default_true")]
pub allow_cross_platform: bool,
#[serde(default = "default_true")]
pub require_user_verification: bool,
#[serde(default)]
pub reject_cloned_credentials: bool,
}
fn default_true() -> bool {
true
}
impl Default for WebAuthnConfig {
fn default() -> Self {
Self {
enabled: false,
rp_id: None,
rp_name: None,
rp_origin: None,
challenge_ttl_seconds: default_challenge_ttl(),
allow_platform: true,
allow_cross_platform: true,
require_user_verification: true,
reject_cloned_credentials: false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_webauthn_config_defaults() {
let config = WebAuthnConfig::default();
assert!(!config.enabled);
assert!(config.rp_id.is_none());
assert!(config.allow_platform);
assert!(config.allow_cross_platform);
assert!(config.require_user_verification);
assert_eq!(config.challenge_ttl_seconds, 300);
}
}