rev110, Support for 127.0.0.1:43110-less Chrome plugin, Namecoin updater ignores invalid characters in address, Every site's favicon.ico leads to main favicon to prevent 404 request when using chrome extension, Detect chrome extension proxy requests, Use wrapper=False instead of /media, 404errormessage fix

This commit is contained in:
HelloZeroNet 2015-04-20 02:56:33 +02:00
parent ab87f5a7f1
commit 8d5a72f0b5
9 changed files with 59 additions and 22 deletions

View file

@ -35,8 +35,8 @@ Decentralized websites using Bitcoin crypto and the BitTorrent network
* Namecoin .bit domains support * Namecoin .bit domains support
* Easy to setup: unpack & run * Easy to setup: unpack & run
* Password-less [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) * Password-less [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
based authorization: Your account is protected by same cryptography as your bitcoin wallet based authorization: Your account is protected by same cryptography as your Bitcoin wallet
* SQL Database support: Allows easier site development and faster page load times * Built-in SQL server with P2P data synchronization: Allows easier site development and faster page load times
* Tor network support * Tor network support
* Automatic, uPnP port opening * Automatic, uPnP port opening
* Plugin for multiuser (openproxy) support * Plugin for multiuser (openproxy) support

View file

@ -53,6 +53,7 @@ class UiRequestPlugin(object):
# Memory # Memory
try: try:
yield "rev%s | " % config.rev
yield "IP external: %s | " % config.ip_external yield "IP external: %s | " % config.ip_external
yield "Opened: %s | " % main.file_server.port_opened yield "Opened: %s | " % main.file_server.port_opened
yield "Recv: %.2fMB, Sent: %.2fMB | " % (float(main.file_server.bytes_recv)/1024/1024, float(main.file_server.bytes_sent)/1024/1024) yield "Recv: %.2fMB, Sent: %.2fMB | " % (float(main.file_server.bytes_recv)/1024/1024, float(main.file_server.bytes_sent)/1024/1024)

View file

@ -23,8 +23,14 @@ class UiRequestPlugin(object):
# 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 html params referer_path = re.sub("\?.*", "", referer_path) # Remove http params
referer_site_address = re.match("/(?P<address>[A-Za-z0-9\.]+)(?P<inner_path>/.*|$)", referer_path).group("address")
if self.isProxyRequest(): # Match to site domain
referer = re.sub("^http://zero[/]+", "http://", referer) # Allow /zero access
print referer
referer_site_address = re.match("http[s]{0,1}://(.*?)(/|$)", referer).group(1)
else: # Match to request path
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

View file

@ -31,6 +31,7 @@ def processNameOp(domain, value):
names_raw = open(names_path, "rb").read() names_raw = open(names_path, "rb").read()
names = json.loads(names_raw) names = json.loads(names_raw)
for subdomain, address in data["zeronet"].items(): for subdomain, address in data["zeronet"].items():
address = re.sub("[^A-Za-z0-9]", "", address)
print subdomain, domain, "->", address print subdomain, domain, "->", address
if subdomain: if subdomain:
names["%s.%s.bit" % (subdomain, domain)] = address names["%s.%s.bit" % (subdomain, domain)] = address
@ -99,7 +100,8 @@ print "Processing block from #%s to #%s..." % (config["lastprocessed"], last_blo
for block_id in range(config["lastprocessed"], last_block+1): for block_id in range(config["lastprocessed"], last_block+1):
processBlock(block_id) processBlock(block_id)
# processBlock(223911) # Testing # processBlock(223911) # Testing zeronetwork.bit
# processBlock(227052) # Testing brainwallets.bit
while 1: while 1:
print "Waiting for new block", print "Waiting for new block",

View file

@ -4,7 +4,7 @@ import ConfigParser
class Config(object): class Config(object):
def __init__(self): def __init__(self):
self.version = "0.2.9" self.version = "0.2.9"
self.rev = 107 self.rev = 110
self.parser = self.createArguments() self.parser = self.createArguments()
argv = sys.argv[:] # Copy command line arguments argv = sys.argv[:] # Copy command line arguments
argv = self.parseConfig(argv) # Add arguments from config file argv = self.parseConfig(argv) # Add arguments from config file

View file

@ -31,9 +31,12 @@ class UiRequest(object):
if config.ui_restrict and self.env['REMOTE_ADDR'] not in config.ui_restrict: # Restict Ui access by ip if config.ui_restrict and self.env['REMOTE_ADDR'] not in config.ui_restrict: # Restict Ui access by ip
return self.error403() return self.error403()
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
if path == "/": if path == "/":
return self.actionIndex() return self.actionIndex()
elif path == "/favicon.ico": elif path.endswith("favicon.ico"):
return self.actionFile("src/Ui/media/img/favicon.ico") return self.actionFile("src/Ui/media/img/favicon.ico")
# Media # Media
elif path.startswith("/uimedia/"): elif path.startswith("/uimedia/"):
@ -61,6 +64,11 @@ class UiRequest(object):
return self.error404(path) return self.error404(path)
# The request is proxied by chrome extension
def isProxyRequest(self):
return self.env["PATH_INFO"].startswith("http://")
# Get mime by filename # Get mime by filename
def getContentType(self, file_name): def getContentType(self, file_name):
content_type = mimetypes.guess_type(file_name)[0] content_type = mimetypes.guess_type(file_name)[0]
@ -137,7 +145,11 @@ class UiRequest(object):
if "." in inner_path and not inner_path.endswith(".html"): return self.actionSiteMedia("/media"+path) # Only serve html files with frame if "." in inner_path and not inner_path.endswith(".html"): return self.actionSiteMedia("/media"+path) # Only serve html files with frame
if self.env.get("HTTP_X_REQUESTED_WITH"): return self.error403("Ajax request not allowed to load wrapper") # No ajax allowed on wrapper if self.env.get("HTTP_X_REQUESTED_WITH"): return self.error403("Ajax request not allowed to load wrapper") # No ajax allowed on wrapper
if not inner_path: inner_path = "index.html" # If inner path defaults to index.html file_inner_path = inner_path
if not file_inner_path: file_inner_path = "index.html" # If inner path defaults to index.html
if not inner_path and not path.endswith("/"): inner_path = address+"/" # Fix relative resources loading if missing / end of site address
inner_path = re.sub(".*/(.+)", "\\1", inner_path) # Load innerframe relative to current url
site = SiteManager.site_manager.get(address) site = SiteManager.site_manager.get(address)
@ -158,7 +170,16 @@ class UiRequest(object):
body_style = "" body_style = ""
meta_tags = "" meta_tags = ""
if self.env.get("QUERY_STRING"): query_string = "?"+self.env["QUERY_STRING"] if self.env.get("QUERY_STRING"): query_string = "?"+self.env["QUERY_STRING"]+"&wrapper=False"
else: query_string = "?wrapper=False"
if self.isProxyRequest(): # Its a remote proxy request
server_url = "http://%s:%s" % (self.env["SERVER_NAME"], self.env["SERVER_PORT"])
homepage = "http://zero/"+config.homepage
else: # Use relative path
server_url = ""
homepage = "/"+config.homepage
if site.content_manager.contents.get("content.json") : # Got content.json if site.content_manager.contents.get("content.json") : # Got content.json
content = site.content_manager.contents["content.json"] content = site.content_manager.contents["content.json"]
if content.get("background-color"): if content.get("background-color"):
@ -167,6 +188,7 @@ class UiRequest(object):
meta_tags += '<meta name="viewport" id="viewport" content="%s">' % cgi.escape(content["viewport"], True) meta_tags += '<meta name="viewport" id="viewport" content="%s">' % cgi.escape(content["viewport"], True)
return self.render("src/Ui/template/wrapper.html", return self.render("src/Ui/template/wrapper.html",
server_url=server_url,
inner_path=inner_path, inner_path=inner_path,
address=address, address=address,
title=title, title=title,
@ -175,8 +197,8 @@ class UiRequest(object):
query_string=query_string, query_string=query_string,
wrapper_key=site.settings["wrapper_key"], wrapper_key=site.settings["wrapper_key"],
permissions=json.dumps(site.settings["permissions"]), permissions=json.dumps(site.settings["permissions"]),
show_loadingscreen=json.dumps(not site.storage.isFile(inner_path)), show_loadingscreen=json.dumps(not site.storage.isFile(file_inner_path)),
homepage=config.homepage homepage=homepage
) )
else: # Bad url else: # Bad url
@ -192,6 +214,7 @@ class UiRequest(object):
# Serve a media for site # Serve a media for site
def actionSiteMedia(self, path): def actionSiteMedia(self, path):
path = path.replace("/index.html/", "/") # Base Backward compatibility fix path = path.replace("/index.html/", "/") # Base Backward compatibility fix
if path.endswith("/"): path = path+"index.html"
match = re.match("/media/(?P<address>[A-Za-z0-9\._-]+)/(?P<inner_path>.*)", path) match = re.match("/media/(?P<address>[A-Za-z0-9\._-]+)/(?P<inner_path>.*)", path)
@ -225,8 +248,6 @@ class UiRequest(object):
else: else:
self.log.debug("File not found: %s" % match.group("inner_path")) self.log.debug("File not found: %s" % match.group("inner_path"))
return self.error404(match.group("inner_path")) return self.error404(match.group("inner_path"))
#self.sendHeader(404)
#return "Not found"
else: # Bad url else: # Bad url
return self.error404(path) return self.error404(path)
@ -351,7 +372,7 @@ class UiRequest(object):
# Send file not found error # Send file not found error
def error404(self, path = None): def error404(self, path = None):
self.sendHeader(404) self.sendHeader(404)
return "Not Found: %s" % path return "Not Found: %s" % path.encode("utf8")
# Internal server error # Internal server error

View file

@ -313,5 +313,8 @@ class Wrapper
console.log "[Wrapper]", args... console.log "[Wrapper]", args...
ws_url = "ws://#{window.location.hostname}:#{window.location.port}/Websocket?wrapper_key=#{window.wrapper_key}" if window.server_url
ws_url = "ws://#{window.server_url.replace('http://', '')}/Websocket?wrapper_key=#{window.wrapper_key}"
else
ws_url = "ws://#{window.location.hostname}:#{window.location.port}/Websocket?wrapper_key=#{window.wrapper_key}"
window.wrapper = new Wrapper(ws_url) window.wrapper = new Wrapper(ws_url)

View file

@ -737,7 +737,6 @@ jQuery.extend( jQuery.easing,
}).call(this); }).call(this);
/* ---- src/Ui/media/Wrapper.coffee ---- */ /* ---- src/Ui/media/Wrapper.coffee ---- */
@ -1165,7 +1164,11 @@ jQuery.extend( jQuery.easing,
})(); })();
ws_url = "ws://" + window.location.hostname + ":" + window.location.port + "/Websocket?wrapper_key=" + window.wrapper_key; if (window.server_url) {
ws_url = "ws://" + (window.server_url.replace('http://', '')) + "/Websocket?wrapper_key=" + window.wrapper_key;
} else {
ws_url = "ws://" + window.location.hostname + ":" + window.location.port + "/Websocket?wrapper_key=" + window.wrapper_key;
}
window.wrapper = new Wrapper(ws_url); window.wrapper = new Wrapper(ws_url);

