Cached isDomain / resolveDomain functions

This commit is contained in:
shortcutme 2019-10-06 03:18:14 +02:00
parent 9dd5c88da4
commit 924a61309a
No known key found for this signature in database
GPG Key ID: 5B63BAE6CB9613AE
3 changed files with 24 additions and 9 deletions

View File

@ -198,8 +198,8 @@ class UiRequestPlugin(object):
if self.server.site_manager.get(address): # Site already exists if self.server.site_manager.get(address): # Site already exists
return super(UiRequestPlugin, self).actionWrapper(path, extra_headers) return super(UiRequestPlugin, self).actionWrapper(path, extra_headers)
if self.server.site_manager.isDomain(address): if self.isDomain(address):
address = self.server.site_manager.resolveDomain(address) address = self.resolveDomain(address)
if address: if address:
address_sha256 = "0x" + hashlib.sha256(address.encode("utf8")).hexdigest() address_sha256 = "0x" + hashlib.sha256(address.encode("utf8")).hexdigest()

View File

@ -12,6 +12,7 @@ from Content import ContentDb
from Config import config from Config import config
from util import helper from util import helper
from util import RateLimit from util import RateLimit
from util import Cached
@PluginManager.acceptPlugins @PluginManager.acceptPlugins
@ -135,13 +136,21 @@ class SiteManager(object):
def isDomain(self, address): def isDomain(self, address):
return False return False
@Cached(timeout=10)
def isDomainCached(self, address):
return self.isDomain(address)
def resolveDomain(self, domain): def resolveDomain(self, domain):
return False return False
@Cached(timeout=10)
def resolveDomainCached(self, domain):
return self.resolveDomain(domain)
# Return: Site object or None if not found # Return: Site object or None if not found
def get(self, address): def get(self, address):
if self.isDomain(address): if self.isDomainCached(address):
address_resolved = self.resolveDomain(address) address_resolved = self.resolveDomainCached(address)
if address_resolved: if address_resolved:
address = address_resolved address = address_resolved
@ -175,8 +184,8 @@ class SiteManager(object):
# Return or create site and start download site files # Return or create site and start download site files
def need(self, address, all_file=True, settings=None): def need(self, address, all_file=True, settings=None):
if self.isDomain(address): if self.isDomainCached(address):
address_resolved = self.resolveDomain(address) address_resolved = self.resolveDomainCached(address)
if address_resolved: if address_resolved:
address = address_resolved address = address_resolved

View File

@ -69,13 +69,19 @@ class UiRequest(object):
return True return True
if self.isProxyRequest(): # Support for chrome extension proxy if self.isProxyRequest(): # Support for chrome extension proxy
if self.server.site_manager.isDomain(host): if self.isDomain(host):
return True return True
else: else:
return False return False
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 # Call the request handler function base on path
def route(self, path): def route(self, path):
# Restict Ui access by ip # Restict Ui access by ip
@ -96,7 +102,7 @@ class UiRequest(object):
return iter([ret_error, ret_link]) return iter([ret_error, ret_link])
# Prepend .bit host for transparent proxy # 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("^/", "/" + self.env.get("HTTP_HOST") + "/", path)
path = re.sub("^http://zero[/]+", "/", path) # Remove begining http://zero/ for chrome extension 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 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 # The request is proxied by chrome extension or a transparent proxy
def isProxyRequest(self): 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): def isWebSocketRequest(self):
return self.env.get("HTTP_UPGRADE") == "websocket" return self.env.get("HTTP_UPGRADE") == "websocket"