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

View File

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

View File

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