Metadata-Version: 2.1
Name: aiohttp-cookauth
Version: 0.1.1
Summary: authorization via cookies for aiohttp.web
Home-page: https://github.com/GenyaSol/aiohttp-cookauth/
Author: Evgeny Solomatin
Author-email: solgenya@gmail.com
License: Apache 2
Description: aiohttp_cookauth
        ================
        .. image:: https://img.shields.io/pypi/v/aiohttp-cookauth.svg
            :target: https://pypi.python.org/pypi/aiohttp-cookauth
        
        The library is a fork of `aiohttp_session`__ and `aiohttp_security`__. The fork provides identity and authorization for `aiohttp.web`__ only via cookies using redis storage.
        
        .. _aiohttp_web: http://aiohttp.readthedocs.org/en/latest/web.html
        
        __ aiohttp_web_
        
        .. _aiohttp_session: https://github.com/aio-libs/aiohttp-session
        
        __ aiohttp_session_
        
        .. _aiohttp_security: https://github.com/aio-libs/aiohttp-security
        
        __ aiohttp_session_
        
        
        Features
        ____________
        
         - added the ability to forget all user sessions using forget_all function
         - check_permission function return userid now
        
        Installation
        ------------
        ::
        
            $ pip install aiohttp_cookauth
        
        Example
        --------
        ::
        
         from aiohttp import web
         from aioredis import create_redis_pool
         from aiohttp_cookauth import check_permission, \
             is_anonymous, remember, forget, \
             setup as setup_cookauth, RedisStorage, forget_all
         from aiohttp_cookauth.abc import AbstractAuthorizationPolicy
        
        
         # Demo authorization policy for only one user.
         # User 'jack' has only 'listen' permission.
         class SimpleJack_AuthorizationPolicy(AbstractAuthorizationPolicy):
             async def authorized_userid(self, identity):
                 """Retrieve authorized user id.
                 Return the user_id of the user identified by the identity
                 or 'None' if no user exists related to the identity.
                 """
                 if identity == 'jack':
                     return identity
        
             async def permits(self, identity, permission, context=None):
                 """Check user permissions.
                 Return True if the identity is allowed the permission
                 in the current context, else return False.
                 """
                 return identity == 'jack' and permission in ('listen',)
        
        
         async def handler_root(request):
             is_logged = not await is_anonymous(request)
             return web.Response(text='''<html><head></head><body>
                     Hello, I'm Jack, I'm {logged} logged in.<br /><br />
                     <a href="/login">Log me in</a><br />
                     <a href="/logout">Log me out</a><br />
                     <a href="/logout/all">Log out for all</a><br /><br />
                     Check my permissions,
                     when i'm logged in and logged out.<br />
                     <a href="/listen">Can I listen?</a><br />
                     <a href="/speak">Can I speak?</a><br />
                 </body></html>'''.format(
                     logged='' if is_logged else 'NOT',
                 ), content_type='text/html')
        
        
         async def handler_login_jack(request):
             redirect_response = web.HTTPFound('/')
             await remember(request, redirect_response, 'jack')
             return redirect_response
        
        
         async def handler_logout(request):
             redirect_response = web.HTTPFound('/')
             await forget(request, redirect_response)
             return redirect_response
        
        
         async def handler_logout_all(request):
             redirect_response = web.HTTPFound('/')
             await forget_all(request, identity='jack')
             return redirect_response
        
        
         async def handler_listen(request):
             await check_permission(request, 'listen')
             return web.Response(body="I can listen!")
        
        
         async def handler_speak(request):
             await check_permission(request, 'speak')
             return web.Response(body="I can speak!")
        
        
         async def make_app():
             # make app
             app = web.Application()
        
             # add the routes
             app.add_routes([
                 web.get('/', handler_root),
                 web.get('/login', handler_login_jack),
                 web.get('/logout', handler_logout),
                 web.get('/logout/all', handler_logout_all),
                 web.get('/listen', handler_listen),
                 web.get('/speak', handler_speak)])
        
             # set up policies
             redis = await create_redis_pool(('localhost', 6379))
             storage = RedisStorage(redis, cookie_name='MY_SESSION', max_age=900)
             setup_cookauth(app, SimpleJack_AuthorizationPolicy(), storage)
        
             return app
        
        
         if __name__ == '__main__':
             web.run_app(make_app(), port=9000)
        
        Documentation
        -------------
        Use aiohttp_security documentation:
        
        https://aiohttp-security.readthedocs.io/
        
        
        License
        -------
        
        ``aiohttp_cookauth`` is offered under the Apache 2 license.
Platform: UNKNOWN
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Framework :: AsyncIO
Provides-Extra: aioredis
