uni/WEB43-diary/internal/config/config.go

53 lines
1.1 KiB
Go

package config
import (
"flag"
"os"
"os/user"
"strconv"
)
type TConfig struct {
Port int
Environment Environment
DatabaseDsn string
}
var Config *TConfig
func init() {
currUser, err := user.Current()
if err != nil {
currUser = &user.User{Username: ""}
}
defaultDsn := currUser.Username + "@/web43"
port := flag.Int("port", getEnvAsInt("APP_PORT", 8080), "Port for the web-server to listen on")
environment := flag.String("env", getEnv("APP_ENVIRONMENT", "PRODUCTION"), "Environment (DEVELOPMENT|PRODUCTION)")
dbUsn := flag.String("dsn", getEnv("DATABASE_DSN", defaultDsn), "Database connection Data Source Name ([username[:password]@][protocol[(address)]]/dbname)")
flag.Parse()
Config = &TConfig{
Port: *port,
Environment: EnvironmentFromString(*environment),
DatabaseDsn: *dbUsn,
}
}
func getEnv(key string, defaultValue string) string {
value, exists := os.LookupEnv(key)
if !exists {
return defaultValue
}
return value
}
func getEnvAsInt(key string, defaultValue int) int {
valueStr := getEnv(key, "")
if value, err := strconv.Atoi(valueStr); err == nil {
return value
}
return defaultValue
}