package custom_routers import ( "fmt" "git.qianqiusoft.com/qianqiusoft/light-apiengine/engine" sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" "github.com/gin-gonic/gin" "strings" "time" ) var Domain_String_Cache map[string]string var Refresh_Cache_Time int64 = 0 func Register(e *engine.ApiEngine) { ctrl := NewFrontendController(e) e.GinEngine.StaticFile("/", "web/index.html") e.GinEngine.StaticFile("/index.html", "web/index.html") //e.GinEngine.StaticFile("/favicon.ico", "web/favicon.ico") e.GinEngine.StaticFile("/config.js", "web/config.js") e.GinEngine.GET("/domains.js", ctrl.GetDomainsJs) e.GinEngine.GET("/favicon.ico", ctrl.GetDomainLogo) e.GinEngine.Static("/static", "web/static") Domain_String_Cache = make(map[string]string) go RefreshDomainString(e) } type FrontendController struct { apiengine *engine.ApiEngine } func NewFrontendController(e *engine.ApiEngine) *FrontendController { controller := &FrontendController{e} return controller } func (c *FrontendController) GetDomainsJs(ctx *gin.Context) { go RefreshDomainString(c.apiengine) req_domain := ctx.Request.Host n := strings.Index(req_domain, ":") if n > 0 { req_domain = req_domain[0:n] } ctx.Data(200, "application/javascript", []byte(Domain_String_Cache[req_domain])) } func (c *FrontendController) GetDomainLogo(ctx *gin.Context) { go RefreshDomainString(c.apiengine) req_domain := ctx.Request.Host n := strings.Index(req_domain, ":") if n > 0 { req_domain = req_domain[0:n] } ctx.File("static/domain/" + req_domain + "images/sidebar_logo.png") } func RefreshDomainString(e *engine.ApiEngine) { if time.Now().UnixNano()/int64(time.Second) > 10 { var domain []sysmodel.SysDomain e.PlatformOrmEngine.SQL("select * from sys_domain where del_flag = 0").Find(&domain) for _, v := range domain { domain_js := "window.Domains = {" domain_js += fmt.Sprintf("'%s': {login: '%s', name: '%s', fullName: '%s', title: '%s', theme: '%s'},", v.DomainUrl, v.LoginUrl, v.Name, v.FullName, v.FullName, v.Theme) domain_js += "};" Domain_String_Cache[v.DomainUrl] = domain_js } Refresh_Cache_Time = time.Now().UnixNano() / int64(time.Second) } }