From f459632dd6f21e3a8ccbf8f005ab8dcab40a3ed5 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Mon, 28 Sep 2020 16:25:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=87=8D=E5=86=99=E8=A7=84?= =?UTF-8?q?=E5=88=99=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/rpc/rpc_client.go | 11 ++ .../servers/server/settings/http/index.go | 4 +- .../servers/server/settings/https/index.go | 4 +- .../default/servers/server/settings/index.go | 3 + .../server/settings/locations/create.go | 2 + .../servers/server/settings/locations/init.go | 1 + .../locationutils/location_helper.go | 17 +-- .../settings/locations/rewrite/index.go | 14 ++- .../servers/server/settings/locations/sort.go | 58 ++++++++++ .../server/settings/rewrite/createPopup.go | 100 +++++++++++++++++ .../servers/server/settings/rewrite/delete.go | 48 +++++++++ .../servers/server/settings/rewrite/index.go | 14 ++- .../servers/server/settings/rewrite/init.go | 4 + .../servers/server/settings/rewrite/sort.go | 50 +++++++++ .../server/settings/rewrite/updatePopup.go | 93 ++++++++++++++++ .../servers/serverutils/server_helper.go | 19 ++-- web/public/js/components/common/sortable.js | 25 +++++ .../components/server/http-location-labels.js | 12 ++- .../server/http-rewrite-rule-list.js | 101 ++++++++++++++++++ .../js/components/server/http-web-root-box.js | 5 +- web/views/@default/@layout.css | 30 +++++- web/views/@default/@layout.css.map | 2 +- web/views/@default/@layout.less | 38 ++++++- web/views/@default/@left_menu.less | 2 +- .../servers/server/settings/http/index.html | 27 +++-- .../servers/server/settings/https/index.html | 15 ++- .../servers/server/settings/index.html | 23 ++-- .../server/settings/locations/index.html | 39 ++++--- .../server/settings/locations/index.js | 35 ++++++ .../settings/locations/rewrite/index.html | 5 +- .../settings/locations/rewrite/index.js | 11 ++ .../server/settings/rewrite/createPopup.html | 73 +++++++++++++ .../server/settings/rewrite/createPopup.js | 15 +++ .../server/settings/rewrite/index.html | 5 +- .../servers/server/settings/rewrite/index.js | 11 ++ .../server/settings/rewrite/updatePopup.html | 74 +++++++++++++ .../server/settings/rewrite/updatePopup.js | 11 ++ 37 files changed, 935 insertions(+), 66 deletions(-) create mode 100644 internal/web/actions/default/servers/server/settings/locations/sort.go create mode 100644 internal/web/actions/default/servers/server/settings/rewrite/createPopup.go create mode 100644 internal/web/actions/default/servers/server/settings/rewrite/delete.go create mode 100644 internal/web/actions/default/servers/server/settings/rewrite/sort.go create mode 100644 internal/web/actions/default/servers/server/settings/rewrite/updatePopup.go create mode 100644 web/public/js/components/common/sortable.js create mode 100644 web/public/js/components/server/http-rewrite-rule-list.js create mode 100644 web/views/@default/servers/server/settings/locations/rewrite/index.js create mode 100644 web/views/@default/servers/server/settings/rewrite/createPopup.html create mode 100644 web/views/@default/servers/server/settings/rewrite/createPopup.js create mode 100644 web/views/@default/servers/server/settings/rewrite/index.js create mode 100644 web/views/@default/servers/server/settings/rewrite/updatePopup.html create mode 100644 web/views/@default/servers/server/settings/rewrite/updatePopup.js diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index a561ac7e..f8e06c83 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -37,6 +37,7 @@ type RPCClient struct { httpFirewallPolicyClients []pb.HTTPFirewallPolicyServiceClient httpLocationClients []pb.HTTPLocationServiceClient httpWebsocketClients []pb.HTTPWebsocketServiceClient + httpRewriteRuleClients []pb.HTTPRewriteRuleServiceClient } func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { @@ -63,6 +64,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { httpFirewallPolicyClients := []pb.HTTPFirewallPolicyServiceClient{} httpLocationClients := []pb.HTTPLocationServiceClient{} httpWebsocketClients := []pb.HTTPWebsocketServiceClient{} + httpRewriteRuleClients := []pb.HTTPRewriteRuleServiceClient{} conns := []*grpc.ClientConn{} for _, endpoint := range apiConfig.RPC.Endpoints { @@ -97,6 +99,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { httpFirewallPolicyClients = append(httpFirewallPolicyClients, pb.NewHTTPFirewallPolicyServiceClient(conn)) httpLocationClients = append(httpLocationClients, pb.NewHTTPLocationServiceClient(conn)) httpWebsocketClients = append(httpWebsocketClients, pb.NewHTTPWebsocketServiceClient(conn)) + httpRewriteRuleClients = append(httpRewriteRuleClients, pb.NewHTTPRewriteRuleServiceClient(conn)) } return &RPCClient{ @@ -120,6 +123,7 @@ func NewRPCClient(apiConfig *configs.APIConfig) (*RPCClient, error) { httpFirewallPolicyClients: httpFirewallPolicyClients, httpLocationClients: httpLocationClients, httpWebsocketClients: httpWebsocketClients, + httpRewriteRuleClients: httpRewriteRuleClients, }, nil } @@ -256,6 +260,13 @@ func (this *RPCClient) HTTPWebsocketRPC() pb.HTTPWebsocketServiceClient { return nil } +func (this *RPCClient) HTTPRewriteRuleRPC() pb.HTTPRewriteRuleServiceClient { + if len(this.httpRewriteRuleClients) > 0 { + return this.httpRewriteRuleClients[rands.Int(0, len(this.httpRewriteRuleClients)-1)] + } + return nil +} + func (this *RPCClient) Context(adminId int64) context.Context { ctx := context.Background() m := maps.Map{ diff --git a/internal/web/actions/default/servers/server/settings/http/index.go b/internal/web/actions/default/servers/server/settings/http/index.go index 31d93254..ce43d856 100644 --- a/internal/web/actions/default/servers/server/settings/http/index.go +++ b/internal/web/actions/default/servers/server/settings/http/index.go @@ -58,6 +58,7 @@ func (this *IndexAction) RunGet(params struct { func (this *IndexAction) RunPost(params struct { ServerId int64 + IsOn bool Addresses string WebId int64 @@ -82,10 +83,9 @@ func (this *IndexAction) RunPost(params struct { this.ErrorPage(err) return } - } else { - httpConfig.IsOn = true } + httpConfig.IsOn = params.IsOn httpConfig.Listen = addresses configData, err := json.Marshal(httpConfig) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/https/index.go b/internal/web/actions/default/servers/server/settings/https/index.go index 398da0ac..a1366726 100644 --- a/internal/web/actions/default/servers/server/settings/https/index.go +++ b/internal/web/actions/default/servers/server/settings/https/index.go @@ -48,6 +48,7 @@ func (this *IndexAction) RunGet(params struct { func (this *IndexAction) RunPost(params struct { ServerId int64 + IsOn bool Addresses string Must *actions.Must @@ -69,10 +70,9 @@ func (this *IndexAction) RunPost(params struct { this.ErrorPage(err) return } - } else { - httpsConfig.IsOn = true } + httpsConfig.IsOn = params.IsOn httpsConfig.Listen = addresses configData, err := json.Marshal(httpsConfig) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/index.go b/internal/web/actions/default/servers/server/settings/index.go index c02db0b4..648e2a83 100644 --- a/internal/web/actions/default/servers/server/settings/index.go +++ b/internal/web/actions/default/servers/server/settings/index.go @@ -63,6 +63,7 @@ func (this *IndexAction) RunGet(params struct { "type": server.Type, "name": server.Name, "description": server.Description, + "isOn": server.IsOn, } serverType := serverconfigs.FindServerType(server.Type) @@ -83,6 +84,7 @@ func (this *IndexAction) RunPost(params struct { Name string Description string ClusterId int64 + IsOn bool Must *actions.Must }) { @@ -99,6 +101,7 @@ func (this *IndexAction) RunPost(params struct { Name: params.Name, Description: params.Description, ClusterId: params.ClusterId, + IsOn: params.IsOn, }) if err != nil { this.ErrorPage(err) diff --git a/internal/web/actions/default/servers/server/settings/locations/create.go b/internal/web/actions/default/servers/server/settings/locations/create.go index 09af3293..17a7b7aa 100644 --- a/internal/web/actions/default/servers/server/settings/locations/create.go +++ b/internal/web/actions/default/servers/server/settings/locations/create.go @@ -11,6 +11,7 @@ import ( "strings" ) +// 创建路径规则 type CreateAction struct { actionutils.ParentAction } @@ -22,6 +23,7 @@ func (this *CreateAction) Init() { func (this *CreateAction) RunGet(params struct { ServerId int64 + ParentId int64 // 父节点 }) { webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) if err != nil { diff --git a/internal/web/actions/default/servers/server/settings/locations/init.go b/internal/web/actions/default/servers/server/settings/locations/init.go index e267c97d..ccb6330e 100644 --- a/internal/web/actions/default/servers/server/settings/locations/init.go +++ b/internal/web/actions/default/servers/server/settings/locations/init.go @@ -15,6 +15,7 @@ func init() { Get("", new(IndexAction)). GetPost("/create", new(CreateAction)). Post("/delete", new(DeleteAction)). + Post("/sort", new(SortAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go index b22b7c18..78788070 100644 --- a/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go +++ b/internal/web/actions/default/servers/server/settings/locations/locationutils/location_helper.go @@ -79,15 +79,16 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "isActive": secondMenuItem == "reverseProxy", "isOn": locationConfig != nil && locationConfig.ReverseProxyRef != nil && locationConfig.ReverseProxyRef.IsPrior, }) + menuItems = append(menuItems, maps.Map{ + "name": "-", + "url": "", + "isActive": false, + }) menuItems = append(menuItems, maps.Map{ "name": "重写规则", "url": "/servers/server/settings/locations/rewrite?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "rewrite", - }) - menuItems = append(menuItems, maps.Map{ - "name": "访问控制", - "url": "/servers/server/settings/locations/access?serverId=" + serverIdString + "&locationId=" + locationIdString, - "isActive": secondMenuItem == "access", + "isOn": locationConfig != nil && locationConfig.Web != nil && len(locationConfig.Web.RewriteRefs) > 0, }) menuItems = append(menuItems, maps.Map{ "name": "WAF", @@ -102,9 +103,9 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.CacheRef != nil && locationConfig.Web.CacheRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ - "name": "-", - "url": "", - "isActive": false, + "name": "访问控制", + "url": "/servers/server/settings/locations/access?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "access", }) menuItems = append(menuItems, maps.Map{ "name": "字符编码", diff --git a/internal/web/actions/default/servers/server/settings/locations/rewrite/index.go b/internal/web/actions/default/servers/server/settings/locations/rewrite/index.go index 4d481cf1..7da59082 100644 --- a/internal/web/actions/default/servers/server/settings/locations/rewrite/index.go +++ b/internal/web/actions/default/servers/server/settings/locations/rewrite/index.go @@ -2,6 +2,7 @@ package rewrite import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" ) type IndexAction struct { @@ -14,7 +15,18 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { LocationId int64 }) { - // TODO + webConfig, err := webutils.FindWebConfigWithLocationId(this.Parent(), params.LocationId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["webId"] = webConfig.Id + + if len(webConfig.RewriteRules) == 0 { + this.Data["rewriteRules"] = []interface{}{} + } else { + this.Data["rewriteRules"] = webConfig.RewriteRules + } this.Show() } diff --git a/internal/web/actions/default/servers/server/settings/locations/sort.go b/internal/web/actions/default/servers/server/settings/locations/sort.go new file mode 100644 index 00000000..08097574 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/locations/sort.go @@ -0,0 +1,58 @@ +package locations + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" +) + +type SortAction struct { + actionutils.ParentAction +} + +func (this *SortAction) RunPost(params struct { + WebId int64 + LocationIds []int64 +}) { + if len(params.LocationIds) == 0 { + this.Success() + } + + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + if webConfig == nil { + this.Success() + } + refMap := map[int64]*serverconfigs.HTTPLocationRef{} + for _, ref := range webConfig.LocationRefs { + refMap[ref.LocationId] = ref + } + + newRefs := []*serverconfigs.HTTPLocationRef{} + for _, locationId := range params.LocationIds { + ref, ok := refMap[locationId] + if ok { + newRefs = append(newRefs, ref) + } + } + newRefsJSON, err := json.Marshal(newRefs) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebLocations(this.AdminContext(), &pb.UpdateHTTPWebLocationsRequest{ + WebId: params.WebId, + LocationsJSON: newRefsJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/rewrite/createPopup.go b/internal/web/actions/default/servers/server/settings/rewrite/createPopup.go new file mode 100644 index 00000000..84947396 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/rewrite/createPopup.go @@ -0,0 +1,100 @@ +package rewrite + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/types" + "regexp" +) + +type CreatePopupAction struct { + actionutils.ParentAction +} + +func (this *CreatePopupAction) Init() { +} + +func (this *CreatePopupAction) RunGet(params struct { + WebId int64 +}) { + this.Data["webId"] = params.WebId + + this.Show() +} + +func (this *CreatePopupAction) RunPost(params struct { + WebId int64 + Pattern string + Replace string + Mode string + RedirectStatus int + ProxyHost string + IsBreak bool + IsOn bool + + Must *actions.Must +}) { + params.Must. + Field("pattern", params.Pattern). + Require("请输入匹配规则"). + Expect(func() (message string, success bool) { + _, err := regexp.Compile(params.Pattern) + if err != nil { + return "匹配规则错误:" + err.Error(), false + } + return "", true + }) + + params.Must. + Field("replace", params.Replace). + Require("请输入目标URL") + + // web配置 + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + + // 创建 + createResp, err := this.RPC().HTTPRewriteRuleRPC().CreateHTTPRewriteRule(this.AdminContext(), &pb.CreateHTTPRewriteRuleRequest{ + Pattern: params.Pattern, + Replace: params.Replace, + Mode: params.Mode, + RedirectStatus: types.Int32(params.RedirectStatus), + ProxyHost: params.ProxyHost, + IsBreak: params.IsBreak, + IsOn: params.IsOn, + }) + if err != nil { + this.ErrorPage(err) + return + } + + ref := &serverconfigs.HTTPRewriteRef{ + IsOn: true, + RewriteRuleId: createResp.RewriteRuleId, + } + webConfig.RewriteRefs = append(webConfig.RewriteRefs, ref) + refsJSON, err := json.Marshal(webConfig.RewriteRefs) + if err != nil { + this.ErrorPage(err) + return + } + + // 设置Web中的重写规则 + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebRewriteRules(this.AdminContext(), &pb.UpdateHTTPWebRewriteRulesRequest{ + WebId: params.WebId, + RewriteRulesJSON: refsJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/rewrite/delete.go b/internal/web/actions/default/servers/server/settings/rewrite/delete.go new file mode 100644 index 00000000..0daabc7c --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/rewrite/delete.go @@ -0,0 +1,48 @@ +package rewrite + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" +) + +type DeleteAction struct { + actionutils.ParentAction +} + +func (this *DeleteAction) RunPost(params struct { + WebId int64 + RewriteRuleId int64 +}) { + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + + refs := []*serverconfigs.HTTPRewriteRef{} + for _, ref := range webConfig.RewriteRefs { + if ref.RewriteRuleId == params.RewriteRuleId { + continue + } + refs = append(refs, ref) + } + + refsJSON, err := json.Marshal(refs) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebRewriteRules(this.AdminContext(), &pb.UpdateHTTPWebRewriteRulesRequest{ + WebId: params.WebId, + RewriteRulesJSON: refsJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/rewrite/index.go b/internal/web/actions/default/servers/server/settings/rewrite/index.go index 08cba790..c641eb36 100644 --- a/internal/web/actions/default/servers/server/settings/rewrite/index.go +++ b/internal/web/actions/default/servers/server/settings/rewrite/index.go @@ -2,6 +2,7 @@ package rewrite import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" ) type IndexAction struct { @@ -16,7 +17,18 @@ func (this *IndexAction) Init() { func (this *IndexAction) RunGet(params struct { ServerId int64 }) { - // TODO + webConfig, err := webutils.FindWebConfigWithServerId(this.Parent(), params.ServerId) + if err != nil { + this.ErrorPage(err) + return + } + this.Data["webId"] = webConfig.Id + + if len(webConfig.RewriteRules) == 0 { + this.Data["rewriteRules"] = []interface{}{} + } else { + this.Data["rewriteRules"] = webConfig.RewriteRules + } this.Show() } diff --git a/internal/web/actions/default/servers/server/settings/rewrite/init.go b/internal/web/actions/default/servers/server/settings/rewrite/init.go index 8d819f4b..b66d916a 100644 --- a/internal/web/actions/default/servers/server/settings/rewrite/init.go +++ b/internal/web/actions/default/servers/server/settings/rewrite/init.go @@ -13,6 +13,10 @@ func init() { Helper(serverutils.NewServerHelper()). Prefix("/servers/server/settings/rewrite"). Get("", new(IndexAction)). + GetPost("/createPopup", new(CreatePopupAction)). + GetPost("/updatePopup", new(UpdatePopupAction)). + Post("/delete", new(DeleteAction)). + Post("/sort", new(SortAction)). EndAll() }) } diff --git a/internal/web/actions/default/servers/server/settings/rewrite/sort.go b/internal/web/actions/default/servers/server/settings/rewrite/sort.go new file mode 100644 index 00000000..38224a6b --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/rewrite/sort.go @@ -0,0 +1,50 @@ +package rewrite + +import ( + "encoding/json" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" +) + +type SortAction struct { + actionutils.ParentAction +} + +func (this *SortAction) RunPost(params struct { + WebId int64 + RewriteRuleIds []int64 +}) { + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + refsMap := map[int64]*serverconfigs.HTTPRewriteRef{} + for _, ref := range webConfig.RewriteRefs { + refsMap[ref.RewriteRuleId] = ref + } + newRefs := []*serverconfigs.HTTPRewriteRef{} + for _, rewriteRuleId := range params.RewriteRuleIds { + ref, ok := refsMap[rewriteRuleId] + if ok { + newRefs = append(newRefs, ref) + } + } + refsJSON, err := json.Marshal(newRefs) + if err != nil { + this.ErrorPage(err) + return + } + _, err = this.RPC().HTTPWebRPC().UpdateHTTPWebRewriteRules(this.AdminContext(), &pb.UpdateHTTPWebRewriteRulesRequest{ + WebId: params.WebId, + RewriteRulesJSON: refsJSON, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/server/settings/rewrite/updatePopup.go b/internal/web/actions/default/servers/server/settings/rewrite/updatePopup.go new file mode 100644 index 00000000..a4e642e5 --- /dev/null +++ b/internal/web/actions/default/servers/server/settings/rewrite/updatePopup.go @@ -0,0 +1,93 @@ +package rewrite + +import ( + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/webutils" + "github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb" + "github.com/iwind/TeaGo/actions" + "github.com/iwind/TeaGo/types" + "regexp" +) + +type UpdatePopupAction struct { + actionutils.ParentAction +} + +func (this *UpdatePopupAction) Init() { +} + +func (this *UpdatePopupAction) RunGet(params struct { + WebId int64 + RewriteRuleId int64 +}) { + this.Data["webId"] = params.WebId + + webConfig, err := webutils.FindWebConfigWithId(this.Parent(), params.WebId) + if err != nil { + this.ErrorPage(err) + return + } + + isFound := false + for _, rewriteRule := range webConfig.RewriteRules { + if rewriteRule.Id == params.RewriteRuleId { + this.Data["rewriteRule"] = rewriteRule + isFound = true + break + } + } + + if !isFound { + this.WriteString("找不到要修改的重写规则") + return + } + + this.Show() +} + +func (this *UpdatePopupAction) RunPost(params struct { + WebId int64 + RewriteRuleId int64 + Pattern string + Replace string + Mode string + RedirectStatus int + ProxyHost string + IsBreak bool + IsOn bool + + Must *actions.Must +}) { + params.Must. + Field("pattern", params.Pattern). + Require("请输入匹配规则"). + Expect(func() (message string, success bool) { + _, err := regexp.Compile(params.Pattern) + if err != nil { + return "匹配规则错误:" + err.Error(), false + } + return "", true + }) + + params.Must. + Field("replace", params.Replace). + Require("请输入目标URL") + + // 修改 + _, err := this.RPC().HTTPRewriteRuleRPC().UpdateHTTPRewriteRule(this.AdminContext(), &pb.UpdateHTTPRewriteRuleRequest{ + RewriteRuleId: params.RewriteRuleId, + Pattern: params.Pattern, + Replace: params.Replace, + Mode: params.Mode, + RedirectStatus: types.Int32(params.RedirectStatus), + ProxyHost: params.ProxyHost, + IsBreak: params.IsBreak, + IsOn: params.IsOn, + }) + if err != nil { + this.ErrorPage(err) + return + } + + this.Success() +} diff --git a/internal/web/actions/default/servers/serverutils/server_helper.go b/internal/web/actions/default/servers/serverutils/server_helper.go index 2ac2001a..cbb363cc 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -159,12 +159,14 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "url": "/servers/server/settings/http?serverId=" + serverIdString, "isActive": secondMenuItem == "http", "isOn": (serverConfig.HTTP != nil && serverConfig.HTTP.IsOn && len(serverConfig.HTTP.Listen) > 0) || (serverConfig.Web != nil && serverConfig.Web.RedirectToHttps != nil && serverConfig.Web.RedirectToHttps.IsOn), + "isOff": serverConfig.HTTP != nil && !serverConfig.HTTP.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "HTTPS", "url": "/servers/server/settings/https?serverId=" + serverIdString, "isActive": secondMenuItem == "https", "isOn": serverConfig.HTTPS != nil && serverConfig.HTTPS.IsOn && len(serverConfig.HTTPS.Listen) > 0, + "isOff": serverConfig.HTTPS != nil && !serverConfig.HTTPS.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "Web设置", @@ -178,6 +180,11 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isActive": secondMenuItem == "reverseProxy", "isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn, }) + menuItems = append(menuItems, maps.Map{ + "name": "-", + "url": "", + "isActive": false, + }) menuItems = append(menuItems, maps.Map{ "name": "路径规则", "url": "/servers/server/settings/locations?serverId=" + serverIdString, @@ -188,11 +195,7 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "name": "重写规则", "url": "/servers/server/settings/rewrite?serverId=" + serverIdString, "isActive": secondMenuItem == "rewrite", - }) - menuItems = append(menuItems, maps.Map{ - "name": "访问控制", - "url": "/servers/server/settings/access?serverId=" + serverIdString, - "isActive": secondMenuItem == "access", + "isOn": serverConfig.Web != nil && len(serverConfig.Web.RewriteRefs) > 0, }) menuItems = append(menuItems, maps.Map{ "name": "WAF", @@ -207,9 +210,9 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "isOn": serverConfig.Web != nil && serverConfig.Web.CacheRef != nil && serverConfig.Web.CacheRef.IsOn, }) menuItems = append(menuItems, maps.Map{ - "name": "-", - "url": "", - "isActive": false, + "name": "访问控制", + "url": "/servers/server/settings/access?serverId=" + serverIdString, + "isActive": secondMenuItem == "access", }) menuItems = append(menuItems, maps.Map{ "name": "字符编码", diff --git a/web/public/js/components/common/sortable.js b/web/public/js/components/common/sortable.js new file mode 100644 index 00000000..45384421 --- /dev/null +++ b/web/public/js/components/common/sortable.js @@ -0,0 +1,25 @@ +// 给Table增加排序功能 +function sortTable(callback) { + // 引入js + let jsFile = document.createElement("script") + jsFile.setAttribute("src", "/js/sortable.min.js") + jsFile.addEventListener("load", function () { + // 初始化 + let box = document.querySelector("#sortable-table") + Sortable.create(box, { + draggable: "tbody", + handle: ".icon.handle", + onStart: function () { + }, + onUpdate: function (event) { + let rows = box.querySelectorAll("tbody") + let rowIds = [] + rows.forEach(function (row) { + rowIds.push(parseInt(row.getAttribute("v-id"))) + }) + callback(rowIds) + } + }) + }) + document.head.appendChild(jsFile) +} \ No newline at end of file diff --git a/web/public/js/components/server/http-location-labels.js b/web/public/js/components/server/http-location-labels.js index 2b866918..2f8eb39d 100644 --- a/web/public/js/components/server/http-location-labels.js +++ b/web/public/js/components/server/http-location-labels.js @@ -21,6 +21,11 @@ Vue.component("http-location-labels", { }, template: `
+ + + {{location.name}} + BREAK + 自动跳转HTTPS @@ -57,15 +62,18 @@ Vue.component("http-location-labels", {
- [状态码{{page.status[0]}}] -> {{page.url}} +
PAGE [状态码{{page.status[0]}}] -> {{page.url}}
临时关闭
+ + +
` }) Vue.component("http-location-labels-label", { props: ["v-class"], - template: `` + template: `` }) \ No newline at end of file diff --git a/web/public/js/components/server/http-rewrite-rule-list.js b/web/public/js/components/server/http-rewrite-rule-list.js new file mode 100644 index 00000000..cfb4ef66 --- /dev/null +++ b/web/public/js/components/server/http-rewrite-rule-list.js @@ -0,0 +1,101 @@ +Vue.component("http-rewrite-rule-list", { + props: ["v-web-id", "v-rewrite-rules"], + mounted: function () { + setTimeout(this.sort, 1000) + }, + data: function () { + let rewriteRules = this.vRewriteRules + if (rewriteRules == null) { + rewriteRules = [] + } + return { + rewriteRules: rewriteRules + } + }, + methods: { + updateRewriteRule: function (rewriteRuleId) { + teaweb.popup("/servers/server/settings/rewrite/updatePopup?webId=" + this.vWebId + "&rewriteRuleId=" + rewriteRuleId, { + height: "26em", + callback: function () { + window.location.reload() + } + }) + }, + deleteRewriteRule: function (rewriteRuleId) { + let that = this + teaweb.confirm("确定要删除此重写规则吗?", function () { + Tea.action("/servers/server/settings/rewrite/delete") + .params({ + webId: that.vWebId, + rewriteRuleId: rewriteRuleId + }) + .post() + .refresh() + }) + }, + // 排序 + sort: function () { + if (this.rewriteRules.length == 0) { + return + } + let that = this + sortTable(function (rowIds) { + Tea.action("/servers/server/settings/rewrite/sort") + .post() + .params({ + webId: that.vWebId, + rewriteRuleIds: rowIds + }) + .success(function () { + teaweb.success("保存成功") + }) + }) + } + }, + template: `
+
+

暂时还没有重写规则。

+ + + + + + + + + + + + + + + + + + + + + +
匹配规则转发目标转发方式状态操作
{{rule.pattern}} +
+ BREAK + {{rule.redirectStatus}} + Host: {{rule.proxyHost}} +
{{rule.replace}} + 隐式 + 显示 + + + + 修改   + 删除 +
+

拖动左侧的图标可以对重写规则进行排序。

+ +
` +}) + +Vue.component("http-rewrite-labels-label", { + props: ["v-class"], + template: `` +}) \ No newline at end of file diff --git a/web/public/js/components/server/http-web-root-box.js b/web/public/js/components/server/http-web-root-box.js index 0862f713..2de7d1c6 100644 --- a/web/public/js/components/server/http-web-root-box.js +++ b/web/public/js/components/server/http-web-root-box.js @@ -42,13 +42,12 @@ Vue.component("http-web-root-box", { } }, template: `
-

在这里可以设置如何分发静态文件资源。

- + - + - - - - - + + + + + + + +
是否开启是否开启静态资源分发
@@ -59,7 +58,7 @@ Vue.component("http-web-root-box", {
文档根目录静态资源根目录

可以访问此根目录下的静态资源。

diff --git a/web/views/@default/@layout.css b/web/views/@default/@layout.css index 3083d077..e309368c 100644 --- a/web/views/@default/@layout.css +++ b/web/views/@default/@layout.css @@ -65,7 +65,7 @@ overflow-y: auto; } .right-box.tiny { - top: 10em; + top: 10.4em; left: 26.5em; } .right-box::-webkit-scrollbar { @@ -130,6 +130,7 @@ p.comment, div.comment { color: rgba(0, 0, 0, 0.3); padding-top: 0.4em; + font-size: 0.9em; } p.comment em, div.comment em { @@ -584,7 +585,6 @@ select.auto-width { width: 100% !important; } } -/** label **/ label[for] { cursor: pointer !important; } @@ -675,4 +675,30 @@ var.dash { form .fields { margin-bottom: 0 !important; } +/** 排序 **/ +.sortable-ghost { + background: #ddd !important; + opacity: 0.1; +} +.sortable-drag { + opacity: 1.0; +} +.icon.handle { + cursor: pointer; +} +.label.port-label { + margin-top: 0.4em !important; + margin-bottom: 0.4em !important; + display: block; + line-height: 1.5; +} +.label { + word-break: break-all; +} +td .label.small { + margin-bottom: 0.2em !important; +} +td { + word-break: break-all; +} /*# sourceMappingURL=@layout.css.map */ \ No newline at end of file diff --git a/web/views/@default/@layout.css.map b/web/views/@default/@layout.css.map index 5644a1ba..51cdc8c5 100644 --- a/web/views/@default/@layout.css.map +++ b/web/views/@default/@layout.css.map @@ -1 +1 @@ -{"version":3,"sources":["@left_menu.less","@layout.less"],"names":[],"mappings":"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","file":"@layout.css"} \ No newline at end of file +{"version":3,"sources":["@left_menu.less","@layout.less"],"names":[],"mappings":"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","file":"@layout.css"} \ No newline at end of file diff --git a/web/views/@default/@layout.less b/web/views/@default/@layout.less index 47bae613..bcee24fa 100644 --- a/web/views/@default/@layout.less +++ b/web/views/@default/@layout.less @@ -64,6 +64,7 @@ tbody { p.comment, div.comment { color: rgba(0, 0, 0, 0.3); padding-top: 0.4em; + font-size: 0.9em; } p.comment em, div.comment em { @@ -620,7 +621,7 @@ select.auto-width { } } -/** label **/ +// label label[for] { cursor: pointer !important; } @@ -731,3 +732,38 @@ form { margin-bottom: 0 !important; } } + +/** 排序 **/ +.sortable-ghost { + background: #ddd !important; + opacity: 0.1; +} + +.sortable-drag { + opacity: 1.0; +} + +.icon.handle { + cursor: pointer; +} + +.label.port-label { + margin-top: 0.4em !important; + margin-bottom: 0.4em !important; + display: block; + line-height: 1.5; +} + +// .label +.label { + word-break: break-all; +} + +td .label.small { + margin-bottom: 0.2em !important; +} + +// td +td { + word-break: break-all; +} \ No newline at end of file diff --git a/web/views/@default/@left_menu.less b/web/views/@default/@left_menu.less index e7d4040b..150c246a 100644 --- a/web/views/@default/@left_menu.less +++ b/web/views/@default/@left_menu.less @@ -87,7 +87,7 @@ } .right-box.tiny { - top: 10em; + top: 10.4em; left: 26.5em; } diff --git a/web/views/@default/servers/server/settings/http/index.html b/web/views/@default/servers/server/settings/http/index.html index 889716fc..88125dfb 100644 --- a/web/views/@default/servers/server/settings/http/index.html +++ b/web/views/@default/servers/server/settings/http/index.html @@ -9,17 +9,28 @@ - + - - - - + + + + + + + + + +
绑定端口 *是否启用HTTP - -
自动跳转到HTTPS - +
+ + +
绑定端口 * + +
自动跳转到HTTPS + +
diff --git a/web/views/@default/servers/server/settings/https/index.html b/web/views/@default/servers/server/settings/https/index.html index f292674c..3815fb14 100644 --- a/web/views/@default/servers/server/settings/https/index.html +++ b/web/views/@default/servers/server/settings/https/index.html @@ -8,11 +8,22 @@ - + + + + + + +
绑定端口 *是否启用HTTPS - +
+ + +
绑定端口 * + +
diff --git a/web/views/@default/servers/server/settings/index.html b/web/views/@default/servers/server/settings/index.html index e5fa4ce9..58cbc3a5 100644 --- a/web/views/@default/servers/server/settings/index.html +++ b/web/views/@default/servers/server/settings/index.html @@ -26,17 +26,26 @@ {{typeName}}
描述 - -
描述 + +
是否启用 +
+ + +
+

可以使用此选项整体关闭当前服务。

+
diff --git a/web/views/@default/servers/server/settings/locations/index.html b/web/views/@default/servers/server/settings/locations/index.html index 0214c39d..df5bea9c 100644 --- a/web/views/@default/servers/server/settings/locations/index.html +++ b/web/views/@default/servers/server/settings/locations/index.html @@ -1,32 +1,41 @@ {$layout} - {$template "/left_menu"} +{$var "header"} + +{$end} +
{$template "menu"}

暂时还没有路径规则。

- +
+ - - - - - + + + + + + + +
匹配规则 状态 操作
- {{location.pattern}} - - - - - 详情   - 删除 -
+ {{location.pattern}} + + + + + 详情   + 删除   + +
+

拖动左侧的图标可以对路径规则进行排序。

\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/locations/index.js b/web/views/@default/servers/server/settings/locations/index.js index 5dd1791d..5b393386 100644 --- a/web/views/@default/servers/server/settings/locations/index.js +++ b/web/views/@default/servers/server/settings/locations/index.js @@ -1,4 +1,8 @@ Tea.context(function () { + this.$delay(function () { + this.sort() + }, 1000) + // 删除路径规则 this.deleteLocation = function (locationId) { teaweb.confirm("确定要删除此路径规则吗?", function () { @@ -10,4 +14,35 @@ Tea.context(function () { .refresh() }) } + + // 排序 + this.sort = function () { + if (this.locations.length == 0) { + return + } + + let box = this.$find("#sortable-table")[0] + let that = this + Sortable.create(box, { + draggable: "tbody", + handle: ".icon.handle", + onStart: function () { + }, + onUpdate: function (event) { + let rows = box.querySelectorAll("tbody") + let locationIds = [] + rows.forEach(function (row) { + locationIds.push(parseInt(row.getAttribute("v-id"))) + }) + that.$post(".sort") + .params({ + webId: that.webId, + locationIds: locationIds + }) + .success(function () { + teaweb.success("保存成功") + }) + } + }) + } }) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/locations/rewrite/index.html b/web/views/@default/servers/server/settings/locations/rewrite/index.html index 0452db51..19dbb52e 100644 --- a/web/views/@default/servers/server/settings/locations/rewrite/index.html +++ b/web/views/@default/servers/server/settings/locations/rewrite/index.html @@ -6,6 +6,9 @@ {$template "../left_menu"}
-

此功能暂未开放,敬请期待。

+ + [创建] + +
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/locations/rewrite/index.js b/web/views/@default/servers/server/settings/locations/rewrite/index.js new file mode 100644 index 00000000..c6d934c9 --- /dev/null +++ b/web/views/@default/servers/server/settings/locations/rewrite/index.js @@ -0,0 +1,11 @@ +Tea.context(function () { + // 创建重写规则 + this.createRewriteRule = function () { + teaweb.popup("/servers/server/settings/rewrite/createPopup?webId=" + this.webId, { + height: "26em", + callback: function () { + window.location.reload() + } + }) + } +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/rewrite/createPopup.html b/web/views/@default/servers/server/settings/rewrite/createPopup.html new file mode 100644 index 00000000..e132dcc2 --- /dev/null +++ b/web/views/@default/servers/server/settings/rewrite/createPopup.html @@ -0,0 +1,73 @@ +{$layout "layout_popup"} + +

创建重写规则

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
匹配规则 * + +

需要符合正则表达式规范,正则表达式语法 »

+
目标URL * + +

URL中可以包含一些内置的变量,也可以是一个完整的URL,比如:http://example.com/hello。

+
转发方式 + +

隐式表示不在客户端显示重写后的URL;显式表示在客户端跳转URL,将会显示重写后的URL。

+
跳转状态码 + +

通常使用默认的307即可。

+
代理主机名 + +

如果转发的方式为隐式而且目标URL为不同的域名时需要用到此选项,用于修改被代理服务接收到的域名,默认和客户端请求的主机名一致,通常不必填写,支持请求变量

+
是否终止往下匹配 +
+ + +
+

如果选中了此选项,一旦匹配成功,不会继续匹配其他的重写规则或路径规则。

+
是否启用 +
+ + +
+
+ +
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/rewrite/createPopup.js b/web/views/@default/servers/server/settings/rewrite/createPopup.js new file mode 100644 index 00000000..7e0ce1d0 --- /dev/null +++ b/web/views/@default/servers/server/settings/rewrite/createPopup.js @@ -0,0 +1,15 @@ +Tea.context(function () { + this.success = NotifyPopup + + this.rewriteRule = { + mode: "proxy", + redirectStatus: 307 + } + this.statusOptions = [ + {"code": 301, "text": "Moved Permanently"}, + {"code": 308, "text": "Permanent Redirect"}, + {"code": 302, "text": "Found"}, + {"code": 303, "text": "See Other"}, + {"code": 307, "text": "Temporary Redirect"} + ] +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/rewrite/index.html b/web/views/@default/servers/server/settings/rewrite/index.html index e5a31ca1..aa6c3f81 100644 --- a/web/views/@default/servers/server/settings/rewrite/index.html +++ b/web/views/@default/servers/server/settings/rewrite/index.html @@ -2,5 +2,8 @@ {$template "/left_menu"}
-

此功能暂未开放,敬请期待。

+ + [创建] + +
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/rewrite/index.js b/web/views/@default/servers/server/settings/rewrite/index.js new file mode 100644 index 00000000..c6d934c9 --- /dev/null +++ b/web/views/@default/servers/server/settings/rewrite/index.js @@ -0,0 +1,11 @@ +Tea.context(function () { + // 创建重写规则 + this.createRewriteRule = function () { + teaweb.popup("/servers/server/settings/rewrite/createPopup?webId=" + this.webId, { + height: "26em", + callback: function () { + window.location.reload() + } + }) + } +}) \ No newline at end of file diff --git a/web/views/@default/servers/server/settings/rewrite/updatePopup.html b/web/views/@default/servers/server/settings/rewrite/updatePopup.html new file mode 100644 index 00000000..bbd06383 --- /dev/null +++ b/web/views/@default/servers/server/settings/rewrite/updatePopup.html @@ -0,0 +1,74 @@ +{$layout "layout_popup"} + +

修改重写规则

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
匹配规则 * + +

需要符合正则表达式规范,正则表达式语法 »

+
目标URL * + +

URL中可以包含一些内置的变量,也可以是一个完整的URL,比如:http://example.com/hello。

+
转发方式 + +

隐式表示不在客户端显示重写后的URL;显式表示在客户端跳转URL,将会显示重写后的URL。

+
跳转状态码 + +

通常使用默认的307即可。

+
代理主机名 + +

如果转发的方式为隐式而且目标URL为不同的域名时需要用到此选项,用于修改被代理服务接收到的域名,默认和客户端请求的主机名一致,通常不必填写,支持请求变量

+
是否终止往下匹配 +
+ + +
+

如果选中了此选项,一旦匹配成功,不会继续匹配其他的重写规则或路径规则。

+
是否启用 +
+ + +
+
+ +
\ No newline at end of file diff --git a/web/views/@default/servers/server/settings/rewrite/updatePopup.js b/web/views/@default/servers/server/settings/rewrite/updatePopup.js new file mode 100644 index 00000000..ad6428d2 --- /dev/null +++ b/web/views/@default/servers/server/settings/rewrite/updatePopup.js @@ -0,0 +1,11 @@ +Tea.context(function () { + this.success = NotifyPopup + + this.statusOptions = [ + {"code": 301, "text": "Moved Permanently"}, + {"code": 308, "text": "Permanent Redirect"}, + {"code": 302, "text": "Found"}, + {"code": 303, "text": "See Other"}, + {"code": 307, "text": "Temporary Redirect"} + ] +}) \ No newline at end of file