From ba90bc5fead79c76714d96188585b702308d41a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Tue, 5 Dec 2023 15:04:28 +0100 Subject: [PATCH] feat: lnurl library update follow up on https://github.com/lnbits/lnbits/pull/1864/files --- lnbits/core/models.py | 2 +- lnbits/core/services.py | 4 ++-- lnbits/core/views/api.py | 7 ++++--- lnbits/lnurl.py | 21 +-------------------- poetry.lock | 15 ++++++++------- pyproject.toml | 2 +- 6 files changed, 17 insertions(+), 34 deletions(-) diff --git a/lnbits/core/models.py b/lnbits/core/models.py index 985ba5cd..cb568214 100644 --- a/lnbits/core/models.py +++ b/lnbits/core/models.py @@ -10,12 +10,12 @@ from typing import Callable, Dict, List, Optional from ecdsa import SECP256k1, SigningKey from fastapi import Query -from lnurl import encode as lnurl_encode from loguru import logger from pydantic import BaseModel from lnbits.db import Connection, FilterModel, FromRowModel from lnbits.helpers import url_for +from lnbits.lnurl import encode as lnurl_encode from lnbits.settings import settings from lnbits.wallets import get_wallet_class from lnbits.wallets.base import PaymentStatus diff --git a/lnbits/core/services.py b/lnbits/core/services.py index 43475a09..2dcf2fe3 100644 --- a/lnbits/core/services.py +++ b/lnbits/core/services.py @@ -11,8 +11,6 @@ from bolt11 import Bolt11 from bolt11 import decode as bolt11_decode from cryptography.hazmat.primitives import serialization from fastapi import Depends, WebSocket -from lnurl import LnurlErrorResponse -from lnurl import decode as decode_lnurl from loguru import logger from py_vapid import Vapid from py_vapid.utils import b64urlencode @@ -21,6 +19,8 @@ from lnbits.core.db import db from lnbits.db import Connection from lnbits.decorators import WalletTypeInfo, require_admin_key from lnbits.helpers import url_for +from lnbits.lnurl import LnurlErrorResponse +from lnbits.lnurl import decode as decode_lnurl from lnbits.settings import ( EditableSettings, SuperSettings, diff --git a/lnbits/core/views/api.py b/lnbits/core/views/api.py index 4d13f5d0..1ab1f361 100644 --- a/lnbits/core/views/api.py +++ b/lnbits/core/views/api.py @@ -24,7 +24,7 @@ from loguru import logger from sse_starlette.sse import EventSourceResponse from starlette.responses import StreamingResponse -from lnbits import bolt11, lnurl +from lnbits import bolt11 from lnbits.core.db import core_app_extra, db from lnbits.core.helpers import ( migrate_extension_database, @@ -63,6 +63,7 @@ from lnbits.extension_manager import ( get_valid_extensions, ) from lnbits.helpers import generate_filter_params_openapi, url_for +from lnbits.lnurl import decode as lnurl_decode from lnbits.settings import settings from lnbits.utils.exchange_rates import ( currencies, @@ -556,7 +557,7 @@ async def api_payment(payment_hash, X_Api_Key: Optional[str] = Header(None)): @api_router.get("/api/v1/lnurlscan/{code}") async def api_lnurlscan(code: str, wallet: WalletTypeInfo = Depends(get_key_type)): try: - url = lnurl.decode(code) + url = str(lnurl_decode(code)) domain = urlparse(url).netloc except Exception: # parse internet identifier (user@domain.com) @@ -674,7 +675,7 @@ async def api_payments_decode(data: DecodePayment) -> JSONResponse: payment_str = data.data try: if payment_str[:5] == "LNURL": - url = lnurl.decode(payment_str) + url = str(lnurl_decode(payment_str)) return JSONResponse({"domain": url}) else: invoice = bolt11.decode(payment_str) diff --git a/lnbits/lnurl.py b/lnbits/lnurl.py index ebff8250..d16d8752 100644 --- a/lnbits/lnurl.py +++ b/lnbits/lnurl.py @@ -1,20 +1 @@ -from typing import Union - -from bech32 import bech32_decode, bech32_encode, convertbits -from fastapi.datastructures import URL - - -def decode(lnurl: str) -> str: - hrp, data = bech32_decode(lnurl) - assert hrp - assert data - bech32_data = convertbits(data, 5, 8, False) - assert bech32_data - return bytes(bech32_data).decode() - - -def encode(url: Union[str, URL]) -> str: - bech32_data = convertbits(str(url).encode(), 8, 5, True) - assert bech32_data - lnurl = bech32_encode("lnurl", bech32_data) - return lnurl.upper() +from lnurl import LnurlErrorResponse, decode, encode, handle # noqa: F401 diff --git a/poetry.lock b/poetry.lock index 00fb7183..24554acd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1109,18 +1109,19 @@ rediscluster = ["redis (>=4.2.0,!=4.5.2,!=4.5.3)"] [[package]] name = "lnurl" -version = "0.3.6" +version = "0.4.2" description = "LNURL implementation for Python." optional = false -python-versions = ">=3.6" +python-versions = ">=3.9,<4.0" files = [ - {file = "lnurl-0.3.6-py3-none-any.whl", hash = "sha256:579982fd8c4d25bc84c61c74ec45cb7999fa1fa2426f5d5aeb0160ba333b9c92"}, - {file = "lnurl-0.3.6.tar.gz", hash = "sha256:8af07460115a48f3122a5a9c9a6062bee3897d5f6ab4c9a60f6561a83a8234f6"}, + {file = "lnurl-0.4.2-py3-none-any.whl", hash = "sha256:93f79ae7e0b0c66fed5b29ac1520e85e3e2c8648561a4b42974f0b7bffd34d84"}, + {file = "lnurl-0.4.2.tar.gz", hash = "sha256:c5e708b255d5333a0c08ceffe90ae4be6d2d09eb51dc8c35d19d8aa4cb21842a"}, ] [package.dependencies] -bech32 = "*" -pydantic = "*" +bech32 = ">=1.2.0,<2.0.0" +pydantic = ">=1,<2" +requests = ">=2.31.0,<3.0.0" [[package]] name = "loguru" @@ -2654,4 +2655,4 @@ liquid = ["wallycore"] [metadata] lock-version = "2.0" python-versions = "^3.10 | ^3.9" -content-hash = "95ad6885f070793369450a82763ea8e4f92926d9bee02f81758636b28db55e76" +content-hash = "6b44b6f3fc338be751d3c647964ae2138e928dbe479670dd04a2f274a5b03cc0" diff --git a/pyproject.toml b/pyproject.toml index f3c37009..03071aeb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ ecdsa = "0.18.0" fastapi = "0.103.1" httpx = "0.25.0" jinja2 = "3.0.1" -lnurl = "0.3.6" +lnurl = "0.4.2" psycopg2-binary = "2.9.7" pydantic = "1.10.9" pyqrcode = "1.2.1"