diff --git a/src/api.go b/src/api.go index 2ea57fd..4e266eb 100644 --- a/src/api.go +++ b/src/api.go @@ -59,6 +59,7 @@ func RegisterHTTPProxyAPIs(authRouter *auth.RouterDef) { authRouter.HandleFunc("/api/proxy/header/handleHopByHop", HandleHopByHop) authRouter.HandleFunc("/api/proxy/header/handleHostOverwrite", HandleHostOverwrite) authRouter.HandleFunc("/api/proxy/header/handlePermissionPolicy", HandlePermissionPolicy) + authRouter.HandleFunc("/api/proxy/header/handleWsHeaderBehavior", HandleWsHeaderBehavior) /* Reverse proxy auth related */ authRouter.HandleFunc("/api/proxy/auth/exceptions/list", ListProxyBasicAuthExceptionPaths) authRouter.HandleFunc("/api/proxy/auth/exceptions/add", AddProxyBasicAuthExceptionPaths) diff --git a/src/def.go b/src/def.go index acb7bdd..b484945 100644 --- a/src/def.go +++ b/src/def.go @@ -42,7 +42,7 @@ import ( const ( /* Build Constants */ SYSTEM_NAME = "Zoraxy" - SYSTEM_VERSION = "3.1.5" + SYSTEM_VERSION = "3.1.6" DEVELOPMENT_BUILD = false /* Development: Set to false to use embedded web fs */ /* System Constants */ diff --git a/src/reverseproxy.go b/src/reverseproxy.go index cde2328..159d38f 100644 --- a/src/reverseproxy.go +++ b/src/reverseproxy.go @@ -467,6 +467,12 @@ func ReverseProxyHandleEditEndpoint(w http.ResponseWriter, r *http.Request) { } bypassGlobalTLS := (bpgtls == "true") + //Disable uptime monitor + disbleUtm, err := utils.PostBool(r, "dutm") + if err != nil { + disbleUtm = false + } + // Auth Provider authProviderTypeStr, _ := utils.PostPara(r, "authprovider") if authProviderTypeStr == "" { @@ -532,6 +538,7 @@ func ReverseProxyHandleEditEndpoint(w http.ResponseWriter, r *http.Request) { newProxyEndpoint.RequireRateLimit = requireRateLimit newProxyEndpoint.RateLimit = proxyRateLimit newProxyEndpoint.UseStickySession = useStickySession + newProxyEndpoint.DisableUptimeMonitor = disbleUtm //Prepare to replace the current routing rule readyRoutingRule, err := dynamicProxyRouter.PrepareProxyRoute(newProxyEndpoint) @@ -1553,3 +1560,39 @@ func HandlePermissionPolicy(w http.ResponseWriter, r *http.Request) { http.Error(w, "405 - Method not allowed", http.StatusMethodNotAllowed) } + +func HandleWsHeaderBehavior(w http.ResponseWriter, r *http.Request) { + domain, err := utils.PostPara(r, "domain") + if err != nil { + domain, err = utils.GetPara(r, "domain") + if err != nil { + utils.SendErrorResponse(w, "domain or matching rule not defined") + return + } + } + + targetProxyEndpoint, err := dynamicProxyRouter.LoadProxy(domain) + if err != nil { + utils.SendErrorResponse(w, "target endpoint not exists") + return + } + + if r.Method == http.MethodGet { + js, _ := json.Marshal(targetProxyEndpoint.EnableWebsocketCustomHeaders) + utils.SendJSONResponse(w, string(js)) + } else if r.Method == http.MethodPost { + enableWsHeader, err := utils.PostBool(r, "enable") + if err != nil { + utils.SendErrorResponse(w, "invalid enable state given") + return + } + + targetProxyEndpoint.EnableWebsocketCustomHeaders = enableWsHeader + SaveReverseProxyConfig(targetProxyEndpoint) + targetProxyEndpoint.UpdateToRuntime() + utils.SendOK(w) + + } else { + http.Error(w, "405 - Method not allowed", http.StatusMethodNotAllowed) + } +} diff --git a/src/web/components/httprp.html b/src/web/components/httprp.html index 1c61b37..8ecd402 100644 --- a/src/web/components/httprp.html +++ b/src/web/components/httprp.html @@ -258,6 +258,13 @@ if (payload.UseStickySession){ useStickySessionChecked = "checked"; } + + let enableUptimeMonitor = ""; + //Note the config file store the uptime monitor as disable, so we need to reverse the logic + if (!payload.DisableUptimeMonitor){ + enableUptimeMonitor = "checked"; + } + input = `
Copy custom headers from HTTP requests to WebSocket connections. + Might be required by some projects like MeshCentral.
+