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  }