|
@@ -132,26 +132,15 @@ func ReverseProxyAddVdir(w http.ResponseWriter, r *http.Request) {
|
|
|
SkipCertValidations: skipValid,
|
|
|
}
|
|
|
|
|
|
- //Append the virtual directory entry to the endpoint
|
|
|
- targetProxyEndpoint.VirtualDirectories = append(targetProxyEndpoint.VirtualDirectories, &newVirtualDirectoryRouter)
|
|
|
-
|
|
|
- //Prepare to replace the current routing rule
|
|
|
- readyRoutingRule, err := dynamicProxyRouter.PrepareProxyRoute(targetProxyEndpoint)
|
|
|
+ //Add Virtual Directory Rule to this Proxy Endpoint
|
|
|
+ activatedProxyEndpoint, err := targetProxyEndpoint.AddVirtualDirectoryRule(&newVirtualDirectoryRouter)
|
|
|
if err != nil {
|
|
|
utils.SendErrorResponse(w, err.Error())
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- if eptype == "root" {
|
|
|
- //Replace the root router
|
|
|
- dynamicProxyRouter.Root = readyRoutingRule
|
|
|
- } else {
|
|
|
- targetProxyEndpoint.Remove()
|
|
|
- dynamicProxyRouter.AddProxyRouteToRuntime(readyRoutingRule)
|
|
|
- }
|
|
|
-
|
|
|
//Save it to file
|
|
|
- SaveReverseProxyConfig(targetProxyEndpoint)
|
|
|
+ SaveReverseProxyConfig(activatedProxyEndpoint)
|
|
|
|
|
|
// Update uptime monitor
|
|
|
UpdateUptimeMonitorTargets()
|
|
@@ -194,7 +183,7 @@ func ReverseProxyDeleteVdir(w http.ResponseWriter, r *http.Request) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- //Load the vdir from endpoint
|
|
|
+ //Delete the Vdir from endpoint
|
|
|
err = targetEndpoint.RemoveVirtualDirectoryRuleByMatchingPath(vdir)
|
|
|
if err != nil {
|
|
|
utils.SendErrorResponse(w, err.Error())
|
|
@@ -209,9 +198,93 @@ func ReverseProxyDeleteVdir(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
|
|
|
utils.SendOK(w)
|
|
|
-
|
|
|
}
|
|
|
|
|
|
+// Handle update of reverse proxy vdir rules
|
|
|
func ReverseProxyEditVdir(w http.ResponseWriter, r *http.Request) {
|
|
|
+ eptype, err := utils.PostPara(r, "type") //Support root and host
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, "type not defined")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ vdir, err := utils.PostPara(r, "vdir")
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, "vdir matching key not defined")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ domain, err := utils.PostPara(r, "domain")
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, "target domain not defined")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ reqTLSStr, err := utils.PostPara(r, "reqTLS")
|
|
|
+ if err != nil {
|
|
|
+ //Assume false
|
|
|
+ reqTLSStr = "false"
|
|
|
+ }
|
|
|
+ reqTLS := (reqTLSStr == "true")
|
|
|
+
|
|
|
+ skipValidStr, err := utils.PostPara(r, "skipValid")
|
|
|
+ if err != nil {
|
|
|
+ //Assume false
|
|
|
+ skipValidStr = "false"
|
|
|
+ }
|
|
|
+
|
|
|
+ skipValid := (skipValidStr == "true")
|
|
|
+
|
|
|
+ var targetEndpoint *dynamicproxy.ProxyEndpoint
|
|
|
+ if eptype == "root" {
|
|
|
+ targetEndpoint = dynamicProxyRouter.Root
|
|
|
+
|
|
|
+ } else if eptype == "host" {
|
|
|
+ //Proxy rule
|
|
|
+ matchingPath, err := utils.PostPara(r, "path")
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, "matching path not defined")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ ept, err := dynamicProxyRouter.LoadProxy(matchingPath)
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, "target proxy rule not found")
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
+ targetEndpoint = ept
|
|
|
+ } else {
|
|
|
+ utils.SendErrorResponse(w, "invalid endpoint type given")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //Check if the target vdir exists
|
|
|
+ if targetEndpoint.GetVirtualDirectoryRuleByMatchingPath(vdir) == nil {
|
|
|
+ utils.SendErrorResponse(w, "target virtual directory rule not exists")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //Overwrite the target endpoint
|
|
|
+ newVdirRule := dynamicproxy.VirtualDirectoryEndpoint{
|
|
|
+ MatchingPath: vdir,
|
|
|
+ Domain: domain,
|
|
|
+ RequireTLS: reqTLS,
|
|
|
+ SkipCertValidations: skipValid,
|
|
|
+ Disabled: false,
|
|
|
+ }
|
|
|
+
|
|
|
+ targetEndpoint.RemoveVirtualDirectoryRuleByMatchingPath(vdir)
|
|
|
+ activatedProxyEndpoint, err := targetEndpoint.AddVirtualDirectoryRule(&newVdirRule)
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ //Save changes to file
|
|
|
+ SaveReverseProxyConfig(activatedProxyEndpoint)
|
|
|
+
|
|
|
+ UpdateUptimeMonitorTargets()
|
|
|
+
|
|
|
+ utils.SendOK(w)
|
|
|
}
|