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