fanir
a7d08500f5
- database: - moved to jackc/pgx from database/sql - revised migrator and moved it into it's own package - separated ParseConfig into it's own function - config: - database config is now a DSN or URL instead of a struct - SearchPaths are now available through a function - improved help / usage output - modified data model
62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"log"
|
|
"path/filepath"
|
|
|
|
"github.com/adrg/xdg"
|
|
)
|
|
|
|
type ServerConfig struct {
|
|
Address string
|
|
TemplateDir string
|
|
StaticDir string
|
|
}
|
|
|
|
type Config struct {
|
|
Database string
|
|
|
|
Server ServerConfig
|
|
|
|
AllowRoot bool
|
|
}
|
|
|
|
var config = Config{
|
|
Database: "feedizer@localhost:5432/feedizer?sslmode=require&search_path=public",
|
|
Server: ServerConfig{
|
|
Address: ":3000",
|
|
TemplateDir: "",
|
|
StaticDir: "",
|
|
},
|
|
}
|
|
|
|
const appName = "feedizer"
|
|
|
|
func SearchPaths() []string {
|
|
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"
|
|
|
|
return paths
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
paths := SearchPaths()
|
|
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
|
|
}
|