View file

@ -6,7 +6,7 @@
<title>{title} - ZeroNet</title> <title>{title} - ZeroNet</title>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="/uimedia/all.css" /> <link rel="stylesheet" href="{server_url}/uimedia/all.css" />
{meta_tags} {meta_tags}
</head> </head>
<body style="{body_style}"> <body style="{body_style}">
@ -19,7 +19,7 @@
<div class='fixbutton'> <div class='fixbutton'>
<div class='fixbutton-text'>0</div> <div class='fixbutton-text'>0</div>
<div class='fixbutton-burger'>&#x2261;</div> <div class='fixbutton-burger'>&#x2261;</div>
<a class='fixbutton-bg' href="/{homepage}"></a> <a class='fixbutton-bg' href="{homepage}"></a>
</div> </div>
@ -40,7 +40,7 @@
<!-- Site Iframe --> <!-- Site Iframe -->
<iframe src='/media/{address}/{inner_path}{query_string}' id='inner-iframe' sandbox="allow-forms allow-scripts allow-top-navigation"></iframe> <iframe src='{inner_path}{query_string}' id='inner-iframe' sandbox="allow-forms allow-scripts allow-top-navigation"></iframe>
<!-- Site info --> <!-- Site info -->
<script>address = "{address}"</script> <script>address = "{address}"</script>
@ -48,7 +48,8 @@
<script>inner_path = "{inner_path}"</script> <script>inner_path = "{inner_path}"</script>
<script>permissions = {permissions}</script> <script>permissions = {permissions}</script>
<script>show_loadingscreen = {show_loadingscreen}</script> <script>show_loadingscreen = {show_loadingscreen}</script>
<script type="text/javascript" src="/uimedia/all.js" asyc></script> <script>server_url = '{server_url}'</script>
<script type="text/javascript" src="{server_url}/uimedia/all.js" asyc></script>
</body> </body>
</html> </html>