fetch_ml/internal/config/security.go
Jeremie Fraeys 420de879ff
feat(api): integrate scheduler protocol and WebSocket enhancements
Update API layer for scheduler integration:
- WebSocket handlers with scheduler protocol support
- Jobs WebSocket endpoint with priority queue integration
- Validation middleware for scheduler messages
- Server configuration with security hardening
- Protocol definitions for worker-scheduler communication
- Dataset handlers with tenant isolation checks
- Response helpers with audit context
- OpenAPI spec updates for new endpoints
2026-02-26 12:05:57 -05:00

93 lines
2.6 KiB
Go

package config
import (
"fmt"
"time"
)
// SecurityConfig holds security-related configuration
type SecurityConfig struct {
AuditLogging AuditLoggingConfig `yaml:"audit_logging"`
AllowedOrigins []string `yaml:"allowed_origins"`
IPWhitelist []string `yaml:"ip_whitelist"`
APIKeyRotationDays int `yaml:"api_key_rotation_days"`
ProductionMode bool `yaml:"production_mode"`
}
// AuditLoggingConfig holds audit logging configuration
type AuditLoggingConfig struct {
LogPath string `yaml:"log_path"`
Enabled bool `yaml:"enabled"`
}
// PrivacyConfig holds privacy enforcement configuration
type PrivacyConfig struct {
DefaultLevel string `yaml:"default_level"`
Enabled bool `yaml:"enabled"`
EnforceTeams bool `yaml:"enforce_teams"`
AuditAccess bool `yaml:"audit_access"`
}
// Validate checks privacy configuration
func (p *PrivacyConfig) Validate() error {
if !p.Enabled {
return nil
}
validLevels := map[string]bool{"private": true, "team": true, "public": true, "anonymized": true}
if p.DefaultLevel != "" && !validLevels[p.DefaultLevel] {
return fmt.Errorf("invalid default privacy level: %s", p.DefaultLevel)
}
return nil
}
// MonitoringConfig holds monitoring-related configuration
type MonitoringConfig struct {
Prometheus PrometheusConfig `yaml:"prometheus"`
HealthChecks HealthChecksConfig `yaml:"health_checks"`
}
// PrometheusConfig holds Prometheus metrics configuration
type PrometheusConfig struct {
Path string `yaml:"path"`
Port int `yaml:"port"`
Enabled bool `yaml:"enabled"`
}
// HealthChecksConfig holds health check configuration
type HealthChecksConfig struct {
Enabled bool `yaml:"enabled"`
Interval time.Duration `yaml:"interval"`
}
// Validate validates the security configuration
func (s *SecurityConfig) Validate() error {
if s.ProductionMode {
if len(s.AllowedOrigins) == 0 {
return fmt.Errorf("production_mode requires at least one allowed_origin")
}
}
if s.APIKeyRotationDays < 0 {
return fmt.Errorf("api_key_rotation_days must be positive")
}
if s.AuditLogging.Enabled && s.AuditLogging.LogPath == "" {
return fmt.Errorf("audit_logging enabled but log_path not set")
}
return nil
}
// Validate validates the monitoring configuration
func (m *MonitoringConfig) Validate() error {
if m.Prometheus.Enabled {
if m.Prometheus.Port <= 0 || m.Prometheus.Port > 65535 {
return fmt.Errorf("prometheus port must be between 1 and 65535")
}
if m.Prometheus.Path == "" {
m.Prometheus.Path = "/metrics" // Default
}
}
return nil
}