iro/controller/user.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 22 Dec 2011 03:13:34 +0100
branchdevel
changeset 92 f479738b4879
child 93 ee10253258ad
permissions -rw-r--r--
umbau zu MVC
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
92
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
import logging
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
import re
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
from .database import WithSession
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
from model import User
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
from error import UserNotFound, InterfaceException, ValidateException
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
def rehash(hash):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
    if not re.match(r'^[a-f0-9]{15,}$', hash.lower()):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
        raise ValidateException()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
    return True
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
def validate(**kargs):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
    def v(f):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
        def new_f(*a,**k):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    19
            for i in kargs:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
                kargs[i](k[i])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    21
            return f(*a,**k)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    22
        new_f.__name__ = f.__name__
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
        return new_f
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
    return v
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    25
            
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
@validate(userhash=rehash)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
def getuser(userhash):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
    with WithSession() as session:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
        user = session.query(User).filter_by(apikey=userhash).first()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
        if user is None:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    32
            raise UserNotFound()
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    33
        else:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    34
            return user
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    35
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    36
def with_user(f):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    37
    def new_f(*args,**kargs):
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    38
        args=list(args)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    39
        logging.debug("Entering %s"%f.__name__)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    40
        try:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    41
            kargs["user"]=getuser(userhash = kargs["apikey"])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    42
            del kargs["apikey"]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    43
        except KeyError:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    44
            try:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    45
                kargs["user"]=getuser(userhash = args[1])
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    46
            except IndexError:
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    47
                raise InterfaceException() 
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    48
            del args[1]
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    49
        ret=f(*args,**kargs)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    50
        logging.debug("Exited %s"%f.__name__)
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    51
        return ret
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    52
    new_f.__name__ = f.__name__
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    53
    return new_f
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    54
f479738b4879 umbau zu MVC
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    55