From 37313cfe680bb2f8b99b0441c0916589d9fdfd66 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 22 Nov 2020 15:34:13 +0800 Subject: [PATCH] =?UTF-8?q?[=E7=B3=BB=E7=BB=9F=E8=AE=BE=E7=BD=AE]=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=95=8C=E9=9D=A2=E8=AE=BE=E7=BD=AE=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E5=AE=9A=E5=88=B6=E7=B3=BB=E7=BB=9F=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/uimanager/ui_config.go | 101 ++++++++++++++++++ internal/uimanager/ui_config_test.go | 29 +++++ internal/web/actions/default/index/index.go | 8 ++ .../web/actions/default/settings/index.go | 2 +- .../actions/default/settings/server/index.go | 27 +++++ .../actions/default/settings/server/init.go | 20 ++++ .../{ui => server}/updateHTTPPopup.go | 2 +- .../{ui => server}/updateHTTPSPopup.go | 2 +- .../default/settings/{ui => server}/utils.go | 2 +- .../default/settings/settingutils/utils.go | 3 +- .../web/actions/default/settings/ui/index.go | 46 ++++++-- .../web/actions/default/settings/ui/init.go | 6 +- internal/web/helpers/user_must_auth.go | 19 +++- internal/web/import.go | 1 + web/views/@default/@layout.html | 8 +- web/views/@default/index/index.html | 4 +- web/views/@default/settings/server/index.html | 54 ++++++++++ web/views/@default/settings/server/index.js | 19 ++++ .../{ui => server}/updateHTTPPopup.html | 0 .../{ui => server}/updateHTTPPopup.js | 0 .../{ui => server}/updateHTTPSPopup.html | 0 .../{ui => server}/updateHTTPSPopup.js | 0 web/views/@default/settings/ui/index.html | 87 +++++++-------- web/views/@default/settings/ui/index.js | 18 +--- 24 files changed, 367 insertions(+), 91 deletions(-) create mode 100644 internal/uimanager/ui_config.go create mode 100644 internal/uimanager/ui_config_test.go create mode 100644 internal/web/actions/default/settings/server/index.go create mode 100644 internal/web/actions/default/settings/server/init.go rename internal/web/actions/default/settings/{ui => server}/updateHTTPPopup.go (98%) rename internal/web/actions/default/settings/{ui => server}/updateHTTPSPopup.go (99%) rename internal/web/actions/default/settings/{ui => server}/utils.go (98%) create mode 100644 web/views/@default/settings/server/index.html create mode 100644 web/views/@default/settings/server/index.js rename web/views/@default/settings/{ui => server}/updateHTTPPopup.html (100%) rename web/views/@default/settings/{ui => server}/updateHTTPPopup.js (100%) rename web/views/@default/settings/{ui => server}/updateHTTPSPopup.html (100%) rename web/views/@default/settings/{ui => server}/updateHTTPSPopup.js (100%) diff --git a/internal/uimanager/ui_config.go b/internal/uimanager/ui_config.go new file mode 100644 index 00000000..8c151abb --- /dev/null +++ b/internal/uimanager/ui_config.go @@ -0,0 +1,101 @@ +package uimanager + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/rpc" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/logs" + "reflect" + "sync" +) + +var sharedUIConfig *UIConfig = nil +var locker sync.Mutex + +const ( + UISettingName = "adminUIConfig" +) + +type UIConfig struct { + ProductName string `json:"productName"` // 产品名 + AdminSystemName string `json:"adminSystemName"` // 管理员系统名称 + ShowOpenSourceInfo bool `json:"showOpenSourceInfo"` // 是否显示开源信息 + ShowVersion bool `json:"showVersion"` // 是否显示版本号 + Version string `json:"version"` // 显示的版本号 +} + +func LoadUIConfig() (*UIConfig, error) { + locker.Lock() + defer locker.Unlock() + + config, err := loadUIConfig() + if err != nil { + return nil, err + } + + v := reflect.Indirect(reflect.ValueOf(config)).Interface().(UIConfig) + return &v, nil +} + +func UpdateUIConfig(uiConfig *UIConfig) error { + locker.Lock() + defer locker.Unlock() + + var rpcClient, err = rpc.SharedRPC() + if err != nil { + return err + } + valueJSON, err := json.Marshal(uiConfig) + if err != nil { + return err + } + _, err = rpcClient.SysSettingRPC().UpdateSysSetting(rpcClient.Context(0), &pb.UpdateSysSettingRequest{ + Code: UISettingName, + ValueJSON: valueJSON, + }) + if err != nil { + return err + } + sharedUIConfig = uiConfig + + return nil +} + +func loadUIConfig() (*UIConfig, error) { + if sharedUIConfig != nil { + return sharedUIConfig, nil + } + var rpcClient, err = rpc.SharedRPC() + if err != nil { + return nil, err + } + resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{ + Code: UISettingName, + }) + if err != nil { + return nil, err + } + if len(resp.ValueJSON) == 0 { + sharedUIConfig = defaultUIConfig() + return sharedUIConfig, nil + } + + config := &UIConfig{} + err = json.Unmarshal(resp.ValueJSON, config) + if err != nil { + logs.Println("[UI_MANAGER]" + err.Error()) + sharedUIConfig = defaultUIConfig() + return sharedUIConfig, nil + } + sharedUIConfig = config + return sharedUIConfig, nil +} + +func defaultUIConfig() *UIConfig { + return &UIConfig{ + ProductName: "GoEdge", + AdminSystemName: "GoEdge管理员系统", + ShowOpenSourceInfo: true, + ShowVersion: true, + } +} diff --git a/internal/uimanager/ui_config_test.go b/internal/uimanager/ui_config_test.go new file mode 100644 index 00000000..331e0d8f --- /dev/null +++ b/internal/uimanager/ui_config_test.go @@ -0,0 +1,29 @@ +package uimanager + +import ( + _ "github.com/iwind/TeaGo/bootstrap" + "testing" + "time" +) + +func TestLoadSecurityConfig(t *testing.T) { + for i := 0; i < 10; i++ { + before := time.Now() + config, err := LoadUIConfig() + if err != nil { + t.Fatal(err) + } + t.Log(time.Since(before).Seconds()*1000, "ms") + t.Logf("%p", config) + } +} + +func TestLoadUIConfig2(t *testing.T) { + for i := 0; i < 10; i++ { + config, err := LoadUIConfig() + if err != nil { + t.Fatal(err) + } + t.Log(config) + } +} diff --git a/internal/web/actions/default/index/index.go b/internal/web/actions/default/index/index.go index 579f5d49..4889d727 100644 --- a/internal/web/actions/default/index/index.go +++ b/internal/web/actions/default/index/index.go @@ -5,6 +5,7 @@ import ( "github.com/TeaOSLab/EdgeAdmin/internal/oplogs" "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeAdmin/internal/setup" + "github.com/TeaOSLab/EdgeAdmin/internal/uimanager" "github.com/TeaOSLab/EdgeAdmin/internal/utils" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" @@ -48,6 +49,13 @@ func (this *IndexAction) RunGet(params struct { this.Data["token"] = stringutil.Md5(TokenSalt+timestamp) + timestamp this.Data["from"] = params.From + config, err := uimanager.LoadUIConfig() + if err != nil { + this.ErrorPage(err) + return + } + this.Data["systemName"] = config.AdminSystemName + this.Show() } diff --git a/internal/web/actions/default/settings/index.go b/internal/web/actions/default/settings/index.go index 9a3da65f..b1917f27 100644 --- a/internal/web/actions/default/settings/index.go +++ b/internal/web/actions/default/settings/index.go @@ -13,5 +13,5 @@ func (this *IndexAction) Init() { } func (this *IndexAction) RunGet(params struct{}) { - this.RedirectURL("/settings/ui") + this.RedirectURL("/settings/server") } diff --git a/internal/web/actions/default/settings/server/index.go b/internal/web/actions/default/settings/server/index.go new file mode 100644 index 00000000..af16415a --- /dev/null +++ b/internal/web/actions/default/settings/server/index.go @@ -0,0 +1,27 @@ +package server + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" +) + +type IndexAction struct { + actionutils.ParentAction +} + +func (this *IndexAction) Init() { + this.Nav("", "", "") +} + +func (this *IndexAction) RunGet(params struct{}) { + this.Data["serverIsChanged"] = serverConfigIsChanged + + serverConfig, err := loadServerConfig() + if err != nil { + this.ErrorPage(err) + return + } + + this.Data["serverConfig"] = serverConfig + + this.Show() +} diff --git a/internal/web/actions/default/settings/server/init.go b/internal/web/actions/default/settings/server/init.go new file mode 100644 index 00000000..3b872de9 --- /dev/null +++ b/internal/web/actions/default/settings/server/init.go @@ -0,0 +1,20 @@ +package server + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/settingutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/helpers" + "github.com/iwind/TeaGo" +) + +func init() { + TeaGo.BeforeStart(func(server *TeaGo.Server) { + server. + Helper(helpers.NewUserMustAuth()). + Helper(settingutils.NewHelper("server")). + Prefix("/settings/server"). + Get("", new(IndexAction)). + GetPost("/updateHTTPPopup", new(UpdateHTTPPopupAction)). + GetPost("/updateHTTPSPopup", new(UpdateHTTPSPopupAction)). + EndAll() + }) +} diff --git a/internal/web/actions/default/settings/ui/updateHTTPPopup.go b/internal/web/actions/default/settings/server/updateHTTPPopup.go similarity index 98% rename from internal/web/actions/default/settings/ui/updateHTTPPopup.go rename to internal/web/actions/default/settings/server/updateHTTPPopup.go index 797ec742..4daa57d0 100644 --- a/internal/web/actions/default/settings/ui/updateHTTPPopup.go +++ b/internal/web/actions/default/settings/server/updateHTTPPopup.go @@ -1,4 +1,4 @@ -package ui +package server import ( "github.com/TeaOSLab/EdgeAdmin/internal/utils" diff --git a/internal/web/actions/default/settings/ui/updateHTTPSPopup.go b/internal/web/actions/default/settings/server/updateHTTPSPopup.go similarity index 99% rename from internal/web/actions/default/settings/ui/updateHTTPSPopup.go rename to internal/web/actions/default/settings/server/updateHTTPSPopup.go index 3cf39c01..55d715a4 100644 --- a/internal/web/actions/default/settings/ui/updateHTTPSPopup.go +++ b/internal/web/actions/default/settings/server/updateHTTPSPopup.go @@ -1,4 +1,4 @@ -package ui +package server import ( "encoding/json" diff --git a/internal/web/actions/default/settings/ui/utils.go b/internal/web/actions/default/settings/server/utils.go similarity index 98% rename from internal/web/actions/default/settings/ui/utils.go rename to internal/web/actions/default/settings/server/utils.go index 94d1a077..dd5c2292 100644 --- a/internal/web/actions/default/settings/ui/utils.go +++ b/internal/web/actions/default/settings/server/utils.go @@ -1,4 +1,4 @@ -package ui +package server import ( "github.com/iwind/TeaGo" diff --git a/internal/web/actions/default/settings/settingutils/utils.go b/internal/web/actions/default/settings/settingutils/utils.go index ca372ab8..2f695b39 100644 --- a/internal/web/actions/default/settings/settingutils/utils.go +++ b/internal/web/actions/default/settings/settingutils/utils.go @@ -25,7 +25,8 @@ func (this *Helper) BeforeAction(actionPtr actions.ActionWrapper) (goNext bool) // 标签栏 tabbar := actionutils.NewTabbar() - tabbar.Add("管理界面", "", "/settings", "", this.tab == "ui") + tabbar.Add("Web服务", "", "/settings/server", "", this.tab == "server") + tabbar.Add("界面设置", "", "/settings/ui", "", this.tab == "ui") tabbar.Add("安全设置", "", "/settings/security", "", this.tab == "security") tabbar.Add("数据库", "", "/settings/database", "", this.tab == "database") tabbar.Add("API节点", "", "/api", "", this.tab == "apiNodes") diff --git a/internal/web/actions/default/settings/ui/index.go b/internal/web/actions/default/settings/ui/index.go index 317fc25c..b15801b1 100644 --- a/internal/web/actions/default/settings/ui/index.go +++ b/internal/web/actions/default/settings/ui/index.go @@ -1,7 +1,9 @@ -package ui +package server import ( + "github.com/TeaOSLab/EdgeAdmin/internal/uimanager" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/iwind/TeaGo/actions" ) type IndexAction struct { @@ -13,15 +15,47 @@ func (this *IndexAction) Init() { } func (this *IndexAction) RunGet(params struct{}) { - this.Data["serverIsChanged"] = serverConfigIsChanged + config, err := uimanager.LoadUIConfig() + if err != nil { + this.ErrorPage(err) + return + } + this.Data["config"] = config - serverConfig, err := loadServerConfig() + this.Show() +} + +func (this *IndexAction) RunPost(params struct { + ProductName string + AdminSystemName string + ShowOpenSourceInfo bool + ShowVersion bool + Version string + + Must *actions.Must + CSRF *actionutils.CSRF +}) { + params.Must. + Field("productName", params.ProductName). + Require("请输入产品名称"). + Field("adminSystemName", params.AdminSystemName). + Require("请输入管理员系统名称") + + config, err := uimanager.LoadUIConfig() + if err != nil { + this.ErrorPage(err) + return + } + config.ProductName = params.ProductName + config.AdminSystemName = params.AdminSystemName + config.ShowOpenSourceInfo = params.ShowOpenSourceInfo + config.ShowVersion = params.ShowVersion + config.Version = params.Version + err = uimanager.UpdateUIConfig(config) if err != nil { this.ErrorPage(err) return } - this.Data["serverConfig"] = serverConfig - - this.Show() + this.Success() } diff --git a/internal/web/actions/default/settings/ui/init.go b/internal/web/actions/default/settings/ui/init.go index e6e533d8..3e0f01a2 100644 --- a/internal/web/actions/default/settings/ui/init.go +++ b/internal/web/actions/default/settings/ui/init.go @@ -1,4 +1,4 @@ -package ui +package server import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/settingutils" @@ -12,9 +12,7 @@ func init() { Helper(helpers.NewUserMustAuth()). Helper(settingutils.NewHelper("ui")). Prefix("/settings/ui"). - Get("", new(IndexAction)). - GetPost("/updateHTTPPopup", new(UpdateHTTPPopupAction)). - GetPost("/updateHTTPSPopup", new(UpdateHTTPSPopupAction)). + GetPost("", new(IndexAction)). EndAll() }) } diff --git a/internal/web/helpers/user_must_auth.go b/internal/web/helpers/user_must_auth.go index 05c6f7f9..c3bf8570 100644 --- a/internal/web/helpers/user_must_auth.go +++ b/internal/web/helpers/user_must_auth.go @@ -5,6 +5,7 @@ import ( nodes "github.com/TeaOSLab/EdgeAdmin/internal/rpc" "github.com/TeaOSLab/EdgeAdmin/internal/securitymanager" "github.com/TeaOSLab/EdgeAdmin/internal/setup" + "github.com/TeaOSLab/EdgeAdmin/internal/uimanager" "github.com/TeaOSLab/EdgeAdmin/internal/utils" "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" "github.com/iwind/TeaGo/actions" @@ -83,13 +84,20 @@ func (this *UserMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam return true } + config, err := uimanager.LoadUIConfig() + if err != nil { + action.WriteString(err.Error()) + return false + } + // 初始化内置方法 action.ViewFunc("teaTitle", func() string { return action.Data["teaTitle"].(string) }) - action.Data["teaTitle"] = teaconst.ProductNameZH - action.Data["teaName"] = teaconst.ProductNameZH + action.Data["teaShowVersion"] = config.ShowVersion + action.Data["teaTitle"] = config.AdminSystemName + action.Data["teaName"] = config.ProductName resp, err := rpc.AdminRPC().FindAdminFullname(rpc.Context(0), &pb.FindAdminFullnameRequest{AdminId: int64(this.AdminId)}) if err != nil { @@ -105,7 +113,12 @@ func (this *UserMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam action.Data["teaModules"] = this.modules() action.Data["teaSubMenus"] = []map[string]interface{}{} action.Data["teaTabbar"] = []map[string]interface{}{} - action.Data["teaVersion"] = teaconst.Version + if len(config.Version) == 0 { + action.Data["teaVersion"] = teaconst.Version + } else { + action.Data["teaVersion"] = config.Version + } + action.Data["teaShowOpenSourceInfo"] = config.ShowOpenSourceInfo action.Data["teaIsSuper"] = false action.Data["teaDemoEnabled"] = teaconst.IsDemo if !action.Data.Has("teaSubMenu") { diff --git a/internal/web/import.go b/internal/web/import.go index 3b98fb4c..17e7cc6a 100644 --- a/internal/web/import.go +++ b/internal/web/import.go @@ -77,6 +77,7 @@ import ( _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/login" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/profile" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/security" + _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/server" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/ui" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/upgrade" _ "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/setup" diff --git a/web/views/@default/@layout.html b/web/views/@default/@layout.html index 073bf342..1966437a 100644 --- a/web/views/@default/@layout.html +++ b/web/views/@default/@layout.html @@ -1,7 +1,7 @@ - {$.teaTitle}管理员系统 + {$.teaTitle} @@ -23,12 +23,12 @@