Coverage for src / lexigram / admin / middleware / admin_auth_token.py: 43%

23 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-13 22:14 +0800

1"""Example admin/debug middleware. 

2 

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""" 

7 

8from __future__ import annotations 

9 

10from collections.abc import Awaitable, Callable 

11from typing import Any 

12 

13from lexigram.di.decorators import inject 

14from lexigram.logging import get_logger 

15 

16logger = get_logger(__name__) 

17 

18 

19@inject 

20class DebugAdminAuthMiddleware: 

21 """Example middleware that grants admin access based on a secret token. 

22 

23 Usage: 

24 web = WebProvider(middleware=[AdminAuthMiddleware(token="s3cr3t")]) 

25 """ 

26 

27 def __init__(self, token: str): 

28 self.token = token 

29 

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 

41 

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) 

49 

50 return await call_next(request)