|
92
|
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 |
|