|
|
|
@ -1,10 +1,19 @@
|
|
|
|
|
# -*- encoding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
import socket
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
from urllib import quote
|
|
|
|
|
except ImportError:
|
|
|
|
|
from urllib.parse import quote
|
|
|
|
|
|
|
|
|
|
from socketserver import ThreadingMixIn
|
|
|
|
|
from http.server import HTTPServer
|
|
|
|
|
except ImportError:
|
|
|
|
|
from urllib import quote
|
|
|
|
|
|
|
|
|
|
from SocketServer import ThreadingMixIn
|
|
|
|
|
from BaseHTTPServer import HTTPServer
|
|
|
|
|
|
|
|
|
|
from werkzeug.serving import WSGIRequestHandler
|
|
|
|
|
from werkzeug.datastructures import Headers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -23,10 +32,10 @@ def host(environ):
|
|
|
|
|
|
|
|
|
|
if environ['wsgi.url_scheme'] == 'https':
|
|
|
|
|
if environ['SERVER_PORT'] != '443':
|
|
|
|
|
url += ':' + environ['SERVER_PORT']
|
|
|
|
|
url += ':' + environ['SERVER_PORT']
|
|
|
|
|
else:
|
|
|
|
|
if environ['SERVER_PORT'] != '80':
|
|
|
|
|
url += ':' + environ['SERVER_PORT']
|
|
|
|
|
url += ':' + environ['SERVER_PORT']
|
|
|
|
|
|
|
|
|
|
return url + quote(environ.get('SCRIPT_NAME', ''))
|
|
|
|
|
|
|
|
|
@ -49,6 +58,7 @@ class SubURI(object):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CORSMiddleware(object):
|
|
|
|
|
"""Add Cross-origin resource sharing headers to every request."""
|
|
|
|
|
|
|
|
|
|
def __init__(self, app, origin):
|
|
|
|
|
self.app = app
|
|
|
|
@ -70,3 +80,30 @@ class CORSMiddleware(object):
|
|
|
|
|
return ['200 Ok']
|
|
|
|
|
|
|
|
|
|
return self.app(environ, add_cors_headers)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SocketWSGIRequestHandler(WSGIRequestHandler):
|
|
|
|
|
|
|
|
|
|
def run_wsgi(self):
|
|
|
|
|
self.client_address = ("<local>", 0)
|
|
|
|
|
super(SocketWSGIRequestHandler, self).run_wsgi()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SocketHTTPServer(HTTPServer, ThreadingMixIn):
|
|
|
|
|
"""
|
|
|
|
|
A simple SocketServer to serve werkzeug's WSGIRequesthandler.
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
multithread = True
|
|
|
|
|
multiprocess = False
|
|
|
|
|
|
|
|
|
|
allow_reuse_address = 1
|
|
|
|
|
address_family = socket.AF_UNIX
|
|
|
|
|
|
|
|
|
|
request_queue_size = 128
|
|
|
|
|
|
|
|
|
|
def __init__(self, sock, app):
|
|
|
|
|
HTTPServer.__init__(self, sock, SocketWSGIRequestHandler)
|
|
|
|
|
self.app = app
|
|
|
|
|
self.ssl_context = None
|
|
|
|
|
self.shutdown_signal = False
|
|
|
|
|