status/core/config.go

59 lines
1.2 KiB
Go

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
}