diff --git a/src/main.go b/src/main.go index 25cafd7..6de0125 100644 --- a/src/main.go +++ b/src/main.go @@ -51,7 +51,7 @@ var logOutputToFile = flag.Bool("log", true, "Log terminal output to file") var ( name = "Zoraxy" - version = "3.0.2" + version = "3.0.3" nodeUUID = "generic" development = false //Set this to false to use embedded web fs bootTime = time.Now().Unix() diff --git a/src/mod/access/access.go b/src/mod/access/access.go index c105c63..ae5cd9b 100644 --- a/src/mod/access/access.go +++ b/src/mod/access/access.go @@ -69,6 +69,9 @@ func NewAccessController(options *Options) (*Controller, error) { Options: options, } + //Assign default access rule parent + thisController.DefaultAccessRule.parent = &thisController + //Load all acccess rules from file configFiles, err := filepath.Glob(options.ConfigFolder + "/*.json") if err != nil { @@ -113,6 +116,7 @@ func (c *Controller) GetGlobalAccessRule() (*AccessRule, error) { // Load access rules to runtime, require rule ID func (c *Controller) GetAccessRuleByID(accessRuleID string) (*AccessRule, error) { if accessRuleID == "default" || accessRuleID == "" { + return c.DefaultAccessRule, nil } //Load from sync.Map, should be O(1) diff --git a/src/mod/dynamicproxy/Server.go b/src/mod/dynamicproxy/Server.go index eb1314f..405d9a1 100644 --- a/src/mod/dynamicproxy/Server.go +++ b/src/mod/dynamicproxy/Server.go @@ -87,7 +87,7 @@ func (h *ProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { return } else if !strings.HasSuffix(proxyingPath, "/") && sep.ProxyType != ProxyType_Root { potentialProxtEndpoint := sep.GetVirtualDirectoryHandlerFromRequestURI(proxyingPath + "/") - if potentialProxtEndpoint != nil && !targetProxyEndpoint.Disabled { + if potentialProxtEndpoint != nil && !potentialProxtEndpoint.Disabled { //Missing tailing slash. Redirect to target proxy endpoint http.Redirect(w, r, r.RequestURI+"/", http.StatusTemporaryRedirect) return diff --git a/src/mod/dynamicproxy/access.go b/src/mod/dynamicproxy/access.go index b9c6857..441d0e5 100644 --- a/src/mod/dynamicproxy/access.go +++ b/src/mod/dynamicproxy/access.go @@ -21,6 +21,7 @@ func (h *ProxyHandler) handleAccessRouting(ruleID string, w http.ResponseWriter, w.Write([]byte("500 - Internal Server Error")) return true } + isBlocked, blockedReason := accessRequestBlocked(accessRule, h.Parent.Option.WebDirectory, w, r) if isBlocked { h.logRequest(r, false, 403, blockedReason, "") diff --git a/src/mod/dynamicproxy/endpoints.go b/src/mod/dynamicproxy/endpoints.go index a0f80fb..d403110 100644 --- a/src/mod/dynamicproxy/endpoints.go +++ b/src/mod/dynamicproxy/endpoints.go @@ -70,7 +70,8 @@ func (ep *ProxyEndpoint) AddUserDefinedHeader(key string, value string) error { func (ep *ProxyEndpoint) GetVirtualDirectoryHandlerFromRequestURI(requestURI string) *VirtualDirectoryEndpoint { for _, vdir := range ep.VirtualDirectories { if strings.HasPrefix(requestURI, vdir.MatchingPath) { - return vdir + thisVdir := vdir + return thisVdir } } return nil @@ -80,7 +81,8 @@ func (ep *ProxyEndpoint) GetVirtualDirectoryHandlerFromRequestURI(requestURI str func (ep *ProxyEndpoint) GetVirtualDirectoryRuleByMatchingPath(matchingPath string) *VirtualDirectoryEndpoint { for _, vdir := range ep.VirtualDirectories { if vdir.MatchingPath == matchingPath { - return vdir + thisVdir := vdir + return thisVdir } } return nil