more progress

This commit is contained in:
Anthony Young
2011-03-23 02:33:11 -07:00
parent e2f085eae8
commit 5cdf8f63fb
3 changed files with 43 additions and 17 deletions

View File

@@ -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()

View File

@@ -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)

View File

@@ -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)