diff --git a/aiohttp_security/__init__.py b/aiohttp_security/__init__.py index 27b7367..dc1bab8 100644 --- a/aiohttp_security/__init__.py +++ b/aiohttp_security/__init__.py @@ -1,5 +1,5 @@ from .abc import AbstractIdentityPolicy, AbstractAuthorizationPolicy -from .api import remember, forget, setup, authorized_userid, permits +from .api import remember, forget, setup, authorize, permits from .cookies_identity import CookiesIdentityPolicy from .session_identity import SessionIdentityPolicy @@ -9,5 +9,4 @@ __version__ = '0.1.0' __all__ = ('AbstractIdentityPolicy', 'AbstractAuthorizationPolicy', 'CookiesIdentityPolicy', 'SessionIdentityPolicy', - 'remember', 'forget', 'authorized_userid', - 'permits', 'setup') + 'remember', 'forget', 'authorize', 'permits', 'setup') diff --git a/aiohttp_security/api.py b/aiohttp_security/api.py index 30d87be..d1c5051 100644 --- a/aiohttp_security/api.py +++ b/aiohttp_security/api.py @@ -8,20 +8,23 @@ IDENTITY_KEY = 'aiohttp_security_identity_policy' AUTZ_KEY = 'aiohttp_security_autz_policy' -def authorize(required=True): +def authorize(required=True, redirect_url=None, permission=None): def wrapper(f): @asyncio.coroutine @functools.wraps(f) - def wrapped(**kwargs): - assert 'request' in kwargs + def wrapped(*args, **kwargs): + # assuming first argument is request + assert isinstance(args[0], web.Request) + request = args[0] if asyncio.iscoroutinefunction(f): coro = f else: coro = asyncio.coroutine(f) - identity = yield from get_user_identity(kwargs['request']) - if not identity and not required: + identity = yield from get_user_identity(request) + if not identity and required: raise web.HTTPForbidden() - return (yield from coro(identity=identity, **kwargs)) + kwargs['identity'] = identity + return (yield from coro(*args, **kwargs)) return wrapped return wrapper @@ -74,7 +77,6 @@ def get_user_identity(request): return None identity = yield from identity_policy.identify(request) return identity -authorized_userid method in AbstractAuthorizationPolicy required? ''' @asyncio.coroutine