package services import ( "os" "strconv" "sync" "time" "github.com/rs/zerolog/log" ) const ( defaultAPISessionExpirationDuration = 5 * 60 * time.Second defaultPort = 8585 defaultMainDir = "./store" ) var env = sync.OnceValue[environment](newEnv) type environment struct { adminUsername string adminPassword string sessionExpirationDuration time.Duration port int isSecure bool storeDir string } func (e environment) GetCredentials() (username, password string) { return e.adminUsername, e.adminPassword } func (e environment) GetSessionExpirationDuration() time.Duration { return e.sessionExpirationDuration } func (e environment) GetPort() int { return e.port } func (e environment) IsSecure() bool { return e.isSecure } func (e environment) GetDir() string { return e.storeDir } func newEnv() environment { env := environment{ adminUsername: "test", adminPassword: "test", 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 } storeDir := os.Getenv("API_STORE_DIR") if storeDir == "" { storeDir = defaultMainDir } env.storeDir = storeDir return env } func GetEnv() environment { return env() }