diff --git a/common/cool/cool.go b/common/cool/cool.go index a1d86ee9e..cf703d25c 100644 --- a/common/cool/cool.go +++ b/common/cool/cool.go @@ -1,91 +1,91 @@ -package cool - -import ( - "context" - - "github.com/gogf/gf/v2/database/gredis" - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/i18n/gi18n" - "github.com/gogf/gf/v2/os/gbuild" - "github.com/gogf/gf/v2/os/gcache" - "github.com/gogf/gf/v2/os/gctx" - "github.com/gogf/gf/v2/util/guid" - "gorm.io/gorm" -) - -var ( - GormDBS = make(map[string]*gorm.DB) // 定义全局gorm.DB对象集合 仅供内部使用 - CacheEPS = gcache.New() // 定义全局缓存对象 供EPS使用 - CacheManager = gcache.New() // 定义全局缓存对象 供其他业务使用 - ProcessFlag = guid.S() // 定义全局进程标识 - RunMode = "dev" // 定义全局运行模式 - IsRedisMode = false // 定义全局是否为redis模式 - I18n = gi18n.New() // 定义全局国际化对象 -) - -func init() { - var ( - ctx = gctx.GetInitCtx() - redisConfig = &gredis.Config{} - ) - g.Log().Debug(ctx, "module cool init start ...") - buildData := gbuild.Data() - if _, ok := buildData["mode"]; ok { - RunMode = buildData["mode"].(string) - } - if RunMode == "cool-tools" { - return - } - redisVar, err := g.Cfg().Get(ctx, "redis.cool") - if err != nil { - g.Log().Error(ctx, "初始化缓存失败,请检查配置文件") - panic(err) - } - if !redisVar.IsEmpty() { - redisVar.Struct(redisConfig) - redis, err := gredis.New(redisConfig) - if err != nil { - panic(err) - } - CacheManager.SetAdapter(gcache.NewAdapterRedis(redis)) - IsRedisMode = true - } - g.Log().Debug(ctx, "当前运行模式", RunMode) - g.Log().Debug(ctx, "当前实例ID:", ProcessFlag) - g.Log().Debug(ctx, "是否缓存模式:", IsRedisMode) - g.Log().Debug(ctx, "module cool init finished ...") - -} - -// cool.OK 正常返回 -type BaseRes struct { - Code int `json:"code"` - Message string `json:"message"` - Data interface{} `json:"data,omitempty"` -} - -// 返回正常结果 -func Ok(data interface{}) *BaseRes { - - return &BaseRes{ - Code: 1000, - Message: I18n.Translate(context.TODO(), "BaseResMessage"), - Data: data, - } -} - -// 失败返回结果 -func Fail(message string) *BaseRes { - return &BaseRes{ - Code: 1001, - Message: message, - } -} - -// 分布式函数 -// func DistributedFunc(ctx g.Ctx, f func(ctx g.Ctx) (interface{}, error)) (interface{}, error) { -// if ProcessFlag == ctx.Request.Header.Get("processFlag") { -// return f(ctx) -// } -// return nil, nil -// } +package cool + +import ( + "context" + + "github.com/gogf/gf/v2/database/gredis" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/i18n/gi18n" + "github.com/gogf/gf/v2/os/gbuild" + "github.com/gogf/gf/v2/os/gcache" + "github.com/gogf/gf/v2/os/gctx" + "github.com/gogf/gf/v2/util/guid" + "gorm.io/gorm" +) + +var ( + GormDBS = make(map[string]*gorm.DB) // 定义全局gorm.DB对象集合 仅供内部使用 + CacheEPS = gcache.New() // 定义全局缓存对象 供EPS使用 + CacheManager = gcache.New() // 定义全局缓存对象 供其他业务使用 + ProcessFlag = guid.S() // 定义全局进程标识 + RunMode = "dev" // 定义全局运行模式 + IsRedisMode = false // 定义全局是否为redis模式 + I18n = gi18n.New() // 定义全局国际化对象 +) + +func init() { + var ( + ctx = gctx.GetInitCtx() + redisConfig = &gredis.Config{} + ) + g.Log().Debug(ctx, "module cool init start ...") + buildData := gbuild.Data() + if _, ok := buildData["mode"]; ok { + RunMode = buildData["mode"].(string) + } + if RunMode == "cool-tools" { + return + } + redisVar, err := g.Cfg().Get(ctx, "redis.cool") + if err != nil { + g.Log().Error(ctx, "初始化缓存失败,请检查配置文件") + panic(err) + } + if !redisVar.IsEmpty() { + redisVar.Struct(redisConfig) + redis, err := gredis.New(redisConfig) + if err != nil { + panic(err) + } + CacheManager.SetAdapter(gcache.NewAdapterRedis(redis)) + IsRedisMode = true + } + g.Log().Debug(ctx, "当前运行模式", RunMode) + g.Log().Debug(ctx, "当前实例ID:", ProcessFlag) + g.Log().Debug(ctx, "是否缓存模式:", IsRedisMode) + g.Log().Debug(ctx, "module cool init finished ...") + +} + +// cool.OK 正常返回 +type BaseRes struct { + Code int `json:"code"` + Message string `json:"message"` + Data interface{} `json:"data,omitempty"` +} + +// 返回正常结果 +func Ok(data interface{}) *BaseRes { + + return &BaseRes{ + Code: 1000, + Message: I18n.Translate(context.TODO(), "BaseResMessage"), + Data: data, + } +} + +// 失败返回结果 +func Fail(message string) *BaseRes { + return &BaseRes{ + Code: 1001, + Message: message, + } +} + +// 分布式函数 +// func DistributedFunc(ctx g.Ctx, f func(ctx g.Ctx) (interface{}, error)) (interface{}, error) { +// if ProcessFlag == ctx.Request.Header.Get("processFlag") { +// return f(ctx) +// } +// return nil, nil +// } diff --git a/common/cool/coolconfig/config.go b/common/cool/coolconfig/config.go index 8998bf84a..0490c67d2 100644 --- a/common/cool/coolconfig/config.go +++ b/common/cool/coolconfig/config.go @@ -1,64 +1,70 @@ -package coolconfig - -import "github.com/gogf/gf/v2/frame/g" - -// cool config -type sConfig struct { - AutoMigrate bool `json:"auto_migrate,omitempty"` // 是否自动创建表 - Eps bool `json:"eps,omitempty"` // 是否开启eps - File *file `json:"file,omitempty"` // 文件上传配置 -} - -// OSS相关配置 -type oss struct { - Endpoint string `json:"endpoint"` - AccessKeyID string `json:"accessKeyID"` - SecretAccessKey string `json:"secretAccessKey"` - UseSSL bool `json:"useSSL"` - BucketName string `json:"bucketName"` - Location string `json:"location"` -} - -// 文件上传配置 -type file struct { - Mode string `json:"mode"` // 模式 local oss - Domain string `json:"domain"` // 域名 http:// - Oss *oss `json:"oss,omitempty"` -} - -// NewConfig new config -func newConfig() *sConfig { - var ctx g.Ctx - config := &sConfig{ - AutoMigrate: GetCfgWithDefault(ctx, "cool.autoMigrate", g.NewVar(false)).Bool(), - Eps: GetCfgWithDefault(ctx, "cool.eps", g.NewVar(false)).Bool(), - File: &file{ - Mode: GetCfgWithDefault(ctx, "cool.file.mode", g.NewVar("none")).String(), - Domain: GetCfgWithDefault(ctx, "cool.file.domain", g.NewVar("http://127.0.0.1:8300")).String(), - Oss: &oss{ - Endpoint: GetCfgWithDefault(ctx, "cool.file.oss.endpoint", g.NewVar("127.0.0.1:9000")).String(), - AccessKeyID: GetCfgWithDefault(ctx, "cool.file.oss.accessKeyID", g.NewVar("")).String(), - SecretAccessKey: GetCfgWithDefault(ctx, "cool.file.oss.secretAccessKey", g.NewVar("")).String(), - UseSSL: GetCfgWithDefault(ctx, "cool.file.oss.useSSL", g.NewVar(false)).Bool(), - BucketName: GetCfgWithDefault(ctx, "cool.file.oss.bucketName", g.NewVar("cool-admin-go")).String(), - Location: GetCfgWithDefault(ctx, "cool.file.oss.location", g.NewVar("us-east-1")).String(), - }, - }, - } - return config -} - -// Config config -var Config = newConfig() - -// GetCfgWithDefault get config with default value -func GetCfgWithDefault(ctx g.Ctx, key string, defaultValue *g.Var) *g.Var { - value, err := g.Cfg().GetWithEnv(ctx, key) - if err != nil { - return defaultValue - } - if value.IsEmpty() || value.IsNil() { - return defaultValue - } - return value -} +package coolconfig + +import "github.com/gogf/gf/v2/frame/g" + +// cool config +type sConfig struct { + AutoMigrate bool `json:"auto_migrate,omitempty"` // 是否自动创建表 + Eps bool `json:"eps,omitempty"` // 是否开启eps + File *file `json:"file,omitempty"` // 文件上传配置 + Name string `json:"name"` // 项目名称 + Port string `json:"port"` + PortBL string `json:"port_bl"` +} + +// OSS相关配置 +type oss struct { + Endpoint string `json:"endpoint"` + AccessKeyID string `json:"accessKeyID"` + SecretAccessKey string `json:"secretAccessKey"` + UseSSL bool `json:"useSSL"` + BucketName string `json:"bucketName"` + Location string `json:"location"` +} + +// 文件上传配置 +type file struct { + Mode string `json:"mode"` // 模式 local oss + Domain string `json:"domain"` // 域名 http:// + Oss *oss `json:"oss,omitempty"` +} + +// NewConfig new config +func newConfig() *sConfig { + var ctx g.Ctx + config := &sConfig{ + AutoMigrate: GetCfgWithDefault(ctx, "blazing.autoMigrate", g.NewVar(false)).Bool(), + Name: GetCfgWithDefault(ctx, "server.name", g.NewVar("")).String(), + Eps: GetCfgWithDefault(ctx, "blazing.eps", g.NewVar(false)).Bool(), + Port: string(GetCfgWithDefault(ctx, "server.port", g.NewVar("8080")).String()), + PortBL: string(GetCfgWithDefault(ctx, "blazing.port", g.NewVar("8080")).String()), + File: &file{ + Mode: GetCfgWithDefault(ctx, "blazing.file.mode", g.NewVar("none")).String(), + Domain: GetCfgWithDefault(ctx, "blazing.file.domain", g.NewVar("http://127.0.0.1:8300")).String(), + Oss: &oss{ + Endpoint: GetCfgWithDefault(ctx, "blazing.file.oss.endpoint", g.NewVar("127.0.0.1:9000")).String(), + AccessKeyID: GetCfgWithDefault(ctx, "blazing.file.oss.accessKeyID", g.NewVar("")).String(), + SecretAccessKey: GetCfgWithDefault(ctx, "blazing.file.oss.secretAccessKey", g.NewVar("")).String(), + UseSSL: GetCfgWithDefault(ctx, "blazing.file.oss.useSSL", g.NewVar(false)).Bool(), + BucketName: GetCfgWithDefault(ctx, "blazing.file.oss.bucketName", g.NewVar("blazing")).String(), + Location: GetCfgWithDefault(ctx, "blazing.file.oss.location", g.NewVar("us-east-1")).String(), + }, + }, + } + return config +} + +// Config config +var Config = newConfig() + +// GetCfgWithDefault get config with default value +func GetCfgWithDefault(ctx g.Ctx, key string, defaultValue *g.Var) *g.Var { + value, err := g.Cfg().GetWithEnv(ctx, key) + if err != nil { + return defaultValue + } + if value.IsEmpty() || value.IsNil() { + return defaultValue + } + return value +} diff --git a/logic/main.go b/logic/main.go index a4e97fd74..5d84550b9 100644 --- a/logic/main.go +++ b/logic/main.go @@ -26,7 +26,7 @@ func main() { if cool.IsRedisMode { go cool.ListenFunc(gctx.New()) } - Start("27777") //注入service + Start(cool.Config.PortBL) //注入service } func Start(port string) { diff --git a/login/internal/cmd/cmd.go b/login/internal/cmd/cmd.go index 1a94246b6..a008bbcf3 100644 --- a/login/internal/cmd/cmd.go +++ b/login/internal/cmd/cmd.go @@ -1,38 +1,39 @@ -package cmd - -import ( - "context" - - "blazing/cool" - - i18n "blazing/modules/base/middleware" - - "github.com/gogf/gf/v2/frame/g" - "github.com/gogf/gf/v2/os/gcmd" - "github.com/gogf/gf/v2/os/gfile" -) - -var ( - Main = gcmd.Command{ - Name: "main", - Usage: "main", - Brief: "start http server", - Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { - // g.Dump(g.DB("test").GetConfig()) - if cool.IsRedisMode { - go cool.ListenFunc(ctx) - } - - s := g.Server() - - // 如果存在 data/cool-admin-vue/dist 目录,则设置为主目录 - if gfile.IsDir("frontend/dist") { - s.SetServerRoot("frontend/dist") - } - // i18n 信息 - s.BindHandler("/i18n", i18n.I18nInfo) - s.Run() - return nil - }, - } -) +package cmd + +import ( + "context" + + "blazing/cool" + + i18n "blazing/modules/base/middleware" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gcmd" + "github.com/gogf/gf/v2/os/gfile" +) + +var ( + Main = gcmd.Command{ + Name: "main", + Usage: "main", + Brief: "start http server", + Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { + // g.Dump(g.DB("test").GetConfig()) + if cool.IsRedisMode { + go cool.ListenFunc(ctx) + } + + s := g.Server() + s.SetServerAgent(cool.Config.Name) + + // 如果存在 data/cool-admin-vue/dist 目录,则设置为主目录 + if gfile.IsDir("public") { + s.SetServerRoot("public") + } + // i18n 信息 + s.BindHandler("/i18n", i18n.I18nInfo) + s.Run() + return nil + }, + } +) diff --git a/login/main.go b/login/main.go index 0dc5f5292..444823cdc 100644 --- a/login/main.go +++ b/login/main.go @@ -1,9 +1,14 @@ package main import ( + "fmt" + _ "github.com/gogf/gf/contrib/nosql/redis/v2" + "blazing/common/socket" + "blazing/common/socket/handler" _ "blazing/contrib/files/local" + "blazing/cool" // Minio,按需启用 // _ "blazing/contrib/files/minio" @@ -25,6 +30,22 @@ import ( ) func main() { - // gres.Dump() + go Start(cool.Config.Port) cmd.Main.Run(gctx.New()) } + +func Start(port string) { + + head := handler.NewTomeeHandler() + head.Callback = recv + socket.NewServer(socket.WithPort(port), socket.WithSocketHandler(head)).Start() +} +func recv(data handler.TomeeHeader) { + + fmt.Println(data) + + // 处理接收到的TomeeHeader数据 + // fmt.Println("收到数据:", data) + //processWithReflection(data) + +} diff --git a/manifest/config/config.yaml b/manifest/config/config.yaml index 5cd2cc2fe..c1b46d9bf 100644 --- a/manifest/config/config.yaml +++ b/manifest/config/config.yaml @@ -1,5 +1,7 @@ server: - address: ":8001" + name: "blazing server" + address: ":8080" #前台服务器地址 + port: 12345 openapiPath: "/api.json" swaggerPath: "/swagger" clientMaxBodySize: 104857600 # 100MB in bytes 100*1024*1024 @@ -48,7 +50,8 @@ redis: pass: 154252 -cool: +blazing: + port: 27777 autoMigrate: true eps: true file: diff --git a/modules/base/middleware/middleware.go b/modules/base/middleware/middleware.go index b31b8615e..ea31cb2f8 100644 --- a/modules/base/middleware/middleware.go +++ b/modules/base/middleware/middleware.go @@ -1,21 +1,44 @@ -package middleware - -import ( - "blazing/modules/base/config" - - "github.com/gogf/gf/v2/frame/g" -) - -func init() { - if config.Config.Middleware.Authority.Enable { - g.Server().BindMiddleware("/admin/*/open/*", BaseAuthorityMiddlewareOpen) - g.Server().BindMiddleware("/admin/*/comm/*", BaseAuthorityMiddlewareComm) - g.Server().BindMiddleware("/admin/*", BaseAuthorityMiddleware) - g.Server().BindMiddleware("/*", AutoI18n) - - } - if config.Config.Middleware.Log.Enable { - g.Server().BindMiddleware("/admin/*", BaseLog) - } - -} +package middleware + +import ( + "blazing/modules/base/config" + "fmt" + "net/http" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/net/ghttp" +) + +func MiddlewareCORS(r *ghttp.Request) { + r.Response.CORSDefault() + corsOptions := r.Response.DefaultCORSOptions() + corsOptions.AllowDomain = []string{"*"} + if !r.Response.CORSAllowedOrigin(corsOptions) { + r.Response.WriteStatus(http.StatusForbidden) + return + } + r.Response.CORS(corsOptions) + if r.Response.Request.Method == "OPTIONS" { + r.Response.WriteStatus(http.StatusOK) + return + } + fmt.Println(r.Response.Header()) + //g.Dump(r.Response.Server.SetConfig(gtt)) + //r.Response.Header().Del("Server") // 删除Server头 + // r.Response.Header().Set("Server", "blazing") + r.Middleware.Next() +} +func init() { + if config.Config.Middleware.Authority.Enable { + g.Server().BindMiddleware("/admin/*/open/*", BaseAuthorityMiddlewareOpen) + g.Server().BindMiddleware("/admin/*/comm/*", BaseAuthorityMiddlewareComm) + g.Server().BindMiddleware("/admin/*", BaseAuthorityMiddleware) + g.Server().BindMiddleware("/*", AutoI18n) + g.Server().BindMiddleware("/*", MiddlewareCORS) + + } + if config.Config.Middleware.Log.Enable { + g.Server().BindMiddleware("/admin/*", BaseLog) + } + +} diff --git a/public/crossdomain.xml b/public/crossdomain.xml new file mode 100644 index 000000000..2cc59dd25 --- /dev/null +++ b/public/crossdomain.xml @@ -0,0 +1,4 @@ + + + +