github.com/10ego/gthp@v0.0.0-20241025155251-e1514fa71fbb/internal/config/config.go (about) 1 package config 2 3 import ( 4 "fmt" 5 "os" 6 "strconv" 7 8 "github.com/joho/godotenv" 9 ) 10 11 type Config struct { 12 ServerAddr string 13 DatabaseURL string 14 LDAPHost string 15 LDAPPort int 16 LDAPBaseDN string 17 LDAPUserFilter string 18 LDAPGroupDN string 19 Development bool 20 Title string 21 } 22 23 func Load() (*Config, error) { 24 err := godotenv.Load() 25 if err != nil { 26 fmt.Errorf("Failed to load environment variables", "error", err) 27 return nil, err 28 } 29 30 return &Config{ 31 ServerAddr: getEnv("SERVER_ADDR", ":8080"), 32 DatabaseURL: getEnv("DATABASE_URL", "postgres://user:password@localhost/gthp?sslmode=disable"), 33 LDAPHost: getEnv("LDAP_HOST", "ldap.my.local"), 34 LDAPPort: getEnvInt("LDAP_PORT", 3389), 35 LDAPBaseDN: getEnv("LDAP_BASE_DN", "dc=my,dc=local"), 36 LDAPUserFilter: getEnv("LDAP_USER_FILTER", "ou=ad,dc=my,dc=local"), 37 LDAPGroupDN: getEnv("LDAP_GROUP_DN", "cn=mygroup,ou=groups,dc=my,dc=local"), 38 Development: getEnvBool("DEVELOPMENT", true), 39 Title: getEnv("TITLE", "default site title"), 40 }, nil 41 } 42 43 func getEnv(key string, fallback string) string { 44 if value, ok := os.LookupEnv(key); ok { 45 return value 46 } 47 return fallback 48 } 49 func getEnvInt(key string, fallback int) int { 50 if value, ok := os.LookupEnv(key); ok { 51 n, err := strconv.Atoi(value) 52 if err != nil { 53 panic(err) 54 } 55 return n 56 } 57 return fallback 58 } 59 func getEnvBool(key string, fallback bool) bool { 60 if value, ok := os.LookupEnv(key); ok { 61 b, err := strconv.ParseBool(value) 62 if err == nil { 63 return b 64 } 65 } 66 return fallback 67 }