feedizer/cmd/feedizer/config/config.go

72 lines
1.4 KiB
Go

package config
import (
"log"
"path/filepath"
"github.com/adrg/xdg"
)
type DatabaseConfig struct {
Socket string
Host string
Port int
Username string
Password string
Database string
Options string
}
type ServerConfig struct {
Address string
TemplateDir string
StaticDir string
}
type Config struct {
Database DatabaseConfig
Server ServerConfig
AllowRoot bool
}
var config = Config{
Database: DatabaseConfig{
Host: "localhost",
Port: 5432,
Database: "feedizer",
Options: "sslmode=require",
},
Server: ServerConfig{
Address: ":3000",
TemplateDir: "../../templates",
StaticDir: "../../static",
},
}
const appName = "feedizer"
func Load() (*Config, error) {
numXdgDirs := len(xdg.ConfigDirs)
paths := make([]string, numXdgDirs+2)
for i, path := range xdg.ConfigDirs {
paths[numXdgDirs-i-1] = filepath.Join(path, appName, appName+".yaml")
}
paths[numXdgDirs] = filepath.Join(xdg.ConfigHome, appName, appName+".yaml")
paths[numXdgDirs+1] = appName + ".yaml"
used, err := ReadFiles(paths, &config)
if err != nil {
return nil, err
}
log.Println("config: search paths are:", paths)
log.Println("config: using config files:", used)
envAvailable, envUsed := ReadEnv(&config, appName)
log.Println("config: usable env vars:", envAvailable)
log.Println("config: using env vars:", envUsed)
return &config, nil
}