package services import ( "os" "strconv" "sync" "time" "github.com/rs/zerolog/log" ) const defaultAPISessionExpirationDuration = 30 * time.Second const defaultPort = 8585 var GetEnv = sync.OnceValue[env](newEnv) type env struct { adminUsername string adminPassword string sessionExpirationDuration time.Duration port int isSecure bool } func (e env) GetCredentials() (username, password string) { return e.adminUsername, e.adminPassword } func (e env) GetSessionExpirationDuration() time.Duration { return e.sessionExpirationDuration } func (e env) GetPort() int { return e.port } func (e env) IsSecure() bool { return e.isSecure } func newEnv() env { env := env{ adminUsername: os.Getenv("API_ADMIN_USERNAME"), adminPassword: os.Getenv("API_ADMIN_PASSWORD"), isSecure: os.Getenv("API_SECURE") == "true", } sessionExpirationDuration, err := strconv.Atoi(os.Getenv("API_SESSION_EXPIRATION_DURATION")) env.sessionExpirationDuration = time.Duration(sessionExpirationDuration) if err != nil { log.Warn().Err(err).Dur("default", defaultAPISessionExpirationDuration).Msg("unable to load API_SESSION_EXPIRATION_DURATION, set to default") env.sessionExpirationDuration = defaultAPISessionExpirationDuration } port, err := strconv.Atoi(os.Getenv("API_PORT")) env.port = port if err != nil { log.Warn().Err(err).Int("default", defaultPort).Msg("unable to load API_PORT, set to default") env.port = defaultPort } return env }