goserver_sync/core/viperx/viper.go

67 lines
1.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package viperx
import (
"bytes"
"fmt"
"os"
"path/filepath"
"github.com/spf13/viper"
)
var paths = []string{
".",
"./etc",
"./config",
}
// ConfigFileEncryptorHook 配置文件加密器
type ConfigFileEncryptorHook interface {
IsCipherText([]byte) bool
Encrypt([]byte) []byte
Decrypt([]byte) []byte
}
var configFileEH ConfigFileEncryptorHook
// RegisterConfigEncryptor 注册配置文件加密器
func RegisterConfigEncryptor(h ConfigFileEncryptorHook) {
configFileEH = h
}
// GetViper 获取viper配置
// name: 配置文件路径和名称json、yaml、ini等
func GetViper(name string) *viper.Viper {
buf, err := ReadFile(name)
if err != nil {
panic(fmt.Sprintf("Error while reading config file %s: %v", name, err))
}
if configFileEH != nil {
if configFileEH.IsCipherText(buf) {
buf = configFileEH.Decrypt(buf)
}
}
vp := viper.New()
ext := filepath.Ext(name)
if len(ext) > 0 {
ext = ext[1:] // 去掉点
}
vp.SetConfigType(ext)
if err = vp.ReadConfig(bytes.NewReader(buf)); err != nil {
panic(fmt.Sprintf("Error while reading config file %s: %v", name, err))
}
return vp
}
func ReadFile(name string) ([]byte, error) {
for _, v := range paths {
file := filepath.Join(v, name)
if _, err := os.Stat(file); err == nil {
return os.ReadFile(file)
}
}
return nil, nil
}