equal
deleted
inserted
replaced
|
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 |