75 lines
1.1 KiB
Go
75 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type Config interface {
|
|
Addr() string
|
|
Port() string
|
|
DatabaseURL() string
|
|
}
|
|
type config struct {
|
|
addr string
|
|
port string
|
|
databaseURL string
|
|
}
|
|
|
|
func (c *config) Addr() string {
|
|
return c.addr
|
|
}
|
|
|
|
func (c *config) Port() string {
|
|
return c.port
|
|
}
|
|
|
|
func (c *config) DatabaseURL() string {
|
|
return c.databaseURL
|
|
}
|
|
|
|
func parse() (*config, error) {
|
|
domain := getenv("ADDRESS", "0.0.0.0")
|
|
sshPort := getenv("PORT", "8080")
|
|
databaseURL := getenv("DATABASE_URL", "")
|
|
|
|
if databaseURL == "" {
|
|
return nil, fmt.Errorf("DATABASE_URL environment variable not set")
|
|
}
|
|
|
|
return &config{
|
|
addr: domain,
|
|
port: sshPort,
|
|
databaseURL: databaseURL,
|
|
}, nil
|
|
}
|
|
|
|
func loadEnvFile() error {
|
|
if _, err := os.Stat(".env"); err == nil {
|
|
return godotenv.Load(".env")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func getenv(key, def string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return def
|
|
}
|
|
|
|
func MustLoad() (Config, error) {
|
|
if err := loadEnvFile(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cfg, err := parse()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|