Cached isDomain / resolveDomain functions
This commit is contained in:
parent
9dd5c88da4
commit
924a61309a
3 changed files with 24 additions and 9 deletions
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue