36 lines
917 B
Python
36 lines
917 B
Python
# -*- encoding: utf-8 -*-
|
|
import secrets
|
|
|
|
from aiohttp.web import HTTPFound
|
|
from aiohttp_session import get_session
|
|
|
|
|
|
class ClientStore(dict):
|
|
"""
|
|
This class is responsible to hold the clients used by the active connections.
|
|
"""
|
|
|
|
def __init__(self, login_route):
|
|
self.login_route = login_route
|
|
self.store = dict()
|
|
|
|
async def get_client(self, request):
|
|
session = await get_session(request)
|
|
client_id = session.get("client_id")
|
|
if client_id is None:
|
|
raise HTTPFound(self.login_route)
|
|
|
|
client = self.store.get(client_id)
|
|
if client is None:
|
|
raise HTTPFound(self.login_route)
|
|
|
|
return client
|
|
|
|
async def set_client(self, request, client):
|
|
session = await get_session(request)
|
|
|
|
client_id = secrets.token_hex(16)
|
|
|
|
self.store[client_id] = client
|
|
session["client_id"] = client_id
|