diff --git a/plugins/ContentFilter/ContentFilterPlugin.py b/plugins/ContentFilter/ContentFilterPlugin.py index da1054b1..4d5d1b4c 100644 --- a/plugins/ContentFilter/ContentFilterPlugin.py +++ b/plugins/ContentFilter/ContentFilterPlugin.py @@ -198,8 +198,8 @@ class UiRequestPlugin(object): 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() diff --git a/src/Site/SiteManager.py b/src/Site/SiteManager.py index 2de98dce..9c33d8b7 100644 --- a/src/Site/SiteManager.py +++ b/src/Site/SiteManager.py @@ -12,6 +12,7 @@ from Content import ContentDb from Config import config from util import helper from util import RateLimit +from util import Cached @PluginManager.acceptPlugins @@ -135,13 +136,21 @@ class SiteManager(object): 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 @@ -175,8 +184,8 @@ class SiteManager(object): # 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 diff --git a/src/Ui/UiRequest.py b/src/Ui/UiRequest.py index 9f14882e..2aa87af2 100644 --- a/src/Ui/UiRequest.py +++ b/src/Ui/UiRequest.py @@ -69,13 +69,19 @@ class UiRequest(object): 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 @@ -96,7 +102,7 @@ class UiRequest(object): 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 @@ -173,7 +179,7 @@ class UiRequest(object): # 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"