librapi/services/environments.go
2025-01-03 10:06:54 +01:00

64 lines
1.5 KiB
Go

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
}