feedizer/cmd/feedizer/internal/config/config.go
fanir a7d08500f5 database and migrator revisions, help output, data model changes
- 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
2022-02-22 00:08:19 +01:00

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
}