All checks were successful
Automated Container Build / build-and-push (push) Successful in 1m24s
59 lines
1.4 KiB
Go
59 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
type Config struct {
|
|
Port string
|
|
DataDir string
|
|
StorageDir string
|
|
JWTSecret string
|
|
JWTExpirySecs int
|
|
DBPath string
|
|
ThumbnailDir string
|
|
TrashDir string
|
|
VersionsDir string
|
|
BackupDir string
|
|
MaxLoginAttempts int
|
|
LockoutSeconds int
|
|
OnlyOfficeJWT string
|
|
}
|
|
|
|
func Load() *Config {
|
|
cfg := &Config{
|
|
Port: getEnv("PORT", "5827"),
|
|
DataDir: getEnv("DATA_DIR", "/app/data"),
|
|
StorageDir: getEnv("STORAGE_DIR", "/storage"),
|
|
JWTSecret: getEnv("JWT_SECRET", ""),
|
|
JWTExpirySecs: getEnvInt("JWT_EXPIRY_SECS", 900), // 15 minutes
|
|
MaxLoginAttempts: getEnvInt("MAX_LOGIN_ATTEMPTS", 5),
|
|
LockoutSeconds: getEnvInt("LOCKOUT_SECONDS", 300), // 5 minutes
|
|
OnlyOfficeJWT: getEnv("ONLYOFFICE_JWT_SECRET", ""),
|
|
}
|
|
|
|
cfg.DBPath = cfg.DataDir + "/drive.db"
|
|
cfg.ThumbnailDir = cfg.DataDir + "/thumbnails"
|
|
cfg.TrashDir = cfg.StorageDir + "/.trash"
|
|
cfg.VersionsDir = cfg.StorageDir + "/.versions"
|
|
cfg.BackupDir = cfg.StorageDir + "/.backups"
|
|
|
|
return cfg
|
|
}
|
|
|
|
func getEnv(key, fallback string) string {
|
|
if value, ok := os.LookupEnv(key); ok {
|
|
return value
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
func getEnvInt(key string, fallback int) int {
|
|
if value, ok := os.LookupEnv(key); ok {
|
|
if intVal, err := strconv.Atoi(value); err == nil {
|
|
return intVal
|
|
}
|
|
}
|
|
return fallback
|
|
}
|