--- /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
+
+