You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type Config struct {
|
|
ListenAddr string
|
|
FootageRoot string
|
|
DBPath string
|
|
AdminUser string
|
|
AdminPass string
|
|
SessionTTL time.Duration
|
|
ScanInterval time.Duration
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
sessionTTL, err := parseDurationEnv("SESSION_TTL", 24*time.Hour)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
scanInterval, err := parseDurationEnv("SCAN_INTERVAL", 5*time.Minute)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &Config{
|
|
ListenAddr: getEnv("LISTEN_ADDR", ":8080"),
|
|
FootageRoot: getEnv("FOOTAGE_ROOT", "/footage"),
|
|
DBPath: getEnv("DB_PATH", "/data/cammonitor.db"),
|
|
AdminUser: getEnv("ADMIN_USER", "admin"),
|
|
AdminPass: getEnv("ADMIN_PASS", "changeme"),
|
|
SessionTTL: sessionTTL,
|
|
ScanInterval: scanInterval,
|
|
}, nil
|
|
}
|
|
|
|
func getEnv(key, fallback string) string {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return fallback
|
|
}
|
|
return value
|
|
}
|
|
|
|
func parseDurationEnv(key string, fallback time.Duration) (time.Duration, error) {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return fallback, nil
|
|
}
|
|
|
|
duration, err := time.ParseDuration(value)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("parse %s: %w", key, err)
|
|
}
|
|
return duration, nil
|
|
}
|
|
|