more progress
This commit is contained in:
@@ -37,9 +37,12 @@ from nova import flags
|
|||||||
from nova import log as logging
|
from nova import log as logging
|
||||||
from nova import utils
|
from nova import utils
|
||||||
from nova import wsgi
|
from nova import wsgi
|
||||||
|
from nova import version
|
||||||
from nova.vnc import auth
|
from nova.vnc import auth
|
||||||
from nova.vnc import proxy
|
from nova.vnc import proxy
|
||||||
|
|
||||||
|
LOG = logging.getLogger('nova.vnc-proxy')
|
||||||
|
|
||||||
FLAGS = flags.FLAGS
|
FLAGS = flags.FLAGS
|
||||||
flags.DEFINE_string('vnc_proxy_wwwroot', '/code/noVNC/vnclet/noVNC',
|
flags.DEFINE_string('vnc_proxy_wwwroot', '/code/noVNC/vnclet/noVNC',
|
||||||
'Full path to noVNC directory')
|
'Full path to noVNC directory')
|
||||||
@@ -58,13 +61,18 @@ if __name__ == "__main__":
|
|||||||
FLAGS(sys.argv)
|
FLAGS(sys.argv)
|
||||||
logging.setup()
|
logging.setup()
|
||||||
|
|
||||||
|
LOG.audit(_("Starting nova-vnc-proxy node (version %s)"),
|
||||||
|
version.version_string_with_vcs())
|
||||||
|
|
||||||
app = proxy.WebsocketVNCProxy(FLAGS.vnc_proxy_wwwroot)
|
app = proxy.WebsocketVNCProxy(FLAGS.vnc_proxy_wwwroot)
|
||||||
|
|
||||||
|
with_logging = auth.LoggingMiddleware(app)
|
||||||
|
|
||||||
if FLAGS.vnc_debug:
|
if FLAGS.vnc_debug:
|
||||||
app = proxy.DebugMiddleware(app)
|
with_auth = proxy.DebugMiddleware(with_logging)
|
||||||
else:
|
else:
|
||||||
app = auth.NovaAuthMiddleware(app)
|
with_auth = auth.NovaAuthMiddleware(with_logging)
|
||||||
|
|
||||||
server = wsgi.Server()
|
server = wsgi.Server()
|
||||||
server.start(app, FLAGS.vnc_proxy_port, host=FLAGS.vnc_proxy_host)
|
server.start(with_auth, FLAGS.vnc_proxy_port, host=FLAGS.vnc_proxy_host)
|
||||||
server.wait()
|
server.wait()
|
||||||
|
|||||||
@@ -27,6 +27,10 @@ from nova import log as logging
|
|||||||
from nova import rpc
|
from nova import rpc
|
||||||
from nova import utils
|
from nova import utils
|
||||||
from nova import wsgi
|
from nova import wsgi
|
||||||
|
import webob
|
||||||
|
|
||||||
|
LOG = logging.getLogger('nova.vnc-proxy')
|
||||||
|
FLAGS = flags.FLAGS
|
||||||
|
|
||||||
|
|
||||||
class NovaAuthMiddleware(object):
|
class NovaAuthMiddleware(object):
|
||||||
@@ -36,9 +40,8 @@ class NovaAuthMiddleware(object):
|
|||||||
self.app = app
|
self.app = app
|
||||||
self.register_listeners()
|
self.register_listeners()
|
||||||
|
|
||||||
def __call__(self, environ, start_response):
|
@webob.dec.wsgify
|
||||||
req = Request(environ)
|
def __call__(self, req):
|
||||||
|
|
||||||
if req.path == '/data':
|
if req.path == '/data':
|
||||||
token = req.params.get('token')
|
token = req.params.get('token')
|
||||||
if not token in self.tokens:
|
if not token in self.tokens:
|
||||||
@@ -46,11 +49,10 @@ class NovaAuthMiddleware(object):
|
|||||||
[('content-type', 'text/html')])
|
[('content-type', 'text/html')])
|
||||||
return 'Not Authorized'
|
return 'Not Authorized'
|
||||||
|
|
||||||
environ['vnc_host'] = self.tokens[token]['args']['host']
|
req.environ['vnc_host'] = self.tokens[token]['args']['host']
|
||||||
environ['vnc_port'] = int(self.tokens[token]['args']['port'])
|
req.environ['vnc_port'] = int(self.tokens[token]['args']['port'])
|
||||||
|
|
||||||
resp = req.get_response(self.app)
|
return req.get_response(self.app)
|
||||||
return resp(environ, start_response)
|
|
||||||
|
|
||||||
def register_listeners(self):
|
def register_listeners(self):
|
||||||
middleware = self
|
middleware = self
|
||||||
@@ -59,7 +61,9 @@ class NovaAuthMiddleware(object):
|
|||||||
class Callback:
|
class Callback:
|
||||||
def __call__(self, data, message):
|
def __call__(self, data, message):
|
||||||
if data['method'] == 'authorize_vnc_console':
|
if data['method'] == 'authorize_vnc_console':
|
||||||
middleware.tokens[data['args']['token']] = \
|
token = data['args']['token']
|
||||||
|
LOG.info(_("Received Token: %s)"), token)
|
||||||
|
middleware.tokens[token] = \
|
||||||
{'args': data['args'], 'last_activity_at': time.time()}
|
{'args': data['args'], 'last_activity_at': time.time()}
|
||||||
|
|
||||||
def delete_expired_tokens():
|
def delete_expired_tokens():
|
||||||
@@ -81,3 +85,18 @@ class NovaAuthMiddleware(object):
|
|||||||
utils.LoopingCall(consumer.fetch, auto_ack=True,
|
utils.LoopingCall(consumer.fetch, auto_ack=True,
|
||||||
enable_callbacks=True).start(0.1)
|
enable_callbacks=True).start(0.1)
|
||||||
utils.LoopingCall(delete_expired_tokens).start(1)
|
utils.LoopingCall(delete_expired_tokens).start(1)
|
||||||
|
|
||||||
|
|
||||||
|
class LoggingMiddleware(object):
|
||||||
|
def __init__(self, app):
|
||||||
|
self.app = app
|
||||||
|
|
||||||
|
@webob.dec.wsgify
|
||||||
|
def __call__(self, req):
|
||||||
|
|
||||||
|
if req.path == '/data':
|
||||||
|
LOG.info(_("Received Websocket Request: %s)"), req.url)
|
||||||
|
else:
|
||||||
|
LOG.info(_("Received Request: %s)"), req.url)
|
||||||
|
|
||||||
|
return req.get_response(self.app)
|
||||||
|
|||||||
@@ -102,10 +102,9 @@ class DebugMiddleware(object):
|
|||||||
def __init__(self, app):
|
def __init__(self, app):
|
||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
def __call__(self, environ, start_response):
|
@webob.dec.wsgify
|
||||||
req = Request(environ)
|
def __call__(self, req):
|
||||||
if req.path == '/data':
|
if req.path == '/data':
|
||||||
environ['vnc_host'] = req.params.get('host')
|
req.environ['vnc_host'] = req.params.get('host')
|
||||||
environ['vnc_port'] = int(req.params.get('port'))
|
req.environ['vnc_port'] = int(req.params.get('port'))
|
||||||
resp = req.get_response(self.app)
|
return req.get_response(self.app)
|
||||||
return resp(environ, start_response)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user