use super::types::*;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrivacySettings {
pub data_collection: DataCollectionSettings,
pub recording_settings: RecordingSettings,
pub anonymization: AnonymizationSettings,
pub consent_management: ConsentManagementSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DataCollectionSettings {
pub telemetry: bool,
pub analytics: bool,
pub performance_data: bool,
pub usage_statistics: bool,
pub retention_period: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RecordingSettings {
pub allow_recording: bool,
pub explicit_consent: bool,
pub notification_required: bool,
pub local_only: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnonymizationSettings {
pub voice_anonymization: bool,
pub position_anonymization: bool,
pub method: AnonymizationMethod,
pub strength: AnonymizationStrength,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConsentManagementSettings {
pub data_processing_consent: bool,
pub recording_consent: bool,
pub analytics_consent: bool,
pub withdrawal_mechanism: ConsentWithdrawalMechanism,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SecuritySettings {
pub encryption: EncryptionSettings,
pub authentication: AuthenticationSettings,
pub rate_limiting: RateLimitingSettings,
pub access_control: AccessControlSettings,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EncryptionSettings {
pub required: bool,
pub algorithm: EncryptionAlgorithm,
pub key_exchange: KeyExchangeMethod,
pub key_rotation_interval: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AuthenticationSettings {
pub required: bool,
pub method: AuthenticationMethod,
pub token_expiry: u32,
pub mfa_required: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RateLimitingSettings {
pub enabled: bool,
pub requests_per_minute: u32,
pub bandwidth_limit: u32,
pub connections_per_ip: u32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AccessControlSettings {
pub mode: AccessControlMode,
pub allowed_ips: Vec<String>,
pub blocked_ips: Vec<String>,
pub geo_restrictions: Vec<String>,
}
impl Default for PrivacySettings {
fn default() -> Self {
Self {
data_collection: DataCollectionSettings::default(),
recording_settings: RecordingSettings::default(),
anonymization: AnonymizationSettings::default(),
consent_management: ConsentManagementSettings::default(),
}
}
}
impl Default for DataCollectionSettings {
fn default() -> Self {
Self {
telemetry: false,
analytics: false,
performance_data: true,
usage_statistics: false,
retention_period: 30, }
}
}
impl Default for RecordingSettings {
fn default() -> Self {
Self {
allow_recording: false,
explicit_consent: true,
notification_required: true,
local_only: true,
}
}
}
impl Default for AnonymizationSettings {
fn default() -> Self {
Self {
voice_anonymization: false,
position_anonymization: false,
method: AnonymizationMethod::VoiceConversion,
strength: AnonymizationStrength::Medium,
}
}
}
impl Default for ConsentManagementSettings {
fn default() -> Self {
Self {
data_processing_consent: true,
recording_consent: true,
analytics_consent: false,
withdrawal_mechanism: ConsentWithdrawalMechanism::Immediate,
}
}
}
impl Default for SecuritySettings {
fn default() -> Self {
Self {
encryption: EncryptionSettings::default(),
authentication: AuthenticationSettings::default(),
rate_limiting: RateLimitingSettings::default(),
access_control: AccessControlSettings::default(),
}
}
}
impl Default for EncryptionSettings {
fn default() -> Self {
Self {
required: true,
algorithm: EncryptionAlgorithm::DTLSSRTP,
key_exchange: KeyExchangeMethod::ECDH,
key_rotation_interval: 60, }
}
}
impl Default for AuthenticationSettings {
fn default() -> Self {
Self {
required: false,
method: AuthenticationMethod::Token,
token_expiry: 60, mfa_required: false,
}
}
}
impl Default for RateLimitingSettings {
fn default() -> Self {
Self {
enabled: true,
requests_per_minute: 60,
bandwidth_limit: 320, connections_per_ip: 10,
}
}
}
impl Default for AccessControlSettings {
fn default() -> Self {
Self {
mode: AccessControlMode::AllowAll,
allowed_ips: vec![],
blocked_ips: vec![],
geo_restrictions: vec![],
}
}
}