mc-client-updater-server/pkg/conf/conf.go

86 lines
2.0 KiB
Go
Raw Permalink Normal View History

2022-10-04 00:36:01 +08:00
package conf
import (
"encoding/json"
"github.com/BurntSushi/toml"
"github.com/mcuadros/go-defaults"
"mc-client-updater-server/pkg/log"
"mc-client-updater-server/pkg/util"
"os"
)
type Config struct {
Common Common `toml:"common"`
Database Database `toml:"database"`
Security Security `toml:"security"`
}
type Common struct {
Host string `toml:"host" default:"0.0.0.0"`
Port uint16 `toml:"port" default:"8080"`
}
type Database struct {
Host string `toml:"host" default:"localhost"`
Port uint16 `toml:"port" default:"5432"`
User string `toml:"user" default:"user"`
Password string `toml:"password" default:"password"`
DB string `toml:"db" default:"mc_client_updater"`
}
type Security struct {
PasswordEncoder string `toml:"password_encoder" default:"argon2id"`
JWTSecret string `toml:"jwt_secret"`
}
var (
Conf *Config
)
// 释放默认配置文件
func releaseConfig(file string, config *Config) {
f, err := util.CreateNestedFile(file)
if err != nil {
log.Logger.Fatalf("创建默认配置文件失败: %s", err.Error())
}
if config.Security.JWTSecret == "" {
config.Security.JWTSecret = util.RandStr(32)
}
encoder := toml.NewEncoder(f)
err = encoder.Encode(config)
if err != nil {
log.Logger.Fatalf("创建默认配置文件失败: %s", err.Error())
}
}
func InitConfig(file string) {
Conf = &Config{}
defaults.SetDefaults(Conf)
if util.NotExists(file) {
// 默认配置文件不存在则创建
if file == "config.toml" {
releaseConfig(file, Conf)
log.Logger.Infof("已创建默认配置文件: %s请修改配置文件内容后重新启动", file)
os.Exit(0)
} else {
log.Logger.Fatalf("配置文件不存在: %s", file)
}
}
// 解析配置文件
_, err := toml.DecodeFile(file, &Conf)
if err != nil {
log.Logger.Fatalf("配置文件解析出错: %s", err.Error())
}
// 配置预检查
jsonConfig, err := json.Marshal(Conf)
if err == nil {
log.Logger.Debugf("配置文件已加载: %s", string(jsonConfig))
}
}