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

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
}