From 9279129f0737ac5a45aa24e1434d00562aa69673 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Mon, 13 Jun 2022 15:18:14 +0100 Subject: [PATCH 1/3] check if request is from browser --- lnbits/app.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index ca770167..f4ebd93f 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -4,10 +4,11 @@ import sys import traceback import warnings -from fastapi import FastAPI, Request +from fastapi import FastAPI, Request, status from fastapi.exceptions import RequestValidationError from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.gzip import GZipMiddleware +from fastapi.responses import JSONResponse from fastapi.staticfiles import StaticFiles import lnbits.settings @@ -58,15 +59,17 @@ def create_app(config_object="lnbits.settings") -> FastAPI: async def validation_exception_handler( request: Request, exc: RequestValidationError ): - return template_renderer().TemplateResponse( - "error.html", - {"request": request, "err": f"`{exc.errors()}` is not a valid UUID."}, - ) + + if "text/html" in request.headers["accept"]: + return template_renderer().TemplateResponse( + "error.html", + {"request": request, "err": f"`{exc.errors()}` is not a valid UUID."}, + ) - # return HTMLResponse( - # status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - # content=jsonable_encoder({"detail": exc.errors(), "body": exc.body}), - # ) + return JSONResponse( + status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + content={"detail": exc.errors(), "body": exc.body}, + ) app.add_middleware(GZipMiddleware, minimum_size=1000) # app.add_middleware(ASGIProxyFix) From 5ceb8639f9a5e215e1b9f7ae39a235a93b90d58a Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Mon, 13 Jun 2022 16:18:16 +0100 Subject: [PATCH 2/3] clean up and comment --- lnbits/app.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index f4ebd93f..1c9de5d7 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -59,16 +59,19 @@ def create_app(config_object="lnbits.settings") -> FastAPI: async def validation_exception_handler( request: Request, exc: RequestValidationError ): + # Only the browser sends "text/html" request + # not fail proof, but everything else get's a JSON response if "text/html" in request.headers["accept"]: return template_renderer().TemplateResponse( "error.html", - {"request": request, "err": f"`{exc.errors()}` is not a valid UUID."}, - ) + {"request": request, "err": f"{exc.errors()} is not a valid UUID."}, + ) + return JSONResponse( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - content={"detail": exc.errors(), "body": exc.body}, + content={"detail": exc.errors()}, ) app.add_middleware(GZipMiddleware, minimum_size=1000) From c4f9206c10e17de0d18c0a7e6771d658242915c0 Mon Sep 17 00:00:00 2001 From: Tiago vasconcelos Date: Mon, 13 Jun 2022 21:43:17 +0100 Subject: [PATCH 3/3] change status code --- lnbits/app.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lnbits/app.py b/lnbits/app.py index 1c9de5d7..1fff4847 100644 --- a/lnbits/app.py +++ b/lnbits/app.py @@ -3,8 +3,9 @@ import importlib import sys import traceback import warnings +from http import HTTPStatus -from fastapi import FastAPI, Request, status +from fastapi import FastAPI, Request from fastapi.exceptions import RequestValidationError from fastapi.middleware.cors import CORSMiddleware from fastapi.middleware.gzip import GZipMiddleware @@ -61,16 +62,15 @@ def create_app(config_object="lnbits.settings") -> FastAPI: ): # Only the browser sends "text/html" request # not fail proof, but everything else get's a JSON response - + if "text/html" in request.headers["accept"]: return template_renderer().TemplateResponse( "error.html", {"request": request, "err": f"{exc.errors()} is not a valid UUID."}, ) - return JSONResponse( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, + status_code=HTTPStatus.NO_CONTENT, content={"detail": exc.errors()}, )