From 232de067a42baff356aa1fc2931aa1396917979a Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Sun, 18 Apr 2021 10:50:07 -0300 Subject: [PATCH 1/5] expect more errors from SSE connection. --- lnbits/wallets/lnbits.py | 3 +-- lnbits/wallets/lntxbot.py | 2 +- lnbits/wallets/spark.py | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lnbits/wallets/lnbits.py b/lnbits/wallets/lnbits.py index 13ea8046..f55df5a7 100644 --- a/lnbits/wallets/lnbits.py +++ b/lnbits/wallets/lnbits.py @@ -123,7 +123,6 @@ class LNbitsWallet(Wallet): async with client.stream("GET", url) as r: async for line in r.aiter_lines(): if line.startswith("data:"): - try: data = json.loads(line[5:]) except json.decoder.JSONDecodeError: @@ -134,7 +133,7 @@ class LNbitsWallet(Wallet): yield data["payment_hash"] # payment_hash - except (OSError, httpx.ReadError, httpx.ConnectError): + except (OSError, httpx.ReadError, httpx.ConnectError, httpx.ReadTimeout): pass print("lost connection to lnbits /payments/sse, retrying in 5 seconds") diff --git a/lnbits/wallets/lntxbot.py b/lnbits/wallets/lntxbot.py index a346cd43..f8ff709c 100644 --- a/lnbits/wallets/lntxbot.py +++ b/lnbits/wallets/lntxbot.py @@ -146,7 +146,7 @@ class LntxbotWallet(Wallet): data = json.loads(line[5:]) if "payment_hash" in data and data.get("msatoshi") > 0: yield data["payment_hash"] - except (OSError, httpx.ReadError): + except (OSError, httpx.ReadError, httpx.ReadTimeout, httpx.ConnectError): pass print("lost connection to lntxbot /payments/stream, retrying in 5 seconds") diff --git a/lnbits/wallets/spark.py b/lnbits/wallets/spark.py index 5d0f024a..0c81733e 100644 --- a/lnbits/wallets/spark.py +++ b/lnbits/wallets/spark.py @@ -195,7 +195,7 @@ class SparkWallet(Wallet): data = json.loads(line[5:]) if "pay_index" in data and data.get("status") == "paid": yield data["label"] - except (OSError, httpx.ReadError, httpx.ConnectError): + except (OSError, httpx.ReadError, httpx.ConnectError, httpx.ReadTimeout): pass print("lost connection to spark /stream, retrying in 5 seconds") From 2aa4a93da13c2aadb8708fb16b71ddfef810acc4 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 21 Apr 2021 23:22:29 -0300 Subject: [PATCH 2/5] handle empty lnurl-withdraws to redeem. --- lnbits/core/services.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lnbits/core/services.py b/lnbits/core/services.py index 97435f72..769ac5ef 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -186,6 +186,9 @@ async def redeem_lnurl_withdraw( wait_seconds: int = 0, conn: Optional[Connection] = None, ) -> None: + if not lnurl_request: + return None + res = {} async with httpx.AsyncClient() as client: From b55cc82f1cb30f33081f6890d5aac612e7926e84 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 21 Apr 2021 23:27:21 -0300 Subject: [PATCH 3/5] evade lnurl encoding error for withdraw_full QR on localhost. --- lnbits/core/models.py | 5 ++++- lnbits/core/templates/core/wallet.html | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lnbits/core/models.py b/lnbits/core/models.py index b2cd70af..bef29135 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -52,7 +52,10 @@ class Wallet(NamedTuple): wal=self.id, _external=True, ) - return lnurl_encode(url) + try: + return lnurl_encode(url) + except: + return "" def lnurlauth_key(self, domain: str) -> SigningKey: hashing_key = hashlib.sha256(self.id.encode("utf-8")).digest() diff --git a/lnbits/core/templates/core/wallet.html b/lnbits/core/templates/core/wallet.html index 39c519af..16305687 100644 --- a/lnbits/core/templates/core/wallet.html +++ b/lnbits/core/templates/core/wallet.html @@ -231,11 +231,9 @@ {% include "core/_api_docs.html" %} - + + {% if wallet.lnurlwithdraw_full %} +

@@ -257,6 +255,8 @@ + {% endif %} + Date: Thu, 22 Apr 2021 09:07:35 +0100 Subject: [PATCH 4/5] disable submit if no button --- lnbits/core/templates/core/wallet.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lnbits/core/templates/core/wallet.html b/lnbits/core/templates/core/wallet.html index 16305687..c6851793 100644 --- a/lnbits/core/templates/core/wallet.html +++ b/lnbits/core/templates/core/wallet.html @@ -334,7 +334,7 @@ From bcecf6d43111199302d9f7152ecb7e7a4735662a Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 23 Apr 2021 19:24:04 -0300 Subject: [PATCH 5/5] handle invalid lnurl-w responses on redeem_lnurl_withdraw. --- lnbits/core/services.py | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/lnbits/core/services.py b/lnbits/core/services.py index 769ac5ef..f2821fdc 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -196,13 +196,19 @@ async def redeem_lnurl_withdraw( r = await client.get(str(lnurl)) res = r.json() - _, payment_request = await create_invoice( - wallet_id=wallet_id, - amount=int(res["maxWithdrawable"] / 1000), - memo=memo or res["defaultDescription"] or "", - extra=extra, - conn=conn, - ) + try: + _, payment_request = await create_invoice( + wallet_id=wallet_id, + amount=int(res["maxWithdrawable"] / 1000), + memo=memo or res["defaultDescription"] or "", + extra=extra, + conn=conn, + ) + except: + print( + f"failed to create invoice on redeem_lnurl_withdraw from {lnurl}. params: {res}" + ) + return None if wait_seconds: await trio.sleep(wait_seconds)