Files
dbbackup/main.go
Renz 0cf21cd893 feat: Complete MEDIUM priority security features with testing
- Implemented TUI auto-select for automated testing
- Fixed TUI automation: autoSelectMsg handling in Update()
- Auto-database selection in DatabaseSelector
- Created focused test suite (test_as_postgres.sh)
- Created retention policy test (test_retention.sh)
- All 10 security tests passing

Features validated:
 Backup retention policy (30 days, min backups)
 Rate limiting (exponential backoff)
 Privilege checks (root detection)
 Resource limit validation
 Path sanitization
 Checksum verification (SHA-256)
 Audit logging
 Secure permissions
 Configuration persistence
 TUI automation framework

Test results: 10/10 passed
Backup files created with .dump, .sha256, .info
Retention cleanup verified (old files removed)
2025-11-25 15:25:56 +00:00

66 lines
1.4 KiB
Go
Executable File

package main
import (
"context"
"fmt"
"log/slog"
"os"
"os/signal"
"syscall"
"dbbackup/cmd"
"dbbackup/internal/config"
"dbbackup/internal/logger"
"dbbackup/internal/metrics"
)
// Build information (set by ldflags)
var (
version = "dev"
buildTime = "unknown"
gitCommit = "unknown"
)
func main() {
// Create context that cancels on interrupt
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
defer cancel()
// Initialize configuration
cfg := config.New()
// Set version information
cfg.Version = version
cfg.BuildTime = buildTime
cfg.GitCommit = gitCommit
// Optimize CPU settings if auto-detect is enabled
if cfg.AutoDetectCores {
if err := cfg.OptimizeForCPU(); err != nil {
slog.Warn("CPU optimization failed", "error", err)
}
}
// Initialize logger
log := logger.New(cfg.LogLevel, cfg.LogFormat)
// Initialize global metrics
metrics.InitGlobalMetrics(log)
// Show session summary on exit
defer func() {
if metrics.GlobalMetrics != nil {
avgs := metrics.GlobalMetrics.GetAverages()
if ops, ok := avgs["total_operations"].(int); ok && ops > 0 {
fmt.Printf("\n📊 Session Summary: %d operations, %.1f%% success rate\n",
ops, avgs["success_rate"])
}
}
}()
// Execute command
if err := cmd.Execute(ctx, cfg, log); err != nil {
log.Error("Application failed", "error", err)
os.Exit(1)
}
}