summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnthony Young <sleepsonthefloor@gmail.com>2011-03-23 02:33:11 -0700
committerAnthony Young <sleepsonthefloor@gmail.com>2011-03-23 02:33:11 -0700
commit5cdf8f63fb2dbccea0152d17f00bf80352f8fa1a (patch)
tree4d83693f3c6747711da5d4532c24e7d6c0e818f0
parente2f085eae874012784e53416f6e6213dcfde4859 (diff)
downloadnova-5cdf8f63fb2dbccea0152d17f00bf80352f8fa1a.tar.gz
nova-5cdf8f63fb2dbccea0152d17f00bf80352f8fa1a.tar.xz
nova-5cdf8f63fb2dbccea0152d17f00bf80352f8fa1a.zip
more progress
-rwxr-xr-xbin/nova-vnc-proxy14
-rw-r--r--nova/vnc/auth.py35
-rw-r--r--nova/vnc/proxy.py11
3 files changed, 43 insertions, 17 deletions
diff --git a/bin/nova-vnc-proxy b/bin/nova-vnc-proxy
index 5891652c4..838c871d0 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 2596bdd24..9b30b08b8 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 5dc83fcb1..354c2405f 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)