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 b1c89687..b22b7c18 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 @@ -2,6 +2,7 @@ package locationutils import ( "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils" + "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" "github.com/iwind/TeaGo/actions" "github.com/iwind/TeaGo/maps" "net/http" @@ -28,9 +29,9 @@ func (this *LocationHelper) BeforeAction(actionPtr actions.ActionWrapper) { action.Data["mainMenu"] = "server" action.Data["mainTab"] = "setting" action.Data["secondMenuItem"] = "locations" - action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem")) // 路径信息 + var currentLocationConfig *serverconfigs.HTTPLocationConfig = nil parentActionValue := reflect.ValueOf(actionPtr).Elem().FieldByName("ParentAction") if parentActionValue.IsValid() { parentAction, isOk := parentActionValue.Interface().(actionutils.ParentAction) @@ -42,32 +43,41 @@ func (this *LocationHelper) BeforeAction(actionPtr actions.ActionWrapper) { } action.Data["locationId"] = locationId action.Data["locationConfig"] = locationConfig + currentLocationConfig = locationConfig } } + + // 左侧菜单 + action.Data["tinyLeftMenuItems"] = this.createMenus(serverIdString, locationIdString, action.Data.GetString("tinyMenuItem"), currentLocationConfig) } -func (this *LocationHelper) createMenus(serverIdString string, locationIdString string, secondMenuItem string) []maps.Map { +func (this *LocationHelper) createMenus(serverIdString string, locationIdString string, secondMenuItem string, locationConfig *serverconfigs.HTTPLocationConfig) []maps.Map { menuItems := []maps.Map{ - { - "name": "基本信息", - "url": "/servers/server/settings/locations/location?serverId=" + serverIdString + "&locationId=" + locationIdString, - "isActive": secondMenuItem == "basic", - }, + } + menuItems = append(menuItems, maps.Map{ + "name": "基本信息", + "url": "/servers/server/settings/locations/location?serverId=" + serverIdString + "&locationId=" + locationIdString, + "isActive": secondMenuItem == "basic", + "isOff": locationConfig != nil && !locationConfig.IsOn, + }) menuItems = append(menuItems, maps.Map{ "name": "HTTP", "url": "/servers/server/settings/locations/http?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "http", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.RedirectToHttps != nil && locationConfig.Web.RedirectToHttps.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "Web设置", "url": "/servers/server/settings/locations/web?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "web", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Root != nil && locationConfig.Web.Root.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "反向代理", "url": "/servers/server/settings/locations/reverseProxy?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "reverseProxy", + "isOn": locationConfig != nil && locationConfig.ReverseProxyRef != nil && locationConfig.ReverseProxyRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "重写规则", @@ -83,11 +93,13 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "name": "WAF", "url": "/servers/server/settings/locations/waf?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "waf", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.FirewallRef != nil && locationConfig.Web.FirewallRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "缓存", "url": "/servers/server/settings/locations/cache?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "cache", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.CacheRef != nil && locationConfig.Web.CacheRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "-", @@ -98,36 +110,43 @@ func (this *LocationHelper) createMenus(serverIdString string, locationIdString "name": "字符编码", "url": "/servers/server/settings/locations/charset?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "charset", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.Charset != nil && locationConfig.Web.Charset.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "访问日志", "url": "/servers/server/settings/locations/accessLog?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "accessLog", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.AccessLogRef != nil && locationConfig.Web.AccessLogRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "统计", "url": "/servers/server/settings/locations/stat?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "stat", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.StatRef != nil && locationConfig.Web.StatRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "Gzip压缩", "url": "/servers/server/settings/locations/gzip?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "gzip", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.GzipRef != nil && locationConfig.Web.GzipRef.IsPrior, }) menuItems = append(menuItems, maps.Map{ "name": "特殊页面", "url": "/servers/server/settings/locations/pages?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "pages", + "isOn": locationConfig != nil && locationConfig.Web != nil && (len(locationConfig.Web.Pages) > 0 || (locationConfig.Web.Shutdown != nil && locationConfig.Web.Shutdown.IsPrior)), }) menuItems = append(menuItems, maps.Map{ "name": "HTTP Header", "url": "/servers/server/settings/locations/headers?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "header", + "isOn": locationConfig != nil && locationConfig.Web != nil && ((locationConfig.Web.RequestHeaderPolicyRef != nil && locationConfig.Web.RequestHeaderPolicyRef.IsPrior) || (locationConfig.Web.ResponseHeaderPolicyRef != nil && locationConfig.Web.ResponseHeaderPolicyRef.IsPrior)), }) menuItems = append(menuItems, maps.Map{ "name": "Websocket", "url": "/servers/server/settings/locations/websocket?serverId=" + serverIdString + "&locationId=" + locationIdString, "isActive": secondMenuItem == "websocket", + "isOn": locationConfig != nil && locationConfig.Web != nil && locationConfig.Web.WebsocketRef != nil && locationConfig.Web.WebsocketRef.IsPrior, }) return menuItems diff --git a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/setting.go b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/setting.go index c327b28d..0c561a71 100644 --- a/internal/web/actions/default/servers/server/settings/locations/reverseProxy/setting.go +++ b/internal/web/actions/default/servers/server/settings/locations/reverseProxy/setting.go @@ -76,6 +76,7 @@ func (this *SettingAction) RunPost(params struct { RequestHost: reverseProxyConfig.RequestHost, RequestURI: reverseProxyConfig.RequestURI, StripPrefix: reverseProxyConfig.StripPrefix, + AutoFlush: reverseProxyConfig.AutoFlush, }) this.Success() diff --git a/internal/web/actions/default/servers/server/settings/reverseProxy/setting.go b/internal/web/actions/default/servers/server/settings/reverseProxy/setting.go index bf845798..37df74d7 100644 --- a/internal/web/actions/default/servers/server/settings/reverseProxy/setting.go +++ b/internal/web/actions/default/servers/server/settings/reverseProxy/setting.go @@ -76,6 +76,7 @@ func (this *SettingAction) RunPost(params struct { RequestHost: reverseProxyConfig.RequestHost, RequestURI: reverseProxyConfig.RequestURI, StripPrefix: reverseProxyConfig.StripPrefix, + AutoFlush: reverseProxyConfig.AutoFlush, }) 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 b93bf2bf..2ac2001a 100644 --- a/internal/web/actions/default/servers/serverutils/server_helper.go +++ b/internal/web/actions/default/servers/serverutils/server_helper.go @@ -142,6 +142,7 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "name": "基本信息", "url": "/servers/server/settings?serverId=" + serverIdString, "isActive": secondMenuItem == "basic", + "isOff": !serverConfig.IsOn, }, } @@ -151,31 +152,37 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "name": "域名", "url": "/servers/server/settings/serverNames?serverId=" + serverIdString, "isActive": secondMenuItem == "serverName", + "isOn": len(serverConfig.ServerNames) > 0, }) menuItems = append(menuItems, maps.Map{ "name": "HTTP", "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), }) 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, }) menuItems = append(menuItems, maps.Map{ "name": "Web设置", "url": "/servers/server/settings/web?serverId=" + serverIdString, "isActive": secondMenuItem == "web", + "isOn": serverConfig.Web != nil && serverConfig.Web.Root != nil && serverConfig.Web.Root.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "反向代理", "url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString, "isActive": secondMenuItem == "reverseProxy", + "isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "路径规则", "url": "/servers/server/settings/locations?serverId=" + serverIdString, "isActive": secondMenuItem == "locations", + "isOn": serverConfig.Web != nil && len(serverConfig.Web.Locations) > 0, }) menuItems = append(menuItems, maps.Map{ "name": "重写规则", @@ -191,11 +198,13 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "name": "WAF", "url": "/servers/server/settings/waf?serverId=" + serverIdString, "isActive": secondMenuItem == "waf", + "isOn": serverConfig.Web != nil && serverConfig.Web.FirewallRef != nil && serverConfig.Web.FirewallRef.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "缓存", "url": "/servers/server/settings/cache?serverId=" + serverIdString, "isActive": secondMenuItem == "cache", + "isOn": serverConfig.Web != nil && serverConfig.Web.CacheRef != nil && serverConfig.Web.CacheRef.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "-", @@ -206,64 +215,76 @@ func (this *ServerHelper) createSettingsMenu(secondMenuItem string, serverIdStri "name": "字符编码", "url": "/servers/server/settings/charset?serverId=" + serverIdString, "isActive": secondMenuItem == "charset", + "isOn": serverConfig.Web != nil && serverConfig.Web.Charset != nil && serverConfig.Web.Charset.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "访问日志", "url": "/servers/server/settings/accessLog?serverId=" + serverIdString, "isActive": secondMenuItem == "accessLog", + "isOn": serverConfig.Web != nil && serverConfig.Web.AccessLogRef != nil && serverConfig.Web.AccessLogRef.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "统计", "url": "/servers/server/settings/stat?serverId=" + serverIdString, "isActive": secondMenuItem == "stat", + "isOn": serverConfig.Web != nil && serverConfig.Web.StatRef != nil && serverConfig.Web.StatRef.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "Gzip压缩", "url": "/servers/server/settings/gzip?serverId=" + serverIdString, "isActive": secondMenuItem == "gzip", + "isOn": serverConfig.Web != nil && serverConfig.Web.GzipRef != nil && serverConfig.Web.GzipRef.IsOn, }) menuItems = append(menuItems, maps.Map{ "name": "特殊页面", "url": "/servers/server/settings/pages?serverId=" + serverIdString, "isActive": secondMenuItem == "pages", + "isOn": serverConfig.Web != nil && (len(serverConfig.Web.Pages) > 0 || (serverConfig.Web.Shutdown != nil && serverConfig.Web.Shutdown.IsOn)), }) menuItems = append(menuItems, maps.Map{ "name": "HTTP Header", "url": "/servers/server/settings/headers?serverId=" + serverIdString, "isActive": secondMenuItem == "header", + "isOn": serverConfig.Web != nil && ((serverConfig.Web.RequestHeaderPolicyRef != nil && serverConfig.Web.RequestHeaderPolicyRef.IsOn) || (serverConfig.Web.ResponseHeaderPolicyRef != nil && serverConfig.Web.ResponseHeaderPolicyRef.IsOn)), }) menuItems = append(menuItems, maps.Map{ "name": "Websocket", "url": "/servers/server/settings/websocket?serverId=" + serverIdString, "isActive": secondMenuItem == "websocket", + "isOn": serverConfig.Web != nil && serverConfig.Web.WebsocketRef != nil && serverConfig.Web.WebsocketRef.IsOn, }) } else if serverConfig.IsTCP() { menuItems = append(menuItems, maps.Map{ "name": "TCP", "url": "/servers/server/settings/tcp?serverId=" + serverIdString, "isActive": secondMenuItem == "tcp", + "isOn": serverConfig.TCP != nil && serverConfig.TCP.IsOn && len(serverConfig.TCP.Listen) > 0, }) menuItems = append(menuItems, maps.Map{ "name": "TLS", "url": "/servers/server/settings/tls?serverId=" + serverIdString, "isActive": secondMenuItem == "tls", + "isOn": serverConfig.TLS != nil && serverConfig.TLS.IsOn && len(serverConfig.TLS.Listen) > 0, }) menuItems = append(menuItems, maps.Map{ "name": "反向代理", "url": "/servers/server/settings/reverseProxy?serverId=" + serverIdString, "isActive": secondMenuItem == "reverseProxy", + "isOn": serverConfig.ReverseProxyRef != nil && serverConfig.ReverseProxyRef.IsOn, }) } else if serverConfig.IsUnix() { menuItems = append(menuItems, maps.Map{ "name": "Unix", "url": "/servers/server/settings/unix?serverId=" + serverIdString, "isActive": secondMenuItem == "unix", + "isOn": serverConfig.Unix != nil && serverConfig.Unix.IsOn && len(serverConfig.Unix.Listen) > 0, }) } else if serverConfig.IsUDP() { menuItems = append(menuItems, maps.Map{ "name": "UDP", "url": "/servers/server/settings/udp?serverId=" + serverIdString, "isActive": secondMenuItem == "udp", + "isOn": serverConfig.UDP != nil && serverConfig.UDP.IsOn && len(serverConfig.UDP.Listen) > 0, }) } diff --git a/web/public/js/components/server/http-gzip-box.js b/web/public/js/components/server/http-gzip-box.js index afcd5538..8192ee14 100644 --- a/web/public/js/components/server/http-gzip-box.js +++ b/web/public/js/components/server/http-gzip-box.js @@ -15,11 +15,27 @@ Vue.component("http-gzip-box", { gzip: gzip, } }, + methods: { + isOn: function () { + return (!this.vIsLocation || this.vGzipRef.isPrior) && this.vGzipRef.isOn + } + }, template: `
| 启用压缩 | +
+
+
+
+
+ |
+ |
| 压缩级别 |
diff --git a/web/public/js/components/server/http-location-labels.js b/web/public/js/components/server/http-location-labels.js
new file mode 100644
index 00000000..2b866918
--- /dev/null
+++ b/web/public/js/components/server/http-location-labels.js
@@ -0,0 +1,71 @@
+Vue.component("http-location-labels", {
+ props: ["v-location-config"],
+ data: function () {
+ return {
+ location: this.vLocationConfig
+ }
+ },
+ methods: {
+ // 判断是否已启用某配置
+ configIsOn: function (config) {
+ return config != null && config.isPrior && config.isOn
+ },
+
+ refIsOn: function (ref, config) {
+ return this.configIsOn(ref) && config != null && config.isOn
+ },
+
+ len: function (arr) {
+ return (arr == null) ? 0 : arr.length
+ }
+ },
+ template: `
+
+
+ `
+})
+
+Vue.component("http-location-labels-label", {
+ props: ["v-class"],
+ template: `
+
+
+
+ |
|
| 请求URI | +请求URI(RequestURI) |
\${requestURI}为完整的请求URI,可以使用类似于"\${requestURI}?arg1=value1&arg2=value2"的形式添加你的参数。 |
| 去除URL前缀 | +去除URL前缀(StripPrefix) |
可以把请求的路径部分前缀去除后再查找文件,比如把 /web/app/index.html 去除前缀 /web 后就变成 /app/index.html。 |
| 是否自动刷新缓存区(AutoFlush) | +
+
+
+
+
+ 开启后将自动刷新缓冲区数据到客户端,在类似于SSE(server-sent events)等场景下很有用。 + |
+