Rev399, Urandom and Msgpack benchmark, Better random string generation, Never render page on OPTIONS request, Fix for Chrome browser socket hang on zeronet version update
This commit is contained in:
parent
5c72030373
commit
8f63e4c421
9 changed files with 79 additions and 25 deletions
File diff suppressed because one or more lines are too long
|
@ -8,7 +8,7 @@ class Config(object):
|
|||
|
||||
def __init__(self, argv):
|
||||
self.version = "0.3.2"
|
||||
self.rev = 396
|
||||
self.rev = 399
|
||||
self.argv = argv
|
||||
self.action = None
|
||||
self.createParser()
|
||||
|
|
|
@ -13,6 +13,7 @@ from Debug import Debug
|
|||
from Connection import Connection
|
||||
from Config import config
|
||||
from Crypt import CryptConnection
|
||||
from Crypt import CryptHash
|
||||
|
||||
|
||||
class ConnectionServer:
|
||||
|
@ -36,10 +37,7 @@ class ConnectionServer:
|
|||
self.bytes_sent = 0
|
||||
|
||||
# Bittorrent style peerid
|
||||
self.peer_id = "-ZN0%s-%s" % (
|
||||
config.version.replace(".", ""),
|
||||
''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(12))
|
||||
)
|
||||
self.peer_id = "-ZN0%s-%s" % (config.version.replace(".", ""), CryptHash.random(12, "base64"))
|
||||
|
||||
# Check msgpack version
|
||||
if msgpack.version[0] == 0 and msgpack.version[1] < 4:
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
import hashlib
|
||||
import os
|
||||
import base64
|
||||
|
||||
|
||||
def sha1sum(file, blocksize=65536):
|
||||
|
@ -19,6 +21,15 @@ def sha512sum(file, blocksize=65536):
|
|||
return hash.hexdigest()[0:64] # Truncate to 256bits is good enough
|
||||
|
||||
|
||||
def random(length=64, encoding="hex"):
|
||||
if encoding == "base64": # Characters: A-Za-z0-9
|
||||
hash = hashlib.sha512(os.urandom(256)).digest()
|
||||
return base64.standard_b64encode(hash).replace("+", "").replace("/", "").replace("=", "")[0:length]
|
||||
else: # Characters: a-f0-9 (faster)
|
||||
return hashlib.sha512(os.urandom(256)).hexdigest()[0:length]
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import cStringIO as StringIO
|
||||
a = StringIO.StringIO()
|
||||
|
|
|
@ -24,6 +24,7 @@ from Worker import WorkerManager
|
|||
from Debug import Debug
|
||||
from Content import ContentManager
|
||||
from SiteStorage import SiteStorage
|
||||
from Crypt import CryptHash
|
||||
import SiteManager
|
||||
|
||||
|
||||
|
@ -50,16 +51,12 @@ class Site:
|
|||
self.content_manager = ContentManager(self) # Load contents
|
||||
|
||||
if not self.settings.get("auth_key"): # To auth user in site (Obsolete, will be removed)
|
||||
self.settings["auth_key"] = ''.join(
|
||||
random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(24)
|
||||
)
|
||||
self.settings["auth_key"] = CryptHash.random()
|
||||
self.log.debug("New auth key: %s" % self.settings["auth_key"])
|
||||
self.saveSettings()
|
||||
|
||||
if not self.settings.get("wrapper_key"): # To auth websocket permissions
|
||||
self.settings["wrapper_key"] = ''.join(
|
||||
random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(12)
|
||||
)
|
||||
self.settings["wrapper_key"] = CryptHash.random()
|
||||
self.log.debug("New wrapper key: %s" % self.settings["wrapper_key"])
|
||||
self.saveSettings()
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ from Site import SiteManager
|
|||
from User import UserManager
|
||||
from Plugin import PluginManager
|
||||
from Ui.UiWebsocket import UiWebsocket
|
||||
from Crypt import CryptHash
|
||||
|
||||
status_texts = {
|
||||
200: "200 OK",
|
||||
|
@ -48,6 +49,10 @@ class UiRequest(object):
|
|||
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 self.env["REQUEST_METHOD"] == "OPTIONS":
|
||||
self.sendHeader()
|
||||
return ""
|
||||
|
||||
if path == "/":
|
||||
return self.actionIndex()
|
||||
elif path.endswith("favicon.ico"):
|
||||
|
@ -265,9 +270,7 @@ class UiRequest(object):
|
|||
|
||||
# Create a new wrapper nonce that allows to get one html file without the wrapper
|
||||
def getWrapperNonce(self):
|
||||
wrapper_nonce = ''.join(
|
||||
random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(24)
|
||||
)
|
||||
wrapper_nonce = CryptHash.random()
|
||||
self.server.wrapper_nonces.append(wrapper_nonce)
|
||||
return wrapper_nonce
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import logging
|
||||
import time
|
||||
import cgi
|
||||
import socket
|
||||
|
||||
from gevent.pywsgi import WSGIServer
|
||||
from gevent.pywsgi import WSGIHandler
|
||||
|
@ -22,7 +23,6 @@ class UiWSGIHandler(WSGIHandler):
|
|||
self.kwargs = kwargs
|
||||
|
||||
def run_application(self):
|
||||
self.server.sockets[self.client_address] = self.socket
|
||||
if "HTTP_UPGRADE" in self.environ: # Websocket request
|
||||
try:
|
||||
ws_handler = WebSocketHandler(*self.args, **self.kwargs)
|
||||
|
@ -32,20 +32,21 @@ class UiWSGIHandler(WSGIHandler):
|
|||
logging.error("UiWSGIHandler websocket error: %s" % Debug.formatException(err))
|
||||
if config.debug: # Allow websocket errors to appear on /Debug
|
||||
import sys
|
||||
del self.server.sockets[self.client_address]
|
||||
sys.modules["main"].DebugHook.handleError()
|
||||
else: # Standard HTTP request
|
||||
# print self.application.__class__.__name__
|
||||
try:
|
||||
super(UiWSGIHandler, self).run_application()
|
||||
except Exception, err:
|
||||
logging.error("UiWSGIHandler error: %s" % Debug.formatException(err))
|
||||
if config.debug: # Allow websocket errors to appear on /Debug
|
||||
import sys
|
||||
del self.server.sockets[self.client_address]
|
||||
sys.modules["main"].DebugHook.handleError()
|
||||
if self.client_address in self.server.sockets:
|
||||
del self.server.sockets[self.client_address]
|
||||
|
||||
def handle(self):
|
||||
# Save socket to be able to close them properly on exit
|
||||
self.server.sockets[self.client_address] = self.socket
|
||||
super(UiWSGIHandler, self).handle()
|
||||
del self.server.sockets[self.client_address]
|
||||
|
||||
|
||||
class UiServer:
|
||||
|
@ -131,12 +132,15 @@ class UiServer:
|
|||
sock_closed = 0
|
||||
for sock in self.server.sockets.values():
|
||||
try:
|
||||
sock._sock.close()
|
||||
sock.close()
|
||||
sock.send("bye")
|
||||
sock.shutdown(socket.SHUT_RDWR)
|
||||
#sock._sock.close()
|
||||
#sock.close()
|
||||
sock_closed += 1
|
||||
except Exception:
|
||||
pass
|
||||
except Exception, err:
|
||||
self.log.debug("Http connection close error: %s" % err)
|
||||
self.log.debug("Socket closed: %s" % sock_closed)
|
||||
time.sleep(0.1)
|
||||
|
||||
self.server.socket.close()
|
||||
self.server.stop()
|
||||
|
|
|
@ -10,6 +10,7 @@ a { color: black }
|
|||
.button { padding: 5px 10px; margin-left: 10px; background-color: #FFF85F; border-bottom: 2px solid #CDBD1E; border-radius: 2px; text-decoration: none; transition: all 0.5s; background-position: left center; }
|
||||
.button:hover { background-color: #FFF400; border-bottom: 2px solid #4D4D4C; transition: none }
|
||||
.button:active { position: relative; top: 1px }
|
||||
.button:focus { outline: none }
|
||||
|
||||
.button-Delete { background-color: #e74c3c; border-bottom-color: #c0392b; color: white }
|
||||
.button-Delete:hover { background-color: #FF5442; border-bottom-color: #8E2B21 }
|
||||
|
|
|
@ -15,6 +15,7 @@ a { color: black }
|
|||
.button { padding: 5px 10px; margin-left: 10px; background-color: #FFF85F; border-bottom: 2px solid #CDBD1E; -webkit-border-radius: 2px; -moz-border-radius: 2px; -o-border-radius: 2px; -ms-border-radius: 2px; border-radius: 2px ; text-decoration: none; -webkit-transition: all 0.5s; -moz-transition: all 0.5s; -o-transition: all 0.5s; -ms-transition: all 0.5s; transition: all 0.5s ; background-position: left center; }
|
||||
.button:hover { background-color: #FFF400; border-bottom: 2px solid #4D4D4C; -webkit-transition: none ; -moz-transition: none ; -o-transition: none ; -ms-transition: none ; transition: none }
|
||||
.button:active { position: relative; top: 1px }
|
||||
.button:focus { outline: none }
|
||||
|
||||
.button-Delete { background-color: #e74c3c; border-bottom-color: #c0392b; color: white }
|
||||
.button-Delete:hover { background-color: #FF5442; border-bottom-color: #8E2B21 }
|
||||
|
|
Loading…
Reference in a new issue