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: `
暂时还没有重写规则。
+| + | 匹配规则 | +转发目标 | +转发方式 | +状态 | +操作 | +
|---|---|---|---|---|---|
| + | {{rule.pattern}}
+ + |
+ {{rule.replace}} | ++ 隐式 + 显示 + | +
+ |
+ + 修改 + 删除 + | +
拖动左侧的图标可以对重写规则进行排序。
+ +| 是否开启 | +是否开启静态资源分发 |
@@ -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 @@
|
||||||||||||||
| 描述 | -- - | -|||||||||||||||
| 描述 | ++ + | +|||||||||||||||
| 是否启用 | +
+
+
+
+
+ 可以使用此选项整体关闭当前服务。 + |
+ |||||||||||||||
暂时还没有路径规则。
-| 匹配规则 | 状态 | 操作 | |
|---|---|---|---|
|
- {{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"}