fix: allow HTTP LNURL for RFC1918/loopback baseurls (#2)
Some checks failed
lint.yml / fix: allow HTTP LNURL for RFC1918/loopback baseurls (#2) (push) Failing after 0s
Some checks failed
lint.yml / fix: allow HTTP LNURL for RFC1918/loopback baseurls (#2) (push) Failing after 0s
`python-lnurl`'s `lnurl_encode` rejects HTTP URLs whose host isn't `localhost`/`127.0.0.1`/`.onion`, so a regtest LNbits on a LAN IP (e.g. `http://192.168.0.32:5001`) made `_populate_lnurl` swallow `InvalidUrl` and leave `link.lnurl=None` — breaking the LAN-local cross-device smoke flow. Extend the existing localhost carve-out to the full RFC1918 set: loopback, `10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`. These are intrinsically unreachable from the public internet, so producing an HTTP LNURL pointing at one is unambiguously a dev/internal scenario. For matching URLs, skip `lnurl_encode`'s host validation by calling the public `lnurl.helpers.url_encode` directly (which bech32-encodes without URL validation). Everything else still goes through the validated path — production with HTTP + public IP/hostname stays rejected. `create_lnurl_from_baseurl` now returns `(bech32, url)` directly rather than a `Lnurl` instance, since the private-network branch can't construct a real `Lnurl` (its `__new__` re-runs the same host validation on bech32-decode). The caller `_populate_lnurl` was the only consumer. Test coverage on `_is_private_network_http` covers the carve-out boundary (loopback, RFC1918, the just-outside-RFC1918 ranges, public hosts, and the `https://` case). The full encode path is exercised via regtest smoke. Closes #2.
This commit is contained in:
parent
e9d911e593
commit
66026abe96
3 changed files with 107 additions and 5 deletions
|
|
@ -211,9 +211,7 @@ def _populate_lnurl(link: WithdrawLink) -> WithdrawLink:
|
|||
duplicating state LNbits already knows. See aiolabs/withdraw#1.
|
||||
"""
|
||||
try:
|
||||
encoded = create_lnurl_from_baseurl(link)
|
||||
link.lnurl = str(encoded.bech32)
|
||||
link.lnurl_url = str(encoded.url)
|
||||
link.lnurl, link.lnurl_url = create_lnurl_from_baseurl(link)
|
||||
except ValueError:
|
||||
pass
|
||||
return link
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue