diff -r 191c2c1d6e53 -r f479738b4879 iro/controller/user.py --- /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 + +