82 lines
1.8 KiB
Go
82 lines
1.8 KiB
Go
package services
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"sync"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
const (
|
|
defaultAPISessionExpirationDuration = 30 * 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()
|
|
}
|