From 90679f54eece6aad3e230dc22bf50102706f9069 Mon Sep 17 00:00:00 2001 From: Gene Takavic Date: Thu, 15 Dec 2022 16:28:17 +0100 Subject: [PATCH 1/2] handling some errors --- lnbits/extensions/boltcards/crud.py | 6 ++++++ lnbits/extensions/boltcards/lnurl.py | 21 +++++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/lnbits/extensions/boltcards/crud.py b/lnbits/extensions/boltcards/crud.py index c541346e..4fae31f9 100644 --- a/lnbits/extensions/boltcards/crud.py +++ b/lnbits/extensions/boltcards/crud.py @@ -171,6 +171,9 @@ async def get_hit(hit_id: str) -> Optional[Hit]: async def get_hits(cards_ids: Union[str, List[str]]) -> List[Hit]: + if len(cards_ids) == 0: + return [] + q = ",".join(["?"] * len(cards_ids)) rows = await db.fetchall( f"SELECT * FROM boltcards.hits WHERE card_id IN ({q})", (*cards_ids,) @@ -265,6 +268,9 @@ async def get_refund(refund_id: str) -> Optional[Refund]: async def get_refunds(hits_ids: Union[str, List[str]]) -> List[Refund]: + if len(hits_ids) == 0: + return [] + q = ",".join(["?"] * len(hits_ids)) rows = await db.fetchall( f"SELECT * FROM boltcards.refunds WHERE hit_id IN ({q})", (*hits_ids,) diff --git a/lnbits/extensions/boltcards/lnurl.py b/lnbits/extensions/boltcards/lnurl.py index 6fb9ad8d..8a05d2ef 100644 --- a/lnbits/extensions/boltcards/lnurl.py +++ b/lnbits/extensions/boltcards/lnurl.py @@ -108,15 +108,24 @@ async def lnurl_callback( pr: str = Query(None), k1: str = Query(None), ): + if not k1: + return {"status": "ERROR", "reason": "Missing K1 token"} + hit = await get_hit(k1) - card = await get_card(hit.card_id) + if not hit: - return {"status": "ERROR", "reason": f"LNURL-pay record not found."} - if hit.id != k1: - return {"status": "ERROR", "reason": "Bad K1"} + return {"status": "ERROR", "reason": "Record not found for this charge (bad k1)"} if hit.spent: - return {"status": "ERROR", "reason": f"Payment already claimed"} - invoice = bolt11.decode(pr) + return {"status": "ERROR", "reason": "Payment already claimed"} + if not pr: + return {"status": "ERROR", "reason": "Missing payment request"} + + try: + invoice = bolt11.decode(pr) + except: + return {"status": "ERROR", "reason": "Failed to decode payment request"} + + card = await get_card(hit.card_id) hit = await spend_hit(id=hit.id, amount=int(invoice.amount_msat / 1000)) try: await pay_invoice( From b8bd9cc807d485db031070f9083d0af3074c5dce Mon Sep 17 00:00:00 2001 From: Gene Takavic Date: Thu, 15 Dec 2022 16:46:49 +0100 Subject: [PATCH 2/2] format --- lnbits/extensions/boltcards/lnurl.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lnbits/extensions/boltcards/lnurl.py b/lnbits/extensions/boltcards/lnurl.py index 8a05d2ef..3974e529 100644 --- a/lnbits/extensions/boltcards/lnurl.py +++ b/lnbits/extensions/boltcards/lnurl.py @@ -114,7 +114,10 @@ async def lnurl_callback( hit = await get_hit(k1) if not hit: - return {"status": "ERROR", "reason": "Record not found for this charge (bad k1)"} + return { + "status": "ERROR", + "reason": "Record not found for this charge (bad k1)", + } if hit.spent: return {"status": "ERROR", "reason": "Payment already claimed"} if not pr: