Implement administrator mode
[invirt/packages/invirt-web.git] / code / main.py
index 473647f..5de084e 100755 (executable)
@@ -55,6 +55,15 @@ class InvirtWeb(View):
         self._cp_config['tools.mako.imports'] = ['from invirt.config import structs as config',
                                                  'from invirt import database']
 
+    def __getattr__(self, name):
+        if name in ("admin", "overlord"):
+            if not cherrypy.request.login in getAfsGroupMembers(config.adminacl, config.authz[0].cell):
+                raise InvalidInput('username', cherrypy.request.login,
+                                   'Not in admin group %s.' % config.adminacl)
+            cherrypy.request.state = State(cherrypy.request.login, isadmin=True)
+            return self
+        else:
+            return super(InvirtWeb, self).__getattr__(name)
 
     @cherrypy.expose
     @cherrypy.tools.mako(filename="/list.mako")
@@ -645,23 +654,9 @@ def unauthFront(_, _2, _3, fields):
     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.adminacl, 'athena.mit.edu'):
-        raise InvalidInput('username', username,
-                           'Not in admin group %s.' % config.adminacl)
-    newstate = State(username, isadmin=True)
-    newstate.environ = state.environ
-    return handler(username, newstate, path, fields)
-
 mapping = dict(
                modify=modify,
-               unauth=unauthFront,
-               admin=admin,
-               overlord=admin)
+               unauth=unauthFront)
 
 def printHeaders(headers):
     """Print a dictionary as HTTP headers."""