X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/c4247c60920b72ab783f2c2f70167508ad1f7e1c..263010ff23d21486b8f5029cfd8c9bee9a04f3f8:/code/main.py
diff --git a/code/main.py b/code/main.py
index 438144a..c3db122 100755
--- a/code/main.py
+++ b/code/main.py
@@ -12,8 +12,9 @@ import simplejson
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
@@ -44,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:]
@@ -150,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))
@@ -216,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.
@@ -479,7 +498,7 @@ power on and off the machine. This can be either a user or a moira
group.""",
'Quotas': """
Quotas are determined on a per-locker basis. Each locker may have a
-maximum of 512 megabytes of active ram, 50 gigabytes of disk, and 4
+maximum of 512 mebibytes of active ram, 50 gibibytes of disk, and 4
active machines.""",
'Console': """
Framebuffer: At a Linux boot prompt in your VM, try
@@ -488,7 +507,7 @@ your machine will run just fine, but the applet's display of the
console will suffer artifacts.
""",
'Windows': """
-Windows Vista: The Vista image is licensed for all MIT students and will automatically activate off the network; see the licensing confirmation e-mail for details. The installer req uires 512 MB RAM and at least 7.5 GB disk space (15 GB or more recommended).
+Windows Vista: The Vista image is licensed for all MIT students and will automatically activate off the network; see the licensing confirmation e-mail for details. The installer requires 512 MiB RAM and at least 7.5 GiB disk space (15 GiB or more recommended).
Windows XP: This is the volume license CD image. You will need your own volume license key to complete the install. We do not have these available for the general MIT community; ask your department if they have one.
"""
}
@@ -606,16 +625,17 @@ def info(username, state, path, fields):
def unauthFront(_, _2, _3, fields):
"""Information for unauth'd users."""
- return templates.unauth(searchList=[{'simple' : True}])
+ return templates.unauth(searchList=[{'simple' : True,
+ 'hostname' : socket.getfqdn()}])
def admin(username, state, path, fields):
if path == '':
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)
@@ -624,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,