Some checks failed
lint.yml / Revert "fix: allow HTTP LNURL for RFC1918/loopback baseurls (#2)" (push) Failing after 0s
This reverts commit66026ab. Closes #2 as resolved by switching the dev LNbits to TLS (self-signed cert) instead of carving out plain HTTP for RFC1918 hosts. With HTTPS the producer-side python-lnurl validation accepts any host, AND the lnbits-core consumer-side `lnurlscan` accepts it too — the symmetric problem the carve-out couldn't solve on its own. `create_lnurl_from_baseurl` (#1, `e9d911e`) is kept — it's orthogonal to the transport scheme and still wanted for the nostr-transport `lnurl=null` fix.
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from fastapi import Request
|
|
from lnbits.settings import settings
|
|
from lnurl import Lnurl
|
|
from lnurl import encode as lnurl_encode
|
|
from shortuuid import uuid
|
|
|
|
from .models import WithdrawLink
|
|
|
|
|
|
def create_lnurl(link: WithdrawLink, req: Request) -> Lnurl:
|
|
if link.is_unique:
|
|
usescssv = link.usescsv.split(",")
|
|
tohash = link.id + link.unique_hash + usescssv[link.number]
|
|
multihash = uuid(name=tohash)
|
|
url = req.url_for(
|
|
"withdraw.api_lnurl_multi_response",
|
|
unique_hash=link.unique_hash,
|
|
id_unique_hash=multihash,
|
|
)
|
|
else:
|
|
url = req.url_for("withdraw.api_lnurl_response", unique_hash=link.unique_hash)
|
|
|
|
try:
|
|
return lnurl_encode(str(url))
|
|
except Exception as e:
|
|
raise ValueError(
|
|
f"Error creating LNURL with url: `{url!s}`, "
|
|
"check your webserver proxy configuration."
|
|
) from e
|
|
|
|
|
|
def create_lnurl_from_baseurl(link: WithdrawLink) -> Lnurl:
|
|
"""
|
|
Same shape as `create_lnurl`, but composes the callback URL from
|
|
`settings.lnbits_baseurl` instead of a FastAPI `Request`. Used by
|
|
the nostr-transport RPC handlers, which have no HTTP request to
|
|
derive a base URL from.
|
|
"""
|
|
base = settings.lnbits_baseurl.rstrip("/")
|
|
if link.is_unique:
|
|
usescssv = link.usescsv.split(",")
|
|
tohash = link.id + link.unique_hash + usescssv[link.number]
|
|
multihash = uuid(name=tohash)
|
|
url = f"{base}/withdraw/api/v1/lnurl/{link.unique_hash}/{multihash}"
|
|
else:
|
|
url = f"{base}/withdraw/api/v1/lnurl/{link.unique_hash}"
|
|
|
|
try:
|
|
return lnurl_encode(url)
|
|
except Exception as e:
|
|
raise ValueError(
|
|
f"Error creating LNURL with url: `{url!s}`, "
|
|
"check your `LNBITS_BASEURL` configuration."
|
|
) from e
|