From 441d5337a3bd016b3b5838ba5362fcbb4db324e9 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Tue, 6 Dec 2022 10:48:16 +0100 Subject: [PATCH] fix expiry integer --- lnbits/core/crud.py | 1 + lnbits/core/migrations.py | 48 +++++++++++++++++++-------------------- lnbits/core/models.py | 2 +- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index 9fdfa9ba..2baa0507 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -377,6 +377,7 @@ async def create_payment( invoice = bolt11.decode(payment_request) expiration_date = datetime.datetime.fromtimestamp(invoice.date + invoice.expiry) except: + # assume maximum bolt11 expiry of 31 days to be on the safe side expiration_date = datetime.datetime.now() + datetime.timedelta(days=31) await (conn or db).execute( diff --git a/lnbits/core/migrations.py b/lnbits/core/migrations.py index 04a145eb..84cb7f1f 100644 --- a/lnbits/core/migrations.py +++ b/lnbits/core/migrations.py @@ -1,5 +1,5 @@ import datetime - +from loguru import logger from sqlalchemy.exc import OperationalError # type: ignore from lnbits import bolt11 @@ -216,37 +216,35 @@ async def m006_add_invoice_expiry_to_apipayments(db): """ ) ).fetchall() - # then we delete all expired invoices, checking one by one - print(f"Checking expiry of {len(rows)} invoices") + logger.info(f"Checking expiry of {len(rows)} invoices") for i, ( payment_request, - payment_hash, + checking_id, ) in enumerate(rows): - print(f"Checking invoice {i}/{len(rows)}") + logger.info(f"Checking invoice {i}/{len(rows)}") try: invoice = bolt11.decode(payment_request) + if invoice.expiry is None: + continue + + expiration_date = datetime.datetime.fromtimestamp( + invoice.date + invoice.expiry + ) + logger.info( + f"Setting expiry of invoice {invoice.payment_hash} to {expiration_date}" + ) + await db.execute( + """ + UPDATE apipayments SET expiry = ? + WHERE checking_id = ? AND amount > 0 + """, + ( + db.datetime_to_timestamp(expiration_date), + checking_id, + ), + ) except: continue - if payment_hash != invoice.payment_hash: - print("Error: {payment_hash} != {invoice.payment_hash}") - continue - - expiration_date = datetime.datetime.fromtimestamp( - invoice.date + invoice.expiry - ) - print( - f"Setting expiry of invoice {invoice.payment_hash} to {expiration_date}" - ) - await db.execute( - """ - UPDATE apipayments SET expiry = ? - WHERE checking_id = ? AND amount > 0 - """, - ( - db.datetime_to_timestamp(expiration_date), - invoice.payment_hash, - ), - ) except OperationalError: # this is necessary now because it may be the case that this migration will # run twice in some environments. diff --git a/lnbits/core/models.py b/lnbits/core/models.py index 8abf23d8..5fe27905 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -85,7 +85,7 @@ class Payment(BaseModel): bolt11: str preimage: str payment_hash: str - expiry: int + expiry: float extra: Optional[Dict] = {} wallet_id: str webhook: Optional[str]