X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/58904eee1ea5f0316a76967bd87a8110be5a0a4c..263010ff23d21486b8f5029cfd8c9bee9a04f3f8:/code/main.py?ds=inline diff --git a/code/main.py b/code/main.py index 5de5f9a..c3db122 100755 --- a/code/main.py +++ b/code/main.py @@ -13,8 +13,8 @@ import sys import time import urllib import socket +import cherrypy from StringIO import StringIO - def revertStandardError(): """Move stderr to stdout, and return the contents of the old stderr.""" errio = sys.stderr @@ -45,6 +45,31 @@ from invirt.database import Machine, CDROM, session, connect, MachineAccess, Typ from invirt.config import structs as config from invirt.common import InvalidInput, CodeError +from view import View + +class InvirtWeb(View): + def __init__(self): + super(self.__class__,self).__init__() + connect() + self._cp_config['tools.require_login.on'] = True + + @cherrypy.expose + @cherrypy.tools.mako(filename="/list.mako") + def list(self, username): + """Handler for list requests.""" + checkpoint.checkpoint('Getting list dict') + d = getListDict(username, state) + checkpoint.checkpoint('Got list dict') + return d + index=list + + @cherrypy.expose + @cherrypy.tools.mako(filename="/helloworld.mako") + def helloworld(self): + return {} + return "Hello world!\nYour request: "+repr(dir(cherrypy.request)) + helloworld._cp_config['tools.require_login.on'] = False + def pathSplit(path): if path.startswith('/'): path = path[1:] @@ -151,7 +176,7 @@ def parseCreate(username, state, fields): kws = dict([(kw, fields.getfirst(kw)) for kw in 'name description owner memory disksize vmtype cdrom autoinstall'.split()]) validate = validation.Validate(username, state, strict=True, **kws) return dict(contact=username, name=validate.name, description=validate.description, memory=validate.memory, - disksize=validate.disksize, owner=validate.owner, machine_type=validate.vmtype, + disksize=validate.disksize, owner=validate.owner, machine_type=getattr(validate, 'vmtype', Defaults.type), cdrom=getattr(validate, 'cdrom', None), autoinstall=getattr(validate, 'autoinstall', None)) @@ -217,13 +242,6 @@ def getListDict(username, state): can_clone=can_clone) return d -def listVms(username, state, path, fields): - """Handler for list requests.""" - checkpoint.checkpoint('Getting list dict') - d = getListDict(username, state) - checkpoint.checkpoint('Got list dict') - return templates.list(searchList=[d]) - def vnc(username, state, path, fields): """VNC applet page. @@ -615,9 +633,9 @@ def admin(username, state, path, fields): return ({'Status': '303 See Other', 'Location': 'admin/'}, "You shouldn't see this message.") - if not username in getAfsGroupMembers(config.web.adminacl, 'athena.mit.edu'): + if not username in getAfsGroupMembers(config.adminacl, 'athena.mit.edu'): raise InvalidInput('username', username, - 'Not in admin group %s.' % config.web.adminacl) + 'Not in admin group %s.' % config.adminacl) newstate = State(username, isadmin=True) newstate.environ = state.environ return handler(username, newstate, path, fields) @@ -626,7 +644,7 @@ def throwError(_, __, ___, ____): """Throw an error, to test the error-tracing mechanisms.""" raise RuntimeError("test of the emergency broadcast system") -mapping = dict(list=listVms, +mapping = dict(#list=listVms, vnc=vnc, command=command, modify=modify,