feat: lnurl library update

follow up on https://github.com/lnbits/lnbits/pull/1864/files
This commit is contained in:
dni ⚡ 2023-12-05 15:04:28 +01:00 committed by Pavol Rusnak
parent d7257af7a0
commit ba90bc5fea
6 changed files with 17 additions and 34 deletions

View file

@ -10,12 +10,12 @@ from typing import Callable, Dict, List, Optional
from ecdsa import SECP256k1, SigningKey from ecdsa import SECP256k1, SigningKey
from fastapi import Query from fastapi import Query
from lnurl import encode as lnurl_encode
from loguru import logger from loguru import logger
from pydantic import BaseModel from pydantic import BaseModel
from lnbits.db import Connection, FilterModel, FromRowModel from lnbits.db import Connection, FilterModel, FromRowModel
from lnbits.helpers import url_for from lnbits.helpers import url_for
from lnbits.lnurl import encode as lnurl_encode
from lnbits.settings import settings from lnbits.settings import settings
from lnbits.wallets import get_wallet_class from lnbits.wallets import get_wallet_class
from lnbits.wallets.base import PaymentStatus from lnbits.wallets.base import PaymentStatus

View file

@ -11,8 +11,6 @@ from bolt11 import Bolt11
from bolt11 import decode as bolt11_decode from bolt11 import decode as bolt11_decode
from cryptography.hazmat.primitives import serialization from cryptography.hazmat.primitives import serialization
from fastapi import Depends, WebSocket from fastapi import Depends, WebSocket
from lnurl import LnurlErrorResponse
from lnurl import decode as decode_lnurl
from loguru import logger from loguru import logger
from py_vapid import Vapid from py_vapid import Vapid
from py_vapid.utils import b64urlencode from py_vapid.utils import b64urlencode
@ -21,6 +19,8 @@ from lnbits.core.db import db
from lnbits.db import Connection from lnbits.db import Connection
from lnbits.decorators import WalletTypeInfo, require_admin_key from lnbits.decorators import WalletTypeInfo, require_admin_key
from lnbits.helpers import url_for from lnbits.helpers import url_for
from lnbits.lnurl import LnurlErrorResponse
from lnbits.lnurl import decode as decode_lnurl
from lnbits.settings import ( from lnbits.settings import (
EditableSettings, EditableSettings,
SuperSettings, SuperSettings,

View file

@ -24,7 +24,7 @@ from loguru import logger
from sse_starlette.sse import EventSourceResponse from sse_starlette.sse import EventSourceResponse
from starlette.responses import StreamingResponse 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.db import core_app_extra, db
from lnbits.core.helpers import ( from lnbits.core.helpers import (
migrate_extension_database, migrate_extension_database,
@ -63,6 +63,7 @@ from lnbits.extension_manager import (
get_valid_extensions, get_valid_extensions,
) )
from lnbits.helpers import generate_filter_params_openapi, url_for 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.settings import settings
from lnbits.utils.exchange_rates import ( from lnbits.utils.exchange_rates import (
currencies, 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}") @api_router.get("/api/v1/lnurlscan/{code}")
async def api_lnurlscan(code: str, wallet: WalletTypeInfo = Depends(get_key_type)): async def api_lnurlscan(code: str, wallet: WalletTypeInfo = Depends(get_key_type)):
try: try:
url = lnurl.decode(code) url = str(lnurl_decode(code))
domain = urlparse(url).netloc domain = urlparse(url).netloc
except Exception: except Exception:
# parse internet identifier (user@domain.com) # parse internet identifier (user@domain.com)
@ -674,7 +675,7 @@ async def api_payments_decode(data: DecodePayment) -> JSONResponse:
payment_str = data.data payment_str = data.data
try: try:
if payment_str[:5] == "LNURL": if payment_str[:5] == "LNURL":
url = lnurl.decode(payment_str) url = str(lnurl_decode(payment_str))
return JSONResponse({"domain": url}) return JSONResponse({"domain": url})
else: else:
invoice = bolt11.decode(payment_str) invoice = bolt11.decode(payment_str)

View file

@ -1,20 +1 @@
from typing import Union from lnurl import LnurlErrorResponse, decode, encode, handle # noqa: F401
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()

15
poetry.lock generated
View file

@ -1109,18 +1109,19 @@ rediscluster = ["redis (>=4.2.0,!=4.5.2,!=4.5.3)"]
[[package]] [[package]]
name = "lnurl" name = "lnurl"
version = "0.3.6" version = "0.4.2"
description = "LNURL implementation for Python." description = "LNURL implementation for Python."
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.9,<4.0"
files = [ files = [
{file = "lnurl-0.3.6-py3-none-any.whl", hash = "sha256:579982fd8c4d25bc84c61c74ec45cb7999fa1fa2426f5d5aeb0160ba333b9c92"}, {file = "lnurl-0.4.2-py3-none-any.whl", hash = "sha256:93f79ae7e0b0c66fed5b29ac1520e85e3e2c8648561a4b42974f0b7bffd34d84"},
{file = "lnurl-0.3.6.tar.gz", hash = "sha256:8af07460115a48f3122a5a9c9a6062bee3897d5f6ab4c9a60f6561a83a8234f6"}, {file = "lnurl-0.4.2.tar.gz", hash = "sha256:c5e708b255d5333a0c08ceffe90ae4be6d2d09eb51dc8c35d19d8aa4cb21842a"},
] ]
[package.dependencies] [package.dependencies]
bech32 = "*" bech32 = ">=1.2.0,<2.0.0"
pydantic = "*" pydantic = ">=1,<2"
requests = ">=2.31.0,<3.0.0"
[[package]] [[package]]
name = "loguru" name = "loguru"
@ -2654,4 +2655,4 @@ liquid = ["wallycore"]
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.10 | ^3.9" python-versions = "^3.10 | ^3.9"
content-hash = "95ad6885f070793369450a82763ea8e4f92926d9bee02f81758636b28db55e76" content-hash = "6b44b6f3fc338be751d3c647964ae2138e928dbe479670dd04a2f274a5b03cc0"

View file

@ -12,7 +12,7 @@ ecdsa = "0.18.0"
fastapi = "0.103.1" fastapi = "0.103.1"
httpx = "0.25.0" httpx = "0.25.0"
jinja2 = "3.0.1" jinja2 = "3.0.1"
lnurl = "0.3.6" lnurl = "0.4.2"
psycopg2-binary = "2.9.7" psycopg2-binary = "2.9.7"
pydantic = "1.10.9" pydantic = "1.10.9"
pyqrcode = "1.2.1" pyqrcode = "1.2.1"