️feat: block access to openapi references while running under fastapi (#1849)

- block fastapi openapi reference(swagger and redoc) routes
这个提交包含在:
Yuki
2024-06-10 22:26:46 +08:00
提交者 GitHub
父节点 ba484c55a0
当前提交 cdadd38cf7

查看文件

@@ -198,13 +198,21 @@ def start_app(app_block, CONCURRENT_COUNT, AUTHENTICATION, PORT, SSL_KEYFILE, SS
fastapi_app = FastAPI(lifespan=app_lifespan) fastapi_app = FastAPI(lifespan=app_lifespan)
fastapi_app.mount(CUSTOM_PATH, gradio_app) fastapi_app.mount(CUSTOM_PATH, gradio_app)
# --- --- favicon --- --- # --- --- favicon and block fastapi api reference routes --- ---
from starlette.responses import JSONResponse
if CUSTOM_PATH != '/': if CUSTOM_PATH != '/':
from fastapi.responses import FileResponse from fastapi.responses import FileResponse
@fastapi_app.get("/favicon.ico") @fastapi_app.get("/favicon.ico")
async def favicon(): async def favicon():
return FileResponse(app_block.favicon_path) return FileResponse(app_block.favicon_path)
@fastapi_app.middleware("http")
async def middleware(request: Request, call_next):
if request.scope['path'] == "/docs" or request.scope['path'] == "/redoc" or request.scope['path'] == "/openapi.json":
return JSONResponse(status_code=404, content={"message": "Not Found"})
response = await call_next(request)
return response
# --- --- uvicorn.Config --- --- # --- --- uvicorn.Config --- ---
ssl_keyfile = None if SSL_KEYFILE == "" else SSL_KEYFILE ssl_keyfile = None if SSL_KEYFILE == "" else SSL_KEYFILE
ssl_certfile = None if SSL_CERTFILE == "" else SSL_CERTFILE ssl_certfile = None if SSL_CERTFILE == "" else SSL_CERTFILE