LicenseManger/internal/utils/config.go

80 lines
1.3 KiB
Go

package utils
import (
"os"
"github.com/spf13/viper"
)
type Config struct {
Server struct {
Port string `yaml:"port"`
Mode string `yaml:"mode"`
} `yaml:"server"`
Database DatabaseConfig `yaml:"database"`
JWT JWTConfig `yaml:"jwt"`
Email EmailConfig `yaml:"email"`
Upload UploadConfig `yaml:"upload"`
Site SiteConfig `yaml:"site"`
Security SecurityConfig `yaml:"security"`
}
type DatabaseConfig struct {
Path string
}
type JWTConfig struct {
Secret string
Expire string
}
type EmailConfig struct {
Host string
Port int
Username string
Password string
}
type UploadConfig struct {
Path string
}
type SiteConfig struct {
Title string
Description string
BaseURL string
Logo string
Favicon string
Copyright string
ICP string
}
type SecurityConfig struct {
EncryptKey string
}
func LoadConfig() (*Config, error) {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath("./config")
// 读取环境变量
viper.AutomaticEnv()
if err := viper.ReadInConfig(); err != nil {
return nil, err
}
config := &Config{}
if err := viper.Unmarshal(config); err != nil {
return nil, err
}
// 环境变量优先
if port := os.Getenv("SERVER_PORT"); port != "" {
config.Server.Port = port
}
return config, nil
}