feat: 合并Gin_Vue

This commit is contained in:
TsMask
2023-10-16 17:10:38 +08:00
parent 5289818fd4
commit 40a32cb67f
203 changed files with 19719 additions and 178 deletions

View File

@@ -0,0 +1,163 @@
package config
import (
"bytes"
"embed"
"fmt"
"log"
"os"
"time"
libConfig "ems.agt/src/lib_features/config"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
//go:embed config/*.yaml
var configFiles embed.FS
// 初始化程序配置
func InitConfig() {
initFlag()
initViper()
}
// 指定参数绑定
func initFlag() {
// --env prod
pflag.String("env", "prod", "Specify Run Environment Configuration local or prod")
// --c /etc/restconf.yaml
// -c /etc/restconf.yaml
pConfig := pflag.StringP("config", "c", "./etc/restconf.yaml", "Specify Configuration File")
// --version
// -V
pVersion := pflag.BoolP("version", "V", false, "Output program version")
// --help
pHelp := pflag.Bool("help", false, "Viewing Help Commands")
pflag.Parse()
// 参数固定输出
if *pVersion {
buildInfo := libConfig.BuildInfo()
fmt.Println(buildInfo)
os.Exit(1)
}
if *pHelp {
pflag.Usage()
os.Exit(1)
}
// 外层lib和features使用的配置
libConfig.ConfigRead(*pConfig)
viper.BindPFlags(pflag.CommandLine)
}
// 配置文件读取
func initViper() {
// 在当前工作目录中寻找配置
// viper.AddConfigPath("config")
// viper.AddConfigPath("src/config")
// 如果配置文件名中没有扩展名则需要设置Type
viper.SetConfigType("yaml")
// 从 embed.FS 中读取默认配置文件内容
configDefault, err := configFiles.ReadFile("config/config.default.yaml")
if err != nil {
log.Fatalf("ReadFile config default file: %s", err)
return
}
// 设置默认配置文件内容到 viper
err = viper.ReadConfig(bytes.NewReader(configDefault))
if err != nil {
log.Fatalf("NewReader config default file: %s", err)
return
}
// // 配置文件的名称(无扩展名)
// viper.SetConfigName("config.default")
// // 读取默认配置文件
// if err := viper.ReadInConfig(); err != nil {
// log.Fatalf("fatal error config default file: %s", err)
// }
env := viper.GetString("env")
if env != "local" && env != "prod" {
log.Fatalf("fatal error config env for local or prod : %s", env)
}
log.Printf("Current service environment operation configuration => %s \n", env)
// 加载运行配置文件合并相同配置
if env == "prod" {
// viper.SetConfigName("config.prod")
// 从 embed.FS 中读取默认配置文件内容
configProd, err := configFiles.ReadFile("config/config.prod.yaml")
if err != nil {
log.Fatalf("ReadFile config prod file: %s", err)
return
}
// 设置默认配置文件内容到 viper
err = viper.MergeConfig(bytes.NewReader(configProd))
if err != nil {
log.Fatalf("NewReader config prod file: %s", err)
return
}
} else {
// viper.SetConfigName("config.local")
// 从 embed.FS 中读取默认配置文件内容
configLocal, err := configFiles.ReadFile("config/config.local.yaml")
if err != nil {
log.Fatalf("ReadFile config local file: %s", err)
return
}
// 设置默认配置文件内容到 viper
err = viper.MergeConfig(bytes.NewReader(configLocal))
if err != nil {
log.Fatalf("NewReader config local file: %s", err)
return
}
}
// if err := viper.MergeInConfig(); err != nil {
// log.Fatalf("fatal error config MergeInConfig: %s", err)
// }
// 合并外层lib和features使用配置
libConfig.ConfigInMerge()
// 记录程序开始运行的时间点
viper.Set("runTime", time.Now())
}
// Env 获取运行服务环境
// local prod
func Env() string {
return viper.GetString("env")
}
// RunTime 程序开始运行的时间
func RunTime() time.Time {
return viper.GetTime("runTime")
}
// Get 获取配置信息
//
// Get("framework.name")
func Get(key string) any {
return viper.Get(key)
}
// IsAdmin 用户是否为管理员
func IsAdmin(userID string) bool {
if userID == "" {
return false
}
// 从本地配置获取user信息
admins := Get("user.adminList").([]any)
for _, s := range admins {
if s.(string) == userID {
return true
}
}
return false
}

View File

@@ -0,0 +1,208 @@
# 项目信息
framework:
name: "ems_agt"
version: "0.0.1"
# 应用服务配置
server:
# 服务端口
port: 3040
# 是否开启代理
proxy: false
# 日志
logger:
fileDir: "/usr/local/omc/logs"
fileName: "ems_agt.log"
level: 2 # 日志记录的等级 0:silent<1:info<2:warn<3:error
maxDay: 30 # 日志会保留 30 天
maxSize: 10 # 调整按 10MB 大小的切割
# 静态文件配置, 相对项目根路径或填绝对路径
staticFile:
# 默认资源dir目录需要预先创建
default:
prefix: "/static"
dir: "/usr/local/omc/static"
# 文件上传资源目录映射,与项目目录同级
upload:
prefix: "/upload"
dir: "/usr/local/omc/upload"
# 文件上传
upload:
# 最大上传文件大小,默认为 10mb
fileSize: 10
# 文件扩展名白名单
whitelist:
# 图片
- ".bmp"
- ".webp"
- ".gif"
- ".jpg"
- ".jpeg"
- ".png"
# word excel powerpoint
- ".doc"
- ".docx"
- ".xls"
- ".xlsx"
- ".ppt"
- ".pptx"
# 文本文件
- ".html"
- ".htm"
- ".txt"
# pdf
- ".pdf"
# 压缩文件
- ".zip"
- ".gz"
- ".tgz"
- ".gzip"
# 音视频格式
- ".mp3"
- ".mp4"
- ".avi"
- ".rmvb"
# cors 跨域
cors:
# 设置 Access-Control-Allow-Origin 的值,【默认值】会获取请求头上的 origin
# 例如http://mask-api.org
# 如果请求设置了 credentials则 origin 不能设置为 *
origin: "*"
# 设置 Access-Control-Allow-Credentials【默认值】false
credentials: true
# 设置 Access-Control-Max-Age
maxAge: 31536000
# 允许跨域的方法,【默认值】为 GET,HEAD,PUT,POST,DELETE,PATCH
allowMethods:
- "OPTIONS"
- "HEAD"
- "GET"
- "POST"
- "PUT"
- "DELETE"
- "PATCH"
# 设置 Access-Control-Allow-Headers 的值,【默认值】会获取请求头上的 Access-Control-Request-Headers
allowHeaders:
- "X-App-Code"
- "X-App-Version"
- "Authorization"
- "Origin"
- "X-Requested-With"
- "Content-Type"
- "Content-Language"
- "Accept"
- "Range"
- "Accesstoken"
- "Operationtype"
# 设置 Access-Control-Expose-Headers 的值
exposeHeaders:
- "X-RepeatSubmit-Rest"
# security 安全
security:
csrf:
enable: false
type: "referer"
# 允许调用的域名地址的例如http://<Referer地址>/mask-api
refererWhiteList:
- "127.0.0.1:3030"
xframe:
enable: true
value: "SAMEORIGIN"
csp:
enable: true
hsts:
enable: false
maxAge: 31536000
includeSubdomains: false
noopen:
enable: false
nosniff:
enable: false
xssProtection:
enable: true
value: "1; mode=block"
# JWT 令牌配置
jwt:
# 令牌算法 HS256 HS384 HS512
algorithm: "HS512"
# 令牌密钥
secret: "217a0481c7f9cfe1cb547d32ee012b0f"
# 令牌有效期默认120分钟
expiresIn: 120
# 验证令牌有效期相差不足xx分钟自动刷新缓存
refreshIn: 20
# GORM 数据源
gorm:
dataSource:
# 默认数据库实例
default:
type: "mysql"
host: "127.0.0.1"
port: 3306
username: "<用户名>"
password: "<密码>"
database: "<数据库>"
logging: false
# 多个数据源时可以用这个指定默认的数据源
defaultDataSourceName: "default"
# Redis 缓存数据
redis:
dataSource:
default:
port: 6379 # Redis port
host: "127.0.0.1" # Redis host
password: "<密码>"
db: 0 # Redis db_num
# 多个数据源时可以用这个指定默认的数据源
defaultDataSourceName: "default"
# 用户配置
user:
# 密码
password:
# 密码最大错误次数
maxRetryCount: 5
# 密码锁定时间,单位分钟默认10分钟
lockTime: 10
# 管理员列表
adminList:
- "1"
- "2"
# char 字符验证码配置
charCaptcha:
# 宽度
width: 120
# 高度
height: 40
# 干扰线条的数量
noise: 4
# 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有
color: true
# 验证码图片背景颜色
background: "#fafafa"
# 验证码长度
size: 4
# 验证码字符
chars: "023456789abcdefghjkmnprstuvwxyz"
# math 数值计算码配置
mathCaptcha:
# 宽度
width: 120
# 高度
height: 40
# 干扰线条的数量
noise: 4
# 验证码的字符是否有颜色,默认没有,如果设定了背景,则默认有
color: true
# 验证码图片背景颜色
background: "#fafafa"

View File

@@ -0,0 +1,53 @@
# 应用服务配置
server:
port: 3040
# 日志
logger:
fileDir: "C:/usr/local/omc/logs"
level: 0 # 输出最低等级
# 静态文件配置, 相对项目根路径或填绝对路径
staticFile:
default:
dir: "C:/usr/local/omc/static"
# 文件上传资源目录映射,与项目目录同级
upload:
dir: "C:/usr/local/omc/upload"
# security 安全
security:
csrf:
refererWhiteList:
- "localhost:3131"
- "127.0.0.1:3131"
# GORM 数据源
gorm:
dataSource:
default:
type: "mysql"
host: "192.168.0.229"
port: 33066
username: "root"
password: "1000omc@kp!"
database: "omc_db_dev"
logging: true
# Redis 缓存数据,数据源声明全小写
redis:
dataSource:
# OMC系统使用库
default:
port: 6379 # Redis port
host: "192.168.0.229" # Redis host
password: ""
db: 10 # Redis db_num
# UDM网元用户库
udmuser:
port: 6379 # Redis port
host: "192.168.0.229"
password: ""
db: 0 # Redis db_num
# 多个数据源时可以用这个指定默认的数据源
defaultDataSourceName: "default"

View File

@@ -0,0 +1,32 @@
# 应用服务配置
server:
port: 3040
proxy: true
# security 安全
security:
csrf:
# 允许调用的域名地址的例如http://<Referer地址>/
refererWhiteList:
- "127.0.0.1"
- "<Referer地址>"
# GORM 数据源
gorm:
dataSource:
default:
type: "mysql"
host: "<mysql地址>"
port: 3306
username: "<用户名>"
password: "<密码>"
database: "<数据库>"
# Redis 缓存数据
redis:
dataSource:
default:
port: 6379 # Redis port
host: "<redis地址>"
password: "<密码>"
db: 0 # Redis db_num