| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | 
							- package entity
 
- import (
 
- 	"io/ioutil"
 
- 	"log"
 
- 	"os"
 
- 	"sync"
 
- 	"gopkg.in/yaml.v2"
 
- )
 
- // parentSavePath Parent Save Path
 
- const parentSavePath = "backup-x-files"
 
- // Config yml格式的配置文件
 
- // go的实体需大写对应config.yml的key, key全部小写
 
- type Config struct {
 
- 	User
 
- 	BackupConfig []BackupConfig
 
- 	Webhook
 
- 	S3Config
 
- 	EncryptKey string // 加密的key
 
- }
 
- // ConfigCache ConfigCache
 
- type cacheType struct {
 
- 	ConfigSingle *Config
 
- 	Err          error
 
- 	Lock         sync.Mutex
 
- }
 
- var cache = &cacheType{}
 
- // GetConfigCache 获得配置
 
- func GetConfigCache() (conf Config, err error) {
 
- 	cache.Lock.Lock()
 
- 	defer cache.Lock.Unlock()
 
- 	if cache.ConfigSingle != nil {
 
- 		return *cache.ConfigSingle, cache.Err
 
- 	}
 
- 	// init config
 
- 	cache.ConfigSingle = &Config{}
 
- 	configFilePath := getConfigFilePath()
 
- 	_, err = os.Stat(configFilePath)
 
- 	if err != nil {
 
- 		log.Println("没有找到配置文件!请在网页中输入")
 
- 		cache.Err = err
 
- 		return *cache.ConfigSingle, err
 
- 	}
 
- 	byt, err := ioutil.ReadFile(configFilePath)
 
- 	if err != nil {
 
- 		log.Println("config.yaml读取失败")
 
- 		cache.Err = err
 
- 		return *cache.ConfigSingle, err
 
- 	}
 
- 	err = yaml.Unmarshal(byt, cache.ConfigSingle)
 
- 	if err != nil {
 
- 		log.Println("反序列化配置文件失败", err)
 
- 		cache.Err = err
 
- 		return *cache.ConfigSingle, err
 
- 	}
 
- 	// remove err
 
- 	cache.Err = nil
 
- 	return *cache.ConfigSingle, err
 
- }
 
- // SaveConfig 保存配置
 
- func (conf *Config) SaveConfig() (err error) {
 
- 	cache.Lock.Lock()
 
- 	defer cache.Lock.Unlock()
 
- 	byt, err := yaml.Marshal(conf)
 
- 	if err != nil {
 
- 		log.Println(err)
 
- 		return err
 
- 	}
 
- 	err = ioutil.WriteFile(getConfigFilePath(), byt, 0600)
 
- 	if err != nil {
 
- 		log.Println(err)
 
- 		return
 
- 	}
 
- 	// 清空配置缓存
 
- 	cache.ConfigSingle = nil
 
- 	return
 
- }
 
- // GetConfigFilePath 获得配置文件路径, 保存到备份目录下
 
- func getConfigFilePath() string {
 
- 	_, err := os.Stat(parentSavePath)
 
- 	if err != nil {
 
- 		os.Mkdir(parentSavePath, 0750)
 
- 	}
 
- 	return parentSavePath + string(os.PathSeparator) + ".backup_x_config.yaml"
 
- }
 
 
  |