From 5cdf8f63fb2dbccea0152d17f00bf80352f8fa1a Mon Sep 17 00:00:00 2001 From: Anthony Young Date: Wed, 23 Mar 2011 02:33:11 -0700 Subject: [PATCH] more progress --- bin/nova-vnc-proxy | 14 +++++++++++--- nova/vnc/auth.py | 35 +++++++++++++++++++++++++++-------- nova/vnc/proxy.py | 11 +++++------ 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/bin/nova-vnc-proxy b/bin/nova-vnc-proxy index 5891652c451d..838c871d0bf1 100755 --- a/bin/nova-vnc-proxy +++ b/bin/nova-vnc-proxy @@ -37,9 +37,12 @@ from nova import flags from nova import log as logging from nova import utils from nova import wsgi +from nova import version from nova.vnc import auth from nova.vnc import proxy +LOG = logging.getLogger('nova.vnc-proxy') + FLAGS = flags.FLAGS flags.DEFINE_string('vnc_proxy_wwwroot', '/code/noVNC/vnclet/noVNC', 'Full path to noVNC directory') @@ -58,13 +61,18 @@ if __name__ == "__main__": FLAGS(sys.argv) logging.setup() + LOG.audit(_("Starting nova-vnc-proxy node (version %s)"), + version.version_string_with_vcs()) + app = proxy.WebsocketVNCProxy(FLAGS.vnc_proxy_wwwroot) + with_logging = auth.LoggingMiddleware(app) + if FLAGS.vnc_debug: - app = proxy.DebugMiddleware(app) + with_auth = proxy.DebugMiddleware(with_logging) else: - app = auth.NovaAuthMiddleware(app) + with_auth = auth.NovaAuthMiddleware(with_logging) 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() diff --git a/nova/vnc/auth.py b/nova/vnc/auth.py index 2596bdd24ed6..9b30b08b81aa 100644 --- a/nova/vnc/auth.py +++ b/nova/vnc/auth.py @@ -27,6 +27,10 @@ from nova import log as logging from nova import rpc from nova import utils from nova import wsgi +import webob + +LOG = logging.getLogger('nova.vnc-proxy') +FLAGS = flags.FLAGS class NovaAuthMiddleware(object): @@ -36,9 +40,8 @@ class NovaAuthMiddleware(object): self.app = app self.register_listeners() - def __call__(self, environ, start_response): - req = Request(environ) - + @webob.dec.wsgify + def __call__(self, req): if req.path == '/data': token = req.params.get('token') if not token in self.tokens: @@ -46,11 +49,10 @@ class NovaAuthMiddleware(object): [('content-type', 'text/html')]) return 'Not Authorized' - environ['vnc_host'] = self.tokens[token]['args']['host'] - environ['vnc_port'] = int(self.tokens[token]['args']['port']) + req.environ['vnc_host'] = self.tokens[token]['args']['host'] + req.environ['vnc_port'] = int(self.tokens[token]['args']['port']) - resp = req.get_response(self.app) - return resp(environ, start_response) + return req.get_response(self.app) def register_listeners(self): middleware = self @@ -59,7 +61,9 @@ class NovaAuthMiddleware(object): class Callback: def __call__(self, data, message): 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()} def delete_expired_tokens(): @@ -81,3 +85,18 @@ class NovaAuthMiddleware(object): utils.LoopingCall(consumer.fetch, auto_ack=True, enable_callbacks=True).start(0.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) diff --git a/nova/vnc/proxy.py b/nova/vnc/proxy.py index 5dc83fcb19c6..354c2405fae4 100644 --- a/nova/vnc/proxy.py +++ b/nova/vnc/proxy.py @@ -102,10 +102,9 @@ class DebugMiddleware(object): def __init__(self, app): self.app = app - def __call__(self, environ, start_response): - req = Request(environ) + @webob.dec.wsgify + def __call__(self, req): if req.path == '/data': - environ['vnc_host'] = req.params.get('host') - environ['vnc_port'] = int(req.params.get('port')) - resp = req.get_response(self.app) - return resp(environ, start_response) + req.environ['vnc_host'] = req.params.get('host') + req.environ['vnc_port'] = int(req.params.get('port')) + return req.get_response(self.app)