package core import ( "fmt" "io" "os" "git.exozy.me/exozyme/status/scanner" "github.com/pelletier/go-toml/v2" ) type Config struct { SiteName string IconSrc string Database string UnixSocket string BasicAuthUsername string BasicAuthPassword string Service []scanner.ServiceConfig Matrix MatrixConfig } func LoadConfigFromTOML(configPath string) (*Config, error) { file, err := os.Open(configPath) if err != nil { return nil, err } defer file.Close() fileData, err := io.ReadAll(file) if err != nil { return nil, err } var cfg Config err = toml.Unmarshal([]byte(fileData), &cfg) if err != nil { return nil, err } return &cfg, nil } func LoadConfig() (*Config, error) { const path1 string = "/opt/status-config/config.toml" const path2 string = "proto/config.toml" const path3 string = "../config.toml" config, err := LoadConfigFromTOML(path1) if err != nil { config, err = LoadConfigFromTOML(path2) if err != nil { config, err = LoadConfigFromTOML(path3) if err != nil { return nil, fmt.Errorf("Cannot load config file:\n- %v\n- %v\n- %v\n%w\nSuggestion: cp proto/config.toml.in proto/config.toml", path1, path2, path3, err) } } } return config, nil }