1515
1616class Middleware__Check_API_Key (BaseHTTPMiddleware ):
1717
18- def __init__ (self , app , env_var__api_key__name , env_var__api_key__value ):
18+ def __init__ (self , app , env_var__api_key__name ,
19+ env_var__api_key__value ,
20+ allow_cors : bool = False ):
21+
1922 super ().__init__ (app )
2023 self .api_key__name = get_env (env_var__api_key__name )
2124 self .api_key__value = get_env (env_var__api_key__value )
25+ self .allow_cors = allow_cors
2226
2327 def return_error (self , error_message ):
2428 content = to_json_str (status_error (error_message ))
@@ -30,6 +34,8 @@ async def dispatch(self, request: Request, call_next) -> Response:
3034
3135 if request .url .path in AUTH__EXCLUDED_PATHS : # allow for the seeing the docs and accessing the methods to set the cookie
3236 return await call_next (request )
37+ if request .method == 'OPTIONS' and self .allow_cors :
38+ return self .create_allow_cors_response (request = request )
3339
3440 if not self .api_key__name :
3541 return self .return_error (ERROR_MESSAGE__NO_KEY_NAME_SETUP )
@@ -47,4 +53,13 @@ async def dispatch(self, request: Request, call_next) -> Response:
4753 return self .return_error (ERROR_MESSAGE__API_KEY_INVALID )
4854
4955 response = await call_next (request ) # If API key is valid, continue with the request
50- return response
56+ return response
57+
58+
59+ def create_allow_cors_response (self , request : Request ):
60+ origin = request .headers .get ('origin' , '*' )
61+ return Response (status_code = 204 ,
62+ headers = { 'Access-Control-Allow-Origin' : origin ,
63+ 'Access-Control-Allow-Methods' : 'GET, POST, PUT, DELETE, OPTIONS' ,
64+ 'Access-Control-Allow-Headers' : 'api-key__for__mgraph-ai__service, content-type' ,
65+ 'Access-Control-Max-Age' : '86400' })
0 commit comments