From 96960ae7e9ba62fbd9bd42f0f26f4c7689bb0325 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Wed, 21 Jul 2021 22:14:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0DEMO=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E3=80=81=E4=BF=AE=E5=A4=8D=E7=9B=91=E6=8E=A7=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E3=80=81=E7=94=A8=E6=88=B7=E8=8A=82=E7=82=B9=E3=80=81=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E8=8A=82=E7=82=B9=E6=97=A0=E6=B3=95=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E8=BF=90=E8=A1=8C=E6=97=A5=E5=BF=97=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/edge-admin/main.go | 13 +++++++++ go.mod | 2 +- go.sum | 2 ++ internal/const/const_demo.go | 7 ----- internal/const/const_normal.go | 7 ----- internal/const/vars.go | 5 ++++ internal/nodes/admin_node.go | 3 ++ internal/web/actions/default/index/index.go | 3 ++ .../web/actions/default/servers/create.go | 4 +-- .../settings/authority/nodes/node/logs.go | 12 ++++---- .../settings/monitor-nodes/node/logs.go | 12 ++++---- .../default/settings/user-nodes/node/logs.go | 12 ++++---- internal/web/helpers/user_must_auth.go | 29 ++++++++++++++++--- web/views/@default/index/index.js | 5 ++++ web/views/@default/setup/index.html | 4 +-- 15 files changed, 79 insertions(+), 41 deletions(-) delete mode 100644 internal/const/const_demo.go delete mode 100644 internal/const/const_normal.go diff --git a/cmd/edge-admin/main.go b/cmd/edge-admin/main.go index ab1813d8..fc907f70 100644 --- a/cmd/edge-admin/main.go +++ b/cmd/edge-admin/main.go @@ -57,6 +57,19 @@ func main() { } fmt.Println("enter recovery mode successfully") }) + app.On("demo", func() { + sock := gosock.NewTmpSock(teaconst.ProcessName) + if !sock.IsListening() { + fmt.Println("[ERROR]the service not started yet, you should start the service first") + return + } + _, err := sock.Send(&gosock.Command{Code: "demo"}) + if err != nil { + fmt.Println("[ERROR]change demo mode failed: " + err.Error()) + return + } + fmt.Println("change demo mode successfully") + }) app.Run(func() { adminNode := nodes.NewAdminNode() adminNode.Run() diff --git a/go.mod b/go.mod index bc5ac55f..13002836 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/golang/protobuf v1.5.2 github.com/google/go-cmp v0.5.6 // indirect github.com/iwind/TeaGo v0.0.0-20210720011303-fc255c995afa - github.com/iwind/gosock v0.0.0-20210720054405-4030f271aa3f + github.com/iwind/gosock v0.0.0-20210721090148-db2e77703143 github.com/miekg/dns v1.1.35 github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/tealeg/xlsx/v3 v3.2.3 diff --git a/go.sum b/go.sum index 2e5877ea..e1c9959a 100644 --- a/go.sum +++ b/go.sum @@ -68,6 +68,8 @@ github.com/iwind/gosock v0.0.0-20210706152215-08fe64b7a8a3 h1:BVHIjJU5RUX0grmvDt github.com/iwind/gosock v0.0.0-20210706152215-08fe64b7a8a3/go.mod h1:H5Q7SXwbx3a97ecJkaS2sD77gspzE7HFUafBO0peEyA= github.com/iwind/gosock v0.0.0-20210720054405-4030f271aa3f h1:+mKLTd5tCCLXK+iY5Xjz58hau6qFv9chGqcZ4FWUiIs= github.com/iwind/gosock v0.0.0-20210720054405-4030f271aa3f/go.mod h1:H5Q7SXwbx3a97ecJkaS2sD77gspzE7HFUafBO0peEyA= +github.com/iwind/gosock v0.0.0-20210721090148-db2e77703143 h1:RXINu3KVasw6MWv8MA6ne5ur84YhTAzG/j68YEM0KuI= +github.com/iwind/gosock v0.0.0-20210721090148-db2e77703143/go.mod h1:H5Q7SXwbx3a97ecJkaS2sD77gspzE7HFUafBO0peEyA= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= diff --git a/internal/const/const_demo.go b/internal/const/const_demo.go deleted file mode 100644 index e26718ab..00000000 --- a/internal/const/const_demo.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build demo - -package teaconst - -const ( - IsDemo = true -) diff --git a/internal/const/const_normal.go b/internal/const/const_normal.go deleted file mode 100644 index 66c42602..00000000 --- a/internal/const/const_normal.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build !demo - -package teaconst - -const ( - IsDemo = false -) diff --git a/internal/const/vars.go b/internal/const/vars.go index b5db6b39..27656aa7 100644 --- a/internal/const/vars.go +++ b/internal/const/vars.go @@ -5,3 +5,8 @@ package teaconst var ( IsRecoverMode = false ) + +var ( + IsDemoMode = false + ErrorDemoOperation = "DEMO模式下无法进行创建、修改、删除等操作" +) diff --git a/internal/nodes/admin_node.go b/internal/nodes/admin_node.go index 88a87e2e..83a3af32 100644 --- a/internal/nodes/admin_node.go +++ b/internal/nodes/admin_node.go @@ -323,6 +323,9 @@ func (this *AdminNode) listenSock() error { case "recover": teaconst.IsRecoverMode = true _ = cmd.ReplyOk() + case "demo": + teaconst.IsDemoMode = !teaconst.IsDemoMode + _ = cmd.ReplyOk() } }) diff --git a/internal/web/actions/default/index/index.go b/internal/web/actions/default/index/index.go index 01ec8d98..909e22ba 100644 --- a/internal/web/actions/default/index/index.go +++ b/internal/web/actions/default/index/index.go @@ -34,6 +34,9 @@ func (this *IndexAction) RunGet(params struct { Auth *helpers.UserShouldAuth }) { + // DEMO模式 + this.Data["isDemo"] = teaconst.IsDemoMode + // 检查系统是否已经配置过 if !setup.IsConfigured() { this.RedirectURL("/setup") diff --git a/internal/web/actions/default/servers/create.go b/internal/web/actions/default/servers/create.go index b399b714..fac1a31d 100644 --- a/internal/web/actions/default/servers/create.go +++ b/internal/web/actions/default/servers/create.go @@ -132,7 +132,7 @@ func (this *CreateAction) RunPost(params struct { } case serverconfigs.ServerTypeTCPProxy: // 在DEMO模式下不能创建 - if teaconst.IsDemo { + if teaconst.IsDemoMode { this.Fail("DEMO模式下不能创建TCP反向代理") } @@ -169,7 +169,7 @@ func (this *CreateAction) RunPost(params struct { } case serverconfigs.ServerTypeUDPProxy: // 在DEMO模式下不能创建 - if teaconst.IsDemo { + if teaconst.IsDemoMode { this.Fail("DEMO模式下不能创建UDP反向代理") } diff --git a/internal/web/actions/default/settings/authority/nodes/node/logs.go b/internal/web/actions/default/settings/authority/nodes/node/logs.go index 3ddc1bdb..b608afc0 100644 --- a/internal/web/actions/default/settings/authority/nodes/node/logs.go +++ b/internal/web/actions/default/settings/authority/nodes/node/logs.go @@ -31,20 +31,20 @@ func (this *LogsAction) RunGet(params struct { this.Data["keyword"] = params.Keyword this.Data["level"] = params.Level - apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + authorityNodeResp, err := this.RPC().AuthorityNodeRPC().FindEnabledAuthorityNode(this.AdminContext(), &pb.FindEnabledAuthorityNodeRequest{NodeId: params.NodeId}) if err != nil { this.ErrorPage(err) return } - apiNode := apiNodeResp.Node - if apiNode == nil { - this.NotFound("apiNode", params.NodeId) + authorityNode := authorityNodeResp.Node + if authorityNode == nil { + this.NotFound("authorityNode", params.NodeId) return } this.Data["node"] = maps.Map{ - "id": apiNode.Id, - "name": apiNode.Name, + "id": authorityNode.Id, + "name": authorityNode.Name, } countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ diff --git a/internal/web/actions/default/settings/monitor-nodes/node/logs.go b/internal/web/actions/default/settings/monitor-nodes/node/logs.go index 838e8aaf..b28e9674 100644 --- a/internal/web/actions/default/settings/monitor-nodes/node/logs.go +++ b/internal/web/actions/default/settings/monitor-nodes/node/logs.go @@ -31,20 +31,20 @@ func (this *LogsAction) RunGet(params struct { this.Data["keyword"] = params.Keyword this.Data["level"] = params.Level - apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + monitorNodeResp, err := this.RPC().MonitorNodeRPC().FindEnabledMonitorNode(this.AdminContext(), &pb.FindEnabledMonitorNodeRequest{NodeId: params.NodeId}) if err != nil { this.ErrorPage(err) return } - apiNode := apiNodeResp.Node - if apiNode == nil { - this.NotFound("apiNode", params.NodeId) + monitorNode := monitorNodeResp.Node + if monitorNode == nil { + this.NotFound("monitorNode", params.NodeId) return } this.Data["node"] = maps.Map{ - "id": apiNode.Id, - "name": apiNode.Name, + "id": monitorNode.Id, + "name": monitorNode.Name, } countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ diff --git a/internal/web/actions/default/settings/user-nodes/node/logs.go b/internal/web/actions/default/settings/user-nodes/node/logs.go index 478b664a..5336075a 100644 --- a/internal/web/actions/default/settings/user-nodes/node/logs.go +++ b/internal/web/actions/default/settings/user-nodes/node/logs.go @@ -31,20 +31,20 @@ func (this *LogsAction) RunGet(params struct { this.Data["keyword"] = params.Keyword this.Data["level"] = params.Level - apiNodeResp, err := this.RPC().APINodeRPC().FindEnabledAPINode(this.AdminContext(), &pb.FindEnabledAPINodeRequest{NodeId: params.NodeId}) + userNodeResp, err := this.RPC().UserNodeRPC().FindEnabledUserNode(this.AdminContext(), &pb.FindEnabledUserNodeRequest{NodeId: params.NodeId}) if err != nil { this.ErrorPage(err) return } - apiNode := apiNodeResp.Node - if apiNode == nil { - this.NotFound("apiNode", params.NodeId) + userNode := userNodeResp.Node + if userNode == nil { + this.NotFound("userNode", params.NodeId) return } this.Data["node"] = maps.Map{ - "id": apiNode.Id, - "name": apiNode.Name, + "id": userNode.Id, + "name": userNode.Name, } countResp, err := this.RPC().NodeLogRPC().CountNodeLogs(this.AdminContext(), &pb.CountNodeLogsRequest{ diff --git a/internal/web/helpers/user_must_auth.go b/internal/web/helpers/user_must_auth.go index 28d71d56..faaa5cb6 100644 --- a/internal/web/helpers/user_must_auth.go +++ b/internal/web/helpers/user_must_auth.go @@ -8,6 +8,7 @@ import ( "github.com/iwind/TeaGo/maps" "net/http" "reflect" + "strings" ) // 认证拦截 @@ -21,12 +22,32 @@ func NewUserMustAuth(module string) *userMustAuth { } func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramName string) (goNext bool) { + var action = actionPtr.Object() + + // 恢复模式 if teaconst.IsRecoverMode { - actionPtr.Object().RedirectURL("/recover") + action.RedirectURL("/recover") return false } - - var action = actionPtr.Object() + + // DEMO模式 + if teaconst.IsDemoMode { + if action.Request.Method == http.MethodPost { + var actionName = action.Spec.ClassName[strings.LastIndex(action.Spec.ClassName, ".")+1:] + var denyPrefixes = []string{"Update", "Create", "Delete", "Truncate", "Clean", "Clear", "Reset", "Add", "Remove"} + for _, prefix := range denyPrefixes { + if strings.HasPrefix(actionName, prefix) { + action.Fail(teaconst.ErrorDemoOperation) + return false + } + } + + if strings.Index(action.Spec.PkgPath, "settings") > 0 || strings.Index(action.Spec.PkgPath, "delete") > 0 || strings.Index(action.Spec.PkgPath, "update") > 0 { + action.Fail(teaconst.ErrorDemoOperation) + return false + } + } + } // 安全相关 securityConfig, _ := configloaders.LoadSecurityConfig() @@ -114,7 +135,7 @@ func (this *userMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam action.Data["teaShowOpenSourceInfo"] = config.ShowOpenSourceInfo action.Data["teaIsSuper"] = false action.Data["teaIsPlus"] = teaconst.IsPlus - action.Data["teaDemoEnabled"] = teaconst.IsDemo + action.Data["teaDemoEnabled"] = teaconst.IsDemoMode action.Data["teaShowFinance"] = configloaders.ShowFinance() if !action.Data.Has("teaSubMenu") { action.Data["teaSubMenu"] = "" diff --git a/web/views/@default/index/index.js b/web/views/@default/index/index.js index b6abff90..89e9d2bf 100644 --- a/web/views/@default/index/index.js +++ b/web/views/@default/index/index.js @@ -4,6 +4,11 @@ Tea.context(function () { this.passwordMd5 = "" this.encodedFrom = window.encodeURIComponent(this.from) + if (this.isDemo) { + this.username = "admin" + this.password = "123456" + } + this.showOTP = false this.isSubmitting = false diff --git a/web/views/@default/setup/index.html b/web/views/@default/setup/index.html index 8e2b3af0..40a8e241 100644 --- a/web/views/@default/setup/index.html +++ b/web/views/@default/setup/index.html @@ -82,7 +82,7 @@ - 节点主机地址 + 节点主机地址 *
@@ -264,7 +264,7 @@ - 节点主机地址 + 节点主机地址 * {{apiNodeInfo.newHost}}