iro/controller/user.py
branchdevel
changeset 92 f479738b4879
child 93 ee10253258ad
equal deleted inserted replaced
91:191c2c1d6e53 92:f479738b4879
       
     1 import logging
       
     2 import re
       
     3 
       
     4 from .database import WithSession
       
     5 from model import User
       
     6 
       
     7 from error import UserNotFound, InterfaceException, ValidateException
       
     8 
       
     9 
       
    10 
       
    11 def rehash(hash):
       
    12     if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
       
    13         raise ValidateException()
       
    14     return True
       
    15 
       
    16 def validate(**kargs):
       
    17     def v(f):
       
    18         def new_f(*a,**k):
       
    19             for i in kargs:
       
    20                 kargs[i](k[i])
       
    21             return f(*a,**k)
       
    22         new_f.__name__ = f.__name__
       
    23         return new_f
       
    24     return v
       
    25             
       
    26 
       
    27 @validate(userhash=rehash)
       
    28 def getuser(userhash):
       
    29     with WithSession() as session:
       
    30         user = session.query(User).filter_by(apikey=userhash).first()
       
    31         if user is None:
       
    32             raise UserNotFound()
       
    33         else:
       
    34             return user
       
    35 
       
    36 def with_user(f):
       
    37     def new_f(*args,**kargs):
       
    38         args=list(args)
       
    39         logging.debug("Entering %s"%f.__name__)
       
    40         try:
       
    41             kargs["user"]=getuser(userhash = kargs["apikey"])
       
    42             del kargs["apikey"]
       
    43         except KeyError:
       
    44             try:
       
    45                 kargs["user"]=getuser(userhash = args[1])
       
    46             except IndexError:
       
    47                 raise InterfaceException() 
       
    48             del args[1]
       
    49         ret=f(*args,**kargs)
       
    50         logging.debug("Exited %s"%f.__name__)
       
    51         return ret
       
    52     new_f.__name__ = f.__name__
       
    53     return new_f
       
    54 
       
    55