️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
@@ -220,7 +228,7 @@ def start_app(app_block, CONCURRENT_COUNT, AUTHENTICATION, PORT, SSL_KEYFILE, SS
) )
server = Server(config) server = Server(config)
url_host_name = "localhost" if server_name == "0.0.0.0" else server_name url_host_name = "localhost" if server_name == "0.0.0.0" else server_name
if ssl_keyfile is not None: if ssl_keyfile is not None:
if ssl_certfile is None: if ssl_certfile is None:
raise ValueError( raise ValueError(
"ssl_certfile must be provided if ssl_keyfile is provided." "ssl_certfile must be provided if ssl_keyfile is provided."