Coverage for src/lexigram/admin/middleware/admin_auth_token.py: 43%
23 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:26 +0800
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 14:26 +0800
1"""Example admin/debug middleware.
3This middleware is an opt-in example that projects can use to gate admin
4endpoints like `/debug/routes`. It sets `request.state.is_admin` to True when
5it recognizes a configured secret token or other auth signals.
6"""
8from __future__ import annotations
10from collections.abc import Awaitable, Callable
11from typing import Any
13from lexigram.di.decorators import inject
14from lexigram.logging import get_logger
16logger = get_logger(__name__)
19@inject
20class DebugAdminAuthMiddleware:
21 """Example middleware that grants admin access based on a secret token.
23 Usage:
24 web = WebProvider(middleware=[AdminAuthMiddleware(token="s3cr3t")])
25 """
27 def __init__(self, token: str):
28 self.token = token
30 async def __call__(
31 self,
32 request: Any,
33 call_next: Callable[[Any], Awaitable[Any]],
34 ) -> Any:
35 # Lexigram middleware adapter will pass a Lexigram `Request` wrapper
36 try:
37 header_val = request.headers.get("x-debug-token")
38 except AttributeError as e:
39 logger.debug("Request has no headers attribute: %s", e)
40 header_val = None
42 try:
43 if header_val == self.token:
44 request.state.is_admin = True
45 else:
46 request.state.is_admin = False
47 except AttributeError as e:
48 logger.debug("Request has no state attribute to set admin flag: %s", e)
50 return await call_next(request)