X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-web.git/blobdiff_plain/b812ecb815635726dca92b6c3725ac0a4bb86ab6..9d93e8953885dee5fdd5cc11249bbf0faf5e65cc:/code/main.py
diff --git a/code/main.py b/code/main.py
index 3fe04d5..e5fdfa9 100755
--- a/code/main.py
+++ b/code/main.py
@@ -11,6 +11,7 @@ import sha
import simplejson
import sys
import time
+import urllib
from StringIO import StringIO
def revertStandardError():
@@ -39,6 +40,7 @@ from Cheetah.Template import Template
import sipb_xen_database
from sipb_xen_database import Machine, CDROM, ctx, connect, MachineAccess, Type, Autoinstall
import validation
+import cache_acls
from webcommon import InvalidInput, CodeError, g
import controls
@@ -57,12 +59,15 @@ class Checkpoint:
checkpoint = Checkpoint()
+def jquote(string):
+ return "'" + string.replace('\\', '\\\\').replace("'", "\\'").replace('\n', '\\n') + "'"
def helppopup(subj):
"""Return HTML code for a (?) link to a specified help topic"""
- return ('(?)')
+ return ('(?)')
def makeErrorPre(old, addition):
if addition is None:
@@ -100,8 +105,9 @@ class Defaults:
cdrom = ''
autoinstall = ''
name = ''
+ type = 'linux-hvm'
+
def __init__(self, max_memory=None, max_disk=None, **kws):
- self.type = Type.get('linux-hvm')
if max_memory is not None:
self.memory = min(self.memory, max_memory)
if max_disk is not None:
@@ -286,7 +292,7 @@ def getHostname(nic):
if nic.hostname and '.' in nic.hostname:
return nic.hostname
elif nic.machine:
- return nic.machine.name + '.servers.csail.mit.edu'
+ return nic.machine.name + '.xvm.mit.edu'
else:
return None
@@ -394,16 +400,21 @@ def modifyDict(user, fields):
disk.size = disksize
ctx.current.save(disk)
- if owner is not None:
+ update_acl = False
+ if owner is not None and owner != machine.owner:
machine.owner = owner
+ update_acl = True
if name is not None:
machine.name = name
- if admin is not None:
+ if admin is not None and admin != machine.administrator:
machine.administrator = admin
+ update_acl = True
if contact is not None:
machine.contact = contact
ctx.current.save(machine)
+ if update_acl:
+ cache_acls.refreshMachine(machine)
transaction.commit()
except:
transaction.rollback()
@@ -566,8 +577,9 @@ def infoDict(user, machine):
checkpoint.checkpoint('Got mem')
max_disk = validation.maxDisk(user, machine)
defaults = Defaults()
- for name in 'machine_id name administrator owner memory contact type'.split():
+ for name in 'machine_id name administrator owner memory contact'.split():
setattr(defaults, name, getattr(machine, name))
+ defaults.type = machine.type.type_id
defaults.disk = "%0.2f" % (machine.disks[0].size/1024.)
checkpoint.checkpoint('Got defaults')
d = dict(user=user,
@@ -590,13 +602,18 @@ def info(user, fields):
checkpoint.checkpoint('Got infodict')
return templates.info(searchList=[d])
+def unauthFront(_, fields):
+ """Information for unauth'd users."""
+ return templates.unauth(searchList=[{'simple' : True}])
+
mapping = dict(list=listVms,
vnc=vnc,
command=command,
modify=modify,
info=info,
create=create,
- help=helpHandler)
+ help=helpHandler,
+ unauth=unauthFront)
def printHeaders(headers):
"""Print a dictionary as HTTP headers."""
@@ -607,8 +624,10 @@ def printHeaders(headers):
def getUser():
"""Return the current user based on the SSL environment variables"""
- username = os.environ['SSL_CLIENT_S_DN_Email'].split("@")[0]
- return username
+ email = os.environ.get('SSL_CLIENT_S_DN_Email', None)
+ if email is None:
+ return None
+ return email.split("@")[0]
def main(operation, user, fields):
start_time = time.time()
@@ -664,6 +683,9 @@ if __name__ == '__main__':
print 'Location: ' + os.environ['SCRIPT_NAME']+'/\n'
sys.exit(0)
+ if u is None:
+ operation = 'unauth'
+
if operation.startswith('/'):
operation = operation[1:]
if not operation: