Files
EdgeAdmin/internal/configs/api_config.go

103 lines
2.2 KiB
Go
Raw Normal View History

2020-07-22 22:19:39 +08:00
package configs
import (
teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const"
2020-07-22 22:19:39 +08:00
"github.com/go-yaml/yaml"
"github.com/iwind/TeaGo/Tea"
"io/ioutil"
"os"
"path/filepath"
2020-07-22 22:19:39 +08:00
)
2021-04-18 15:41:47 +08:00
// APIConfig API配置
2020-07-22 22:19:39 +08:00
type APIConfig struct {
RPC struct {
Endpoints []string `yaml:"endpoints"`
} `yaml:"rpc"`
NodeId string `yaml:"nodeId"`
Secret string `yaml:"secret"`
}
2021-04-18 15:41:47 +08:00
// LoadAPIConfig 加载API配置
2020-07-22 22:19:39 +08:00
func LoadAPIConfig() (*APIConfig, error) {
// 候选文件
localFile := Tea.ConfigFile("api.yaml")
isFromLocal := false
paths := []string{localFile}
2021-02-01 09:25:57 +08:00
homeDir, homeErr := os.UserHomeDir()
if homeErr == nil {
paths = append(paths, homeDir+"/."+teaconst.ProcessName+"/api.yaml")
}
paths = append(paths, "/etc/"+teaconst.ProcessName+"/api.yaml")
var data []byte
2021-02-01 09:25:57 +08:00
var err error
for _, path := range paths {
data, err = ioutil.ReadFile(path)
if err == nil {
if path == localFile {
isFromLocal = true
}
break
}
}
2020-07-22 22:19:39 +08:00
if err != nil {
return nil, err
}
config := &APIConfig{}
err = yaml.Unmarshal(data, config)
if err != nil {
return nil, err
}
if !isFromLocal {
// 恢复文件
_ = ioutil.WriteFile(localFile, data, 0666)
}
2020-07-22 22:19:39 +08:00
return config, nil
}
2020-10-13 20:05:29 +08:00
2021-04-18 15:41:47 +08:00
// WriteFile 写入API配置
2020-10-13 20:05:29 +08:00
func (this *APIConfig) WriteFile(path string) error {
data, err := yaml.Marshal(this)
if err != nil {
return err
}
err = ioutil.WriteFile(path, data, 0666)
// 写入 ~/ 和 /etc/ 目录,因为是备份需要,所以不需要提示错误信息
// 写入 ~/.edge-admin/
filename := filepath.Base(path)
2021-02-01 09:25:57 +08:00
homeDir, homeErr := os.UserHomeDir()
if homeErr == nil {
dir := homeDir + "/." + teaconst.ProcessName
stat, err := os.Stat(dir)
if err == nil && stat.IsDir() {
_ = ioutil.WriteFile(dir+"/"+filename, data, 0666)
} else if err != nil && os.IsNotExist(err) {
err = os.Mkdir(dir, 0777)
if err == nil {
_ = ioutil.WriteFile(dir+"/"+filename, data, 0666)
}
}
}
// 写入 /etc/.edge-admin
{
dir := "/etc/" + teaconst.ProcessName
stat, err := os.Stat(dir)
if err == nil && stat.IsDir() {
_ = ioutil.WriteFile(dir+"/"+filename, data, 0666)
} else if err != nil && os.IsNotExist(err) {
err = os.Mkdir(dir, 0777)
if err == nil {
_ = ioutil.WriteFile(dir+"/"+filename, data, 0666)
}
}
}
return err
2020-10-13 20:05:29 +08:00
}