Skip to content

Commit

Permalink
Cached isDomain / resolveDomain functions
Browse files Browse the repository at this point in the history
  • Loading branch information
shortcutme committed Oct 6, 2019
1 parent 9dd5c88 commit 924a613
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
4 changes: 2 additions & 2 deletions plugins/ContentFilter/ContentFilterPlugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,8 @@ def actionWrapper(self, path, extra_headers=None):
if self.server.site_manager.get(address): # Site already exists
return super(UiRequestPlugin, self).actionWrapper(path, extra_headers)

if self.server.site_manager.isDomain(address):
address = self.server.site_manager.resolveDomain(address)
if self.isDomain(address):
address = self.resolveDomain(address)

if address:
address_sha256 = "0x" + hashlib.sha256(address.encode("utf8")).hexdigest()
Expand Down
17 changes: 13 additions & 4 deletions src/Site/SiteManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from Config import config
from util import helper
from util import RateLimit
from util import Cached


@PluginManager.acceptPlugins
Expand Down Expand Up @@ -135,13 +136,21 @@ def isAddress(self, address):
def isDomain(self, address):
return False

@Cached(timeout=10)
def isDomainCached(self, address):
return self.isDomain(address)

def resolveDomain(self, domain):
return False

@Cached(timeout=10)
def resolveDomainCached(self, domain):
return self.resolveDomain(domain)

# Return: Site object or None if not found
def get(self, address):
if self.isDomain(address):
address_resolved = self.resolveDomain(address)
if self.isDomainCached(address):
address_resolved = self.resolveDomainCached(address)
if address_resolved:
address = address_resolved

Expand Down Expand Up @@ -175,8 +184,8 @@ def add(self, address, all_file=False, settings=None):

# Return or create site and start download site files
def need(self, address, all_file=True, settings=None):
if self.isDomain(address):
address_resolved = self.resolveDomain(address)
if self.isDomainCached(address):
address_resolved = self.resolveDomainCached(address)
if address_resolved:
address = address_resolved

Expand Down
12 changes: 9 additions & 3 deletions src/Ui/UiRequest.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,13 +69,19 @@ def isHostAllowed(self, host):
return True

if self.isProxyRequest(): # Support for chrome extension proxy
if self.server.site_manager.isDomain(host):
if self.isDomain(host):
return True
else:
return False

return False

def isDomain(self, address):
return self.server.site_manager.isDomainCached(address)

def resolveDomain(self, domain):
return self.server.site_manager.resolveDomainCached(domain)

# Call the request handler function base on path
def route(self, path):
# Restict Ui access by ip
Expand All @@ -96,7 +102,7 @@ def route(self, path):
return iter([ret_error, ret_link])

# Prepend .bit host for transparent proxy
if self.server.site_manager.isDomain(self.env.get("HTTP_HOST")):
if self.isDomain(self.env.get("HTTP_HOST")):
path = re.sub("^/", "/" + self.env.get("HTTP_HOST") + "/", path)
path = re.sub("^http://zero[/]+", "/", path) # Remove begining http://zero/ for chrome extension
path = re.sub("^http://", "/", path) # Remove begining http for chrome extension .bit access
Expand Down Expand Up @@ -173,7 +179,7 @@ def route(self, path):

# The request is proxied by chrome extension or a transparent proxy
def isProxyRequest(self):
return self.env["PATH_INFO"].startswith("http://") or (self.server.allow_trans_proxy and self.server.site_manager.isDomain(self.env.get("HTTP_HOST")))
return self.env["PATH_INFO"].startswith("http://") or (self.server.allow_trans_proxy and self.isDomain(self.env.get("HTTP_HOST")))

def isWebSocketRequest(self):
return self.env.get("HTTP_UPGRADE") == "websocket"
Expand Down

0 comments on commit 924a613

Please sign in to comment.