mirror of
https://github.com/Forceu/Gokapi.git
synced 2026-01-28 20:18:31 -06:00
131 lines
3.0 KiB
Go
131 lines
3.0 KiB
Go
package environment
|
|
|
|
import (
|
|
"os"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// IsTrue is a placeholder for yes
|
|
const IsTrue = "yes"
|
|
|
|
// IsFalse is a placeholder for no
|
|
const IsFalse = "no"
|
|
|
|
// Environment is a struct containing available env variables
|
|
type Environment struct {
|
|
ConfigDir string
|
|
ConfigFile string
|
|
ConfigPath string
|
|
DataDir string
|
|
AdminName string
|
|
AdminPassword string
|
|
WebserverPort string
|
|
WebserverLocalhost string
|
|
ExternalUrl string
|
|
RedirectUrl string
|
|
SaltAdmin string
|
|
SaltFiles string
|
|
LengthId int
|
|
}
|
|
|
|
var defaultValues = defaultsEnvironment{
|
|
CONFIG_DIR: "config",
|
|
CONFIG_FILE: "config.json",
|
|
DATA_DIR: "data",
|
|
LENGTH_ID: 15,
|
|
}
|
|
|
|
// New parses the env variables
|
|
func New() Environment {
|
|
configDir := envString("CONFIG_DIR")
|
|
configFile := envString("CONFIG_FILE")
|
|
configPath := configDir + "/" + configFile
|
|
|
|
return Environment{
|
|
ConfigDir: configDir,
|
|
ConfigFile: configFile,
|
|
ConfigPath: configPath,
|
|
DataDir: envString("DATA_DIR"),
|
|
AdminName: envString("USERNAME"),
|
|
AdminPassword: envString("PASSWORD"),
|
|
WebserverPort: envString("PORT"),
|
|
ExternalUrl: envString("EXTERNAL_URL"),
|
|
RedirectUrl: envString("REDIRECT_URL"),
|
|
SaltAdmin: envString("SALT_ADMIN"),
|
|
SaltFiles: envString("SALT_FILES"),
|
|
WebserverLocalhost: envBool("LOCALHOST"),
|
|
LengthId: envInt("LENGTH_ID", 5),
|
|
}
|
|
}
|
|
|
|
// Looks up an environment variable or returns an empty string
|
|
func envString(key string) string {
|
|
val, ok := os.LookupEnv("GOKAPI_" + key)
|
|
if !ok {
|
|
return defaultValues.getString(key)
|
|
}
|
|
return val
|
|
}
|
|
|
|
// Looks up a boolean environment variable, returns either IsFalse or IsTrue
|
|
func envBool(key string) string {
|
|
val, ok := os.LookupEnv("GOKAPI_" + key)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
valLower := strings.ToLower(val)
|
|
if valLower == "true" || valLower == "yes" {
|
|
return IsTrue
|
|
}
|
|
if valLower == "false" || valLower == "no" {
|
|
return IsFalse
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// Looks up an environment variable or returns an empty string
|
|
func envInt(key string, minValue int) int {
|
|
val, ok := os.LookupEnv("GOKAPI_" + key)
|
|
if !ok {
|
|
return defaultValues.getInt(key)
|
|
}
|
|
intVal, err := strconv.Atoi(val)
|
|
if err != nil {
|
|
return -1
|
|
}
|
|
if intVal < minValue {
|
|
return minValue
|
|
}
|
|
return intVal
|
|
|
|
}
|
|
|
|
// Gets the env variable or default value as string
|
|
func (structPointer *defaultsEnvironment) getString(name string) string {
|
|
field := reflect.ValueOf(structPointer).Elem().FieldByName(name)
|
|
if field.IsValid() {
|
|
return field.String()
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// Gets the env variable or default value as int
|
|
func (structPointer *defaultsEnvironment) getInt(name string) int {
|
|
field := reflect.ValueOf(structPointer).Elem().FieldByName(name)
|
|
if field.IsValid() {
|
|
return int(field.Int())
|
|
}
|
|
return -1
|
|
}
|
|
|
|
type defaultsEnvironment struct {
|
|
CONFIG_DIR string
|
|
CONFIG_FILE string
|
|
DATA_DIR string
|
|
SALT_ADMIN string
|
|
SALT_FILES string
|
|
LENGTH_ID int
|
|
}
|