Metadata-Version: 2.0
Name: sanic-secure-session
Version: 0.2.1
Summary: A server-side secure sessions plugin for Sanic
Home-page: https://github.com/saabeilin/sanic-secure-session
Author: Sergei Beilin
Author-email: saabeilin@gmail.com
License: MIT license
Description-Content-Type: UNKNOWN
Keywords: sanic,session
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: Unix
Classifier: Operating System :: POSIX
Classifier: Operating System :: Microsoft :: Windows
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 :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Utilities
Requires-Dist: sanic
Requires-Dist: itsdangerous

Gotta get your sessions fast!
=============================

Cookie-based sessions are still a common way to track users's sessions. 
Flask and Django have really good support for server-side sessions, but not Sanic yet.
So `sanic-secure-session` is an attempt to create a simple yet enough secure session support for Sanic.

 * Server-side sessions (currently only Redis backend implemented)
 * Signed session cookie (sure, using `itsdangerous`)
 * Easily extensible backends (only serialization and storage-related logic there)

## Usage example


```python
from datetime import timedelta

import asyncio_redis
from sanic import Sanic
from sanic.response import text

from sanic_secure_session import SanicSession
from sanic_secure_session.backends.redis import RedisStorageBackend


class RedisPool:
    """
    A simple wrapper class that allows you to share a connection
    pool across your application.
    """
    _pool = None

    async def get_pool(self):
        if not self._pool:
            self._pool = await asyncio_redis.Pool.create(
                host='localhost', port=6379, poolsize=10
            )

        return self._pool


redis_pool = RedisPool()

storage_backend = RedisStorageBackend(redis_connection=redis_pool.get_pool)

app = Sanic()
SanicSession(app, secret_key='aeNgaif6Ieyishoh', storage_backend=storage_backend,
             ttl=timedelta(minutes=1), http_only=True, secure=True)


@app.route("/")
async def index(request):
    # interact with the session like a normal dict
    if not request['session'].get('foo'):
        request['session']['foo'] = 0

    request['session']['foo'] += 1

    return text({
        'cookies': request.cookies,
        'session': request['session']
    })


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8000, debug=True)

```




