iro/controller/user.py
branchdevel
changeset 92 f479738b4879
child 93 ee10253258ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/iro/controller/user.py	Thu Dec 22 03:13:34 2011 +0100
@@ -0,0 +1,55 @@
+import logging
+import re
+
+from .database import WithSession
+from model import User
+
+from error import UserNotFound, InterfaceException, ValidateException
+
+
+
+def rehash(hash):
+    if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
+        raise ValidateException()
+    return True
+
+def validate(**kargs):
+    def v(f):
+        def new_f(*a,**k):
+            for i in kargs:
+                kargs[i](k[i])
+            return f(*a,**k)
+        new_f.__name__ = f.__name__
+        return new_f
+    return v
+            
+
+@validate(userhash=rehash)
+def getuser(userhash):
+    with WithSession() as session:
+        user = session.query(User).filter_by(apikey=userhash).first()
+        if user is None:
+            raise UserNotFound()
+        else:
+            return user
+
+def with_user(f):
+    def new_f(*args,**kargs):
+        args=list(args)
+        logging.debug("Entering %s"%f.__name__)
+        try:
+            kargs["user"]=getuser(userhash = kargs["apikey"])
+            del kargs["apikey"]
+        except KeyError:
+            try:
+                kargs["user"]=getuser(userhash = args[1])
+            except IndexError:
+                raise InterfaceException() 
+            del args[1]
+        ret=f(*args,**kargs)
+        logging.debug("Exited %s"%f.__name__)
+        return ret
+    new_f.__name__ = f.__name__
+    return new_f
+
+