1+ import re
12from typing import (
23 Generic ,
34 TypeVar ,
910import pydantic
1011from typing_extensions import override
1112
13+ import dl_app_api_base .auth as auth
1214import dl_app_api_base .handlers as handlers
1315import dl_app_api_base .middlewares as middlewares
1416import dl_app_api_base .openapi as openapi
@@ -38,13 +40,15 @@ class HttpServerAppMixin(dl_app_base.BaseApp):
3840
3941@attr .define (frozen = True , kw_only = True )
4042class HttpServerRequestContextDependencies (
43+ auth .AuthRequestContextDependenciesMixin ,
4144 request_context .BaseRequestContextDependencies ,
4245):
4346 ...
4447
4548
4649class HttpServerRequestContext (
4750 request_id .RequestIdRequestContextMixin ,
51+ auth .AuthRequestContextMixin ,
4852 request_context .BaseRequestContext ,
4953):
5054 _dependencies : HttpServerRequestContextDependencies
@@ -103,9 +107,30 @@ async def _get_request_context_manager(
103107 ) -> HttpServerRequestContextManager :
104108 return HttpServerRequestContextManager (
105109 context_factory = HttpServerRequestContext .factory ,
106- dependencies = HttpServerRequestContextDependencies (),
110+ dependencies = HttpServerRequestContextDependencies (
111+ request_auth_checkers = await self ._get_request_auth_checkers (),
112+ ),
107113 )
108114
115+ @dl_app_base .singleton_class_method_result
116+ async def _get_request_auth_checkers (
117+ self ,
118+ ) -> list [auth .RequestAuthCheckerProtocol ]:
119+ return [
120+ auth .NoAuthChecker (
121+ route_matchers = [
122+ auth .RouteMatcher (
123+ path_regex = re .compile (r"^/api/v1/health/.*$" ),
124+ methods = frozenset (["GET" ]),
125+ ),
126+ auth .RouteMatcher (
127+ path_regex = re .compile (r"^/api/v1/docs/.*$" ),
128+ methods = frozenset (["GET" ]),
129+ ),
130+ ],
131+ ),
132+ ]
133+
109134 @dl_app_base .singleton_class_method_result
110135 async def _get_aiohttp_app_middlewares (
111136 self ,
@@ -119,11 +144,15 @@ async def _get_aiohttp_app_middlewares(
119144 request_context_provider = request_context_manager ,
120145 )
121146 error_handling_middleware = middlewares .ErrorHandlingMiddleware ()
147+ auth_middleware = auth .AuthMiddleware (
148+ request_context_provider = request_context_manager ,
149+ )
122150
123151 return [
124152 request_context_middlewares .process ,
125153 logging_middleware .process ,
126154 error_handling_middleware .process ,
155+ auth_middleware .process ,
127156 ]
128157
129158 async def _setup_routes (self , app : aiohttp .web .Application ) -> None :
0 commit comments