go-pingbot/config/toml.go

87 lines
1.5 KiB
Go

package config
import (
"io"
"net/http"
"os"
"time"
"github.com/BurntSushi/toml"
"github.com/MedzikUser/go-utils/common"
)
type tomlConfig struct {
HTTP httpConfig
Backend backendConfig
AutoUpdate autoUpdateConfig
Cluster clusterConfig
MongoDB mongoDBConfig
Options optionsConfig
}
type httpConfig struct {
Enabled bool
Port int
}
type backendConfig struct {
Enabled bool
Ping time.Duration
}
type autoUpdateConfig struct {
Enabled bool
Check time.Duration
}
type clusterConfig struct {
ID int
}
type mongoDBConfig struct {
Database string
Collection string
}
type optionsConfig struct {
Stop_After_Ping bool
Stop_After_Ping_Timeout time.Duration
}
var Toml tomlConfig
func init() {
_, err := toml.DecodeFile("./config.toml", &Toml)
if common.CheckErr(err, "decode toml config") {
if err.Error() == "open ./config.toml: no such file or directory" {
err := DownloadFile("config.toml", "https://github.com/"+GH_Repo+"/raw/main/config.schema.toml")
if !common.CheckErr(err, "download default config") {
_, err = toml.DecodeFile("./config.toml", &Toml)
common.CheckErr(err, "decode toml config")
os.Exit(1)
}
}
}
}
func DownloadFile(filepath string, url string) error {
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
// Create the file
out, err := os.Create(filepath)
if err != nil {
return err
}
defer out.Close()
// Write the body to file
_, err = io.Copy(out, resp.Body)
return err
}