lnurl: add encode_lnurl() for console usage, fix tests
This commit is contained in:
@@ -11,8 +11,9 @@ import urllib.parse
|
|||||||
import aiohttp.client_exceptions
|
import aiohttp.client_exceptions
|
||||||
from aiohttp import ClientResponse
|
from aiohttp import ClientResponse
|
||||||
|
|
||||||
from electrum.segwit_addr import bech32_decode, Encoding, convertbits
|
from electrum import segwit_addr
|
||||||
from electrum.lnaddr import LnDecodeException
|
from electrum.segwit_addr import bech32_decode, Encoding, convertbits, bech32_encode
|
||||||
|
from electrum.lnaddr import LnDecodeException, LnEncodeException
|
||||||
from electrum.network import Network
|
from electrum.network import Network
|
||||||
from electrum.logging import get_logger
|
from electrum.logging import get_logger
|
||||||
|
|
||||||
@@ -45,6 +46,19 @@ def decode_lnurl(lnurl: str) -> str:
|
|||||||
return url
|
return url
|
||||||
|
|
||||||
|
|
||||||
|
def encode_lnurl(url: str) -> str:
|
||||||
|
"""Encode url to bech32 lnurl string."""
|
||||||
|
try:
|
||||||
|
url = url.encode("utf-8")
|
||||||
|
except UnicodeError as e:
|
||||||
|
raise LnEncodeException("invalid url") from e
|
||||||
|
bech32_data = convertbits(url, 8, 5, True)
|
||||||
|
assert bech32_data
|
||||||
|
lnurl = bech32_encode(
|
||||||
|
encoding=segwit_addr.Encoding.BECH32, hrp="lnurl", data=bech32_data)
|
||||||
|
return lnurl.upper()
|
||||||
|
|
||||||
|
|
||||||
def _is_url_safe_enough_for_lnurl(url: str) -> bool:
|
def _is_url_safe_enough_for_lnurl(url: str) -> bool:
|
||||||
u = urllib.parse.urlparse(url)
|
u = urllib.parse.urlparse(url)
|
||||||
if u.scheme.lower() == "https":
|
if u.scheme.lower() == "https":
|
||||||
|
|||||||
@@ -9,4 +9,14 @@ class TestLnurl(TestCase):
|
|||||||
"LNURL1DP68GURN8GHJ7UM9WFMXJCM99E5K7TELWY7NXENRXVMRGDTZXSENJCM98PJNWXQ96S9"
|
"LNURL1DP68GURN8GHJ7UM9WFMXJCM99E5K7TELWY7NXENRXVMRGDTZXSENJCM98PJNWXQ96S9"
|
||||||
)
|
)
|
||||||
url = lnurl.decode_lnurl(LNURL)
|
url = lnurl.decode_lnurl(LNURL)
|
||||||
self.assertTrue("https://service.io/?q=3fc3645b439ce8e7", url)
|
self.assertEqual("https://service.io/?q=3fc3645b439ce8e7", url)
|
||||||
|
|
||||||
|
def test_encode(self):
|
||||||
|
lnurl_ = lnurl.encode_lnurl("https://jhoenicke.de/.well-known/lnurlp/mempool")
|
||||||
|
self.assertEqual(
|
||||||
|
"LNURL1DP68GURN8GHJ76NGDAJKU6TRDDJJUER99UH8WETVDSKKKMN0WAHZ7MRWW4EXCUP0D4JK6UR0DAKQHMHNX2",
|
||||||
|
lnurl_)
|
||||||
|
|
||||||
|
def test_lightning_address_to_url(self):
|
||||||
|
url = lnurl.lightning_address_to_url("mempool@jhoenicke.de")
|
||||||
|
self.assertEqual("https://jhoenicke.de/.well-known/lnurlp/mempool", url)
|
||||||
|
|||||||
Reference in New Issue
Block a user