59 lines
1.2 KiB
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
|
|
}
|