diff --git a/.github/workflows/create_pull_request.yml b/.github/workflows/create_pull_request.yml index 7d4242b..37b8cf9 100644 --- a/.github/workflows/create_pull_request.yml +++ b/.github/workflows/create_pull_request.yml @@ -76,7 +76,6 @@ jobs: maxColorRange: 100 minColorRange: 0 - create_pull_request: runs-on: ubuntu-latest needs: test # This creates the dependency link diff --git a/app/main.py b/app/main.py index 42d445f..828d044 100644 --- a/app/main.py +++ b/app/main.py @@ -13,7 +13,7 @@ from app.api_router import api from app.logger import logger -from app.middlewares import log_request_middleware +from app.middlewares import AllowAuthorizedDocAccess, log_request_middleware from app.settings import Settings settings = Settings() # type: ignore @@ -55,6 +55,7 @@ def initiate_app(): # Add allowed hosts here ], ) + app.add_middleware(AllowAuthorizedDocAccess) app.add_middleware(BaseHTTPMiddleware, dispatch=log_request_middleware) limiter = Limiter(key_func=get_remote_address) diff --git a/app/middlewares.py b/app/middlewares.py index a20409b..0c43973 100644 --- a/app/middlewares.py +++ b/app/middlewares.py @@ -1,6 +1,8 @@ import time from fastapi import Request, Response +from fastapi.responses import JSONResponse +from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint from app.logger import logger @@ -18,3 +20,22 @@ async def log_request_middleware(request: Request, call_next): logger.info(log_dict) return response + + +class AllowAuthorizedDocAccess(BaseHTTPMiddleware): + allowed_ips = [ + "127.0.0.1", # allows Viewing Docs in Local Development Environment + ] + + async def dispatch( + self, request: Request, call_next: RequestResponseEndpoint + ) -> Response: + client_ip = request.client.host # type: ignore + if "/docs" in request.url.path: + if client_ip not in self.allowed_ips: + return JSONResponse( + status_code=500, content="Application Has Crashed 😭" + ) + + response = await call_next(request) + return response