pub mod access_controller;
pub mod encryption_engine;
pub mod input_validator;
pub mod pii_scrubber;
pub mod rate_limiter;
pub mod secrets_manager;
pub mod threat_detector;
pub use access_controller::{AccessController, Permission, Role};
pub use encryption_engine::{
derive_key_from_password, generate_salt, EncryptedData, EncryptionAlgorithm, EncryptionConfig,
EncryptionEngine, EncryptionError, EncryptionKey,
};
pub use input_validator::{InputValidator, ValidationResult};
pub use pii_scrubber::{PiiScrubber, ScrubResult};
pub use rate_limiter::{RateLimitConfig, RateLimiter};
pub use secrets_manager::{
AuditAction, AuditLogEntry, SecretMetadataInfo, SecretsManager, SecretsManagerConfig,
};
pub use threat_detector::{
DetectionRule, ResponseAction, ResponseRule, Threat, ThreatDetector, ThreatDetectorConfig,
ThreatError, ThreatLevel, ThreatStats, ThreatType,
};
pub struct SecurityGateway {
input_validator: InputValidator,
pii_scrubber: PiiScrubber,
access_controller: AccessController,
rate_limiter: RateLimiter,
}
impl SecurityGateway {
pub fn new() -> Self {
Self {
input_validator: InputValidator::new(),
pii_scrubber: PiiScrubber::new(),
access_controller: AccessController::new(),
rate_limiter: RateLimiter::new(),
}
}
pub async fn validate_input(&self, input: &str) -> anyhow::Result<String> {
self.input_validator.validate(input)?;
let result = self.pii_scrubber.scrub(input);
Ok(result.scrubbed)
}
pub fn check_access(&self, user_id: &str, resource: &str, action: &str) -> bool {
self.access_controller.check(user_id, resource, action)
}
pub async fn check_rate(&self, key: &str) -> anyhow::Result<bool> {
self.rate_limiter.check(key).await
}
}
impl Default for SecurityGateway {
fn default() -> Self {
Self::new()
}
}