Merge pull request #376 from TheNain38/patch-1
Enhance Zeroname-local so it works with non-standard rpcport
This commit is contained in:
commit
3128b23b6f
3 changed files with 100 additions and 97 deletions
|
@ -12,57 +12,57 @@ log = logging.getLogger("Zeroname-localPlugin")
|
||||||
|
|
||||||
@PluginManager.registerTo("SiteManager")
|
@PluginManager.registerTo("SiteManager")
|
||||||
class SiteManagerPlugin(object):
|
class SiteManagerPlugin(object):
|
||||||
def load(self):
|
def load(self):
|
||||||
super(SiteManagerPlugin, self).load()
|
super(SiteManagerPlugin, self).load()
|
||||||
|
|
||||||
# Checks if its a valid address
|
# Checks if its a valid address
|
||||||
def isAddress(self, address):
|
def isAddress(self, address):
|
||||||
if self.isDomain(address):
|
if self.isDomain(address):
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return super(SiteManagerPlugin, self).isAddress(address)
|
return super(SiteManagerPlugin, self).isAddress(address)
|
||||||
|
|
||||||
|
|
||||||
# Return: True if the address is domain
|
# Return: True if the address is domain
|
||||||
def isDomain(self, address):
|
def isDomain(self, address):
|
||||||
return re.match("(.*?)([A-Za-z0-9_-]+\.[A-Za-z0-9]+)$", address)
|
return re.match("(.*?)([A-Za-z0-9_-]+\.[A-Za-z0-9]+)$", address)
|
||||||
|
|
||||||
|
|
||||||
# Resolve domain
|
# Resolve domain
|
||||||
# Return: The address or None
|
# Return: The address or None
|
||||||
def resolveDomain(self, domain):
|
def resolveDomain(self, domain):
|
||||||
return lookupDomain(domain)
|
return lookupDomain(domain)
|
||||||
|
|
||||||
|
|
||||||
# Return or create site and start download site files
|
# Return or create site and start download site files
|
||||||
# Return: Site or None if dns resolve failed
|
# Return: Site or None if dns resolve failed
|
||||||
def need(self, address, all_file=True):
|
def need(self, address, all_file=True):
|
||||||
if self.isDomain(address): # Its looks like a domain
|
if self.isDomain(address): # Its looks like a domain
|
||||||
address_resolved = self.resolveDomain(address)
|
address_resolved = self.resolveDomain(address)
|
||||||
if address_resolved:
|
if address_resolved:
|
||||||
address = address_resolved
|
address = address_resolved
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return super(SiteManagerPlugin, self).need(address, all_file)
|
return super(SiteManagerPlugin, self).need(address, all_file)
|
||||||
|
|
||||||
|
|
||||||
# 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.sites == None: # Not loaded yet
|
if self.sites == None: # Not loaded yet
|
||||||
self.load()
|
self.load()
|
||||||
if self.isDomain(address): # Its looks like a domain
|
if self.isDomain(address): # Its looks like a domain
|
||||||
address_resolved = self.resolveDomain(address)
|
address_resolved = self.resolveDomain(address)
|
||||||
if address_resolved: # Domain found
|
if address_resolved: # Domain found
|
||||||
site = self.sites.get(address_resolved)
|
site = self.sites.get(address_resolved)
|
||||||
if site:
|
if site:
|
||||||
site_domain = site.settings.get("domain")
|
site_domain = site.settings.get("domain")
|
||||||
if site_domain != address:
|
if site_domain != address:
|
||||||
site.settings["domain"] = address
|
site.settings["domain"] = address
|
||||||
else: # Domain not found
|
else: # Domain not found
|
||||||
site = self.sites.get(address)
|
site = self.sites.get(address)
|
||||||
|
|
||||||
else: # Access by site address
|
else: # Access by site address
|
||||||
site = self.sites.get(address)
|
site = self.sites.get(address)
|
||||||
return site
|
return site
|
||||||
|
|
||||||
|
|
|
@ -3,38 +3,38 @@ from Plugin import PluginManager
|
||||||
|
|
||||||
@PluginManager.registerTo("UiRequest")
|
@PluginManager.registerTo("UiRequest")
|
||||||
class UiRequestPlugin(object):
|
class UiRequestPlugin(object):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
from Site import SiteManager
|
from Site import SiteManager
|
||||||
self.site_manager = SiteManager.site_manager
|
self.site_manager = SiteManager.site_manager
|
||||||
super(UiRequestPlugin, self).__init__(*args, **kwargs)
|
super(UiRequestPlugin, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
# Media request
|
# Media request
|
||||||
def actionSiteMedia(self, path):
|
def actionSiteMedia(self, path):
|
||||||
match = re.match("/media/(?P<address>[A-Za-z0-9]+\.[A-Za-z0-9\.]+)(?P<inner_path>/.*|$)", path)
|
match = re.match("/media/(?P<address>[A-Za-z0-9]+\.[A-Za-z0-9\.]+)(?P<inner_path>/.*|$)", path)
|
||||||
if match: # Its a valid domain, resolve first
|
if match: # Its a valid domain, resolve first
|
||||||
domain = match.group("address")
|
domain = match.group("address")
|
||||||
address = self.site_manager.resolveDomain(domain)
|
address = self.site_manager.resolveDomain(domain)
|
||||||
if address:
|
if address:
|
||||||
path = "/media/"+address+match.group("inner_path")
|
path = "/media/"+address+match.group("inner_path")
|
||||||
return super(UiRequestPlugin, self).actionSiteMedia(path) # Get the wrapper frame output
|
return super(UiRequestPlugin, self).actionSiteMedia(path) # Get the wrapper frame output
|
||||||
|
|
||||||
|
|
||||||
# Is mediarequest allowed from that referer
|
# Is mediarequest allowed from that referer
|
||||||
def isMediaRequestAllowed(self, site_address, referer):
|
def isMediaRequestAllowed(self, site_address, referer):
|
||||||
referer_path = re.sub("http[s]{0,1}://.*?/", "/", referer).replace("/media", "") # Remove site address
|
referer_path = re.sub("http[s]{0,1}://.*?/", "/", referer).replace("/media", "") # Remove site address
|
||||||
referer_path = re.sub("\?.*", "", referer_path) # Remove http params
|
referer_path = re.sub("\?.*", "", referer_path) # Remove http params
|
||||||
|
|
||||||
if self.isProxyRequest(): # Match to site domain
|
if self.isProxyRequest(): # Match to site domain
|
||||||
referer = re.sub("^http://zero[/]+", "http://", referer) # Allow /zero access
|
referer = re.sub("^http://zero[/]+", "http://", referer) # Allow /zero access
|
||||||
referer_site_address = re.match("http[s]{0,1}://(.*?)(/|$)", referer).group(1)
|
referer_site_address = re.match("http[s]{0,1}://(.*?)(/|$)", referer).group(1)
|
||||||
else: # Match to request path
|
else: # Match to request path
|
||||||
referer_site_address = re.match("/(?P<address>[A-Za-z0-9\.]+)(?P<inner_path>/.*|$)", referer_path).group("address")
|
referer_site_address = re.match("/(?P<address>[A-Za-z0-9\.]+)(?P<inner_path>/.*|$)", referer_path).group("address")
|
||||||
|
|
||||||
if referer_site_address == site_address: # Referer site address as simple address
|
if referer_site_address == site_address: # Referer site address as simple address
|
||||||
return True
|
return True
|
||||||
elif self.site_manager.resolveDomain(referer_site_address) == site_address: # Referer site address as dns
|
elif self.site_manager.resolveDomain(referer_site_address) == site_address: # Referer site address as dns
|
||||||
return True
|
return True
|
||||||
else: # Invalid referer
|
else: # Invalid referer
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
|
@ -1,37 +1,37 @@
|
||||||
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
|
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
|
||||||
import time, json, os, sys, re, socket, json
|
import time, json, os, sys, re, socket
|
||||||
|
|
||||||
# Either returns domain's address or none if it doesn't exist
|
# Either returns domain's address or none if it doesn't exist
|
||||||
# Supports subdomains and .bit on the end
|
# Supports subdomains and .bit on the end
|
||||||
def lookupDomain(domain):
|
def lookupDomain(domain):
|
||||||
domain = domain.lower()
|
domain = domain.lower()
|
||||||
|
|
||||||
#remove .bit on end
|
#remove .bit on end
|
||||||
if domain[-4:] == ".bit":
|
if domain[-4:] == ".bit":
|
||||||
domain = domain[0:-4]
|
domain = domain[0:-4]
|
||||||
|
|
||||||
#check for subdomain
|
#check for subdomain
|
||||||
if domain.find(".") != -1:
|
if domain.find(".") != -1:
|
||||||
subdomain = domain[0:domain.find(".")]
|
subdomain = domain[0:domain.find(".")]
|
||||||
domain = domain[domain.find(".")+1:]
|
domain = domain[domain.find(".")+1:]
|
||||||
else:
|
else:
|
||||||
subdomain = ""
|
subdomain = ""
|
||||||
|
|
||||||
try:
|
try:
|
||||||
domain_object = rpc.name_show("d/"+domain)
|
domain_object = rpc.name_show("d/"+domain)
|
||||||
except:
|
except:
|
||||||
#domain doesn't exist
|
#domain doesn't exist
|
||||||
return None
|
return None
|
||||||
|
|
||||||
domain_json = json.loads(domain_object['value'])
|
domain_json = json.loads(domain_object["value"])
|
||||||
|
|
||||||
try:
|
try:
|
||||||
domain_address = domain_json["zeronet"][subdomain]
|
domain_address = domain_json["zeronet"][subdomain]
|
||||||
except:
|
except:
|
||||||
#domain exists but doesn't have any zeronet value
|
#domain exists but doesn't have any zeronet value
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return domain_address
|
return domain_address
|
||||||
|
|
||||||
# Loading config...
|
# Loading config...
|
||||||
|
|
||||||
|
@ -47,8 +47,11 @@ else:
|
||||||
namecoin_conf = open(namecoin_location + "namecoin.conf").read()
|
namecoin_conf = open(namecoin_location + "namecoin.conf").read()
|
||||||
|
|
||||||
# Connecting to RPC
|
# Connecting to RPC
|
||||||
rpc_user = re.search("rpcuser=(.*)$", namecoin_conf, re.M).group(1)
|
rpc_user = re.search(r"^\s*rpcuser\s*=(\S+)\s*(?:#.*)?$", namecoin_conf, re.M).group(1)
|
||||||
rpc_pass = re.search("rpcpassword=(.*)$", namecoin_conf, re.M).group(1)
|
rpc_pass = re.search(r"^\s*rpcpassword\s*=(\S+)\s*(?:#.*)?$", namecoin_conf, re.M).group(1)
|
||||||
rpc_url = "http://%s:%s@127.0.0.1:8336" % (rpc_user, rpc_pass)
|
rpc_port = re.search(r"^\s*rpcport\s*=(\d{1,5})\s*(?:#.*)?$", namecoin_conf, re.M)
|
||||||
|
rpc_port = rpc_port.group(1) if rpc_port is not None else "8336"
|
||||||
|
|
||||||
|
rpc_url = "http://%s:%s@127.0.0.1:%s" % (rpc_user, rpc_pass, rpc_port)
|
||||||
|
|
||||||
rpc = AuthServiceProxy(rpc_url, timeout=60*5)
|
rpc = AuthServiceProxy(rpc_url, timeout=60*5)
|
||||||
|
|
Loading…
Reference in a new issue