From 5784d08a76d29947e7d0f6baecc1d2bde5480e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Thu, 15 Jan 2026 08:01:35 +0100 Subject: [PATCH 1/3] fix: gracefully handle InvalidLnurl error on api closes #122 --- views_api.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/views_api.py b/views_api.py index 6d9bb86..d57e6d1 100644 --- a/views_api.py +++ b/views_api.py @@ -10,6 +10,7 @@ require_admin_key, require_invoice_key, ) +from lnurl import InvalidLnurl from .crud import ( create_pay_link, @@ -28,6 +29,19 @@ lnurlp_api_router = APIRouter() +def check_lnurl_encode(req: Request, link_id: str) -> str: + try: + return lnurl_encode_link_id(req, link_id) + except InvalidLnurl as exc: + raise HTTPException( + detail=( + f"Invalid URL for LNURL encoding: `{req.base_url}`." + "Check proxy settings." + ), + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, + ) from exc + + @lnurlp_api_router.get("/api/v1/links", status_code=HTTPStatus.OK) async def api_links( req: Request, @@ -41,7 +55,7 @@ async def api_links( links = await get_pay_links(wallet_ids) for link in links: - link.lnurl = lnurl_encode_link_id(req=req, link_id=link.id) + link.lnurl = check_lnurl_encode(req=req, link_id=link.id) return links @@ -66,7 +80,7 @@ async def api_link_retrieve( detail="Not your pay link.", status_code=HTTPStatus.FORBIDDEN ) - link.lnurl = lnurl_encode_link_id(req, link.id) + link.lnurl = check_lnurl_encode(req, link.id) return link @@ -178,7 +192,8 @@ async def api_link_create_or_update( link = await create_pay_link(data) - link.lnurl = lnurl_encode_link_id(req, link.id) + link.lnurl = check_lnurl_encode(req=req, link_id=link.id) + return link From 0904766e700d689090a6825bafc975d61921fd47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Thu, 15 Jan 2026 08:06:14 +0100 Subject: [PATCH 2/3] fixup! --- views_api.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/views_api.py b/views_api.py index d57e6d1..61a2056 100644 --- a/views_api.py +++ b/views_api.py @@ -10,7 +10,7 @@ require_admin_key, require_invoice_key, ) -from lnurl import InvalidLnurl +from lnurl import InvalidUrl from .crud import ( create_pay_link, @@ -32,7 +32,7 @@ def check_lnurl_encode(req: Request, link_id: str) -> str: try: return lnurl_encode_link_id(req, link_id) - except InvalidLnurl as exc: + except InvalidUrl as exc: raise HTTPException( detail=( f"Invalid URL for LNURL encoding: `{req.base_url}`." @@ -40,6 +40,11 @@ def check_lnurl_encode(req: Request, link_id: str) -> str: ), status_code=HTTPStatus.INTERNAL_SERVER_ERROR, ) from exc + except Exception as exc: + raise HTTPException( + detail="Error encoding LNURL.", + status_code=HTTPStatus.INTERNAL_SERVER_ERROR, + ) from exc @lnurlp_api_router.get("/api/v1/links", status_code=HTTPStatus.OK) From de8ef71a42487de61333a0c72e3378dbb96f1ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Thu, 15 Jan 2026 08:10:56 +0100 Subject: [PATCH 3/3] fixup! --- views_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/views_api.py b/views_api.py index 61a2056..ad516d3 100644 --- a/views_api.py +++ b/views_api.py @@ -35,7 +35,7 @@ def check_lnurl_encode(req: Request, link_id: str) -> str: except InvalidUrl as exc: raise HTTPException( detail=( - f"Invalid URL for LNURL encoding: `{req.base_url}`." + f"Invalid URL for LNURL encoding: `{req.base_url}`. " "Check proxy settings." ), status_code=HTTPStatus.INTERNAL_SERVER_ERROR,