mirror of
https://github.com/PiBrewing/craftbeerpi4.git
synced 2024-11-23 15:38:14 +01:00
97 lines
2.5 KiB
Python
97 lines
2.5 KiB
Python
|
from .abstract_auth import AbstractAuthentication
|
||
|
|
||
|
"""Key used to store the auth policy in the request object"""
|
||
|
POLICY_KEY = 'aiohttp_auth.policy'
|
||
|
|
||
|
"""Key used to cache the auth credentials in the request object"""
|
||
|
AUTH_KEY = 'aiohttp_auth.auth'
|
||
|
|
||
|
|
||
|
def auth_middleware(policy):
|
||
|
"""Returns a aiohttp_auth middleware factory for use by the aiohttp
|
||
|
application object.
|
||
|
|
||
|
Args:
|
||
|
policy: A authentication policy with a base class of
|
||
|
AbstractAuthentication.
|
||
|
"""
|
||
|
assert isinstance(policy, AbstractAuthentication)
|
||
|
|
||
|
async def _auth_middleware_factory(app, handler):
|
||
|
|
||
|
async def _middleware_handler(request):
|
||
|
# Save the policy in the request
|
||
|
request[POLICY_KEY] = policy
|
||
|
|
||
|
# Call the next handler in the chain
|
||
|
response = await handler(request)
|
||
|
|
||
|
# Give the policy a chance to handle the response
|
||
|
await policy.process_response(request, response)
|
||
|
|
||
|
return response
|
||
|
|
||
|
return _middleware_handler
|
||
|
|
||
|
return _auth_middleware_factory
|
||
|
|
||
|
|
||
|
async def get_auth(request):
|
||
|
"""Returns the user_id associated with a particular request.
|
||
|
|
||
|
Args:
|
||
|
request: aiohttp Request object.
|
||
|
|
||
|
Returns:
|
||
|
The user_id associated with the request, or None if no user is
|
||
|
associated with the request.
|
||
|
|
||
|
Raises:
|
||
|
RuntimeError: Middleware is not installed
|
||
|
"""
|
||
|
|
||
|
auth_val = request.get(AUTH_KEY)
|
||
|
if auth_val:
|
||
|
return auth_val
|
||
|
|
||
|
auth_policy = request.get(POLICY_KEY)
|
||
|
if auth_policy is None:
|
||
|
raise RuntimeError('auth_middleware not installed')
|
||
|
|
||
|
request[AUTH_KEY] = await auth_policy.get(request)
|
||
|
return request[AUTH_KEY]
|
||
|
|
||
|
|
||
|
async def remember(request, user_id):
|
||
|
"""Called to store and remember the userid for a request
|
||
|
|
||
|
Args:
|
||
|
request: aiohttp Request object.
|
||
|
user_id: String representing the user_id to remember
|
||
|
|
||
|
Raises:
|
||
|
RuntimeError: Middleware is not installed
|
||
|
"""
|
||
|
auth_policy = request.get(POLICY_KEY)
|
||
|
if auth_policy is None:
|
||
|
raise RuntimeError('auth_middleware not installed')
|
||
|
|
||
|
return await auth_policy.remember(request, user_id)
|
||
|
|
||
|
|
||
|
async def forget(request):
|
||
|
"""Called to forget the userid for a request
|
||
|
|
||
|
Args:
|
||
|
request: aiohttp Request object
|
||
|
|
||
|
Raises:
|
||
|
RuntimeError: Middleware is not installed
|
||
|
"""
|
||
|
auth_policy = request.get(POLICY_KEY)
|
||
|
if auth_policy is None:
|
||
|
raise RuntimeError('auth_middleware not installed')
|
||
|
|
||
|
return await auth_policy.forget(request)
|
||
|
|