FIX: generate LNURL server-side for unique voucher links (#68)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
PatMulligan 2025-12-27 09:45:57 +01:00 committed by GitHub
commit 8a20df70fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 19 additions and 3 deletions

View file

@ -47,6 +47,11 @@ class WithdrawLink(BaseModel):
"Example: lnurlw://${window.location.hostname}/lnurlw/${id}"
),
)
lnurl_url: str | None = Field(
default=None,
no_database=True,
description="The raw LNURL callback URL (use for QR code generation)",
)
@property
def is_spent(self) -> bool:

View file

@ -138,7 +138,7 @@ window.app = Vue.createApp({
const link = _.findWhere(this.withdrawLinks, {id: linkId})
this.qrCodeDialog.data = _.clone(link)
this.qrCodeDialog.show = true
this.activeUrl = `${window.location.origin}/withdraw/api/v1/lnurl/${link.unique_hash}`
this.activeUrl = link.lnurl_url
},
openUpdateDialog(linkId) {
let link = _.findWhere(this.withdrawLinks, {id: linkId})

View file

@ -55,7 +55,7 @@
data() {
return {
spent: {{ 'true' if spent else 'false' }},
url: `${window.location.origin}/withdraw/api/v1/lnurl/{{ unique_hash }}`,
url: '{{ lnurl_url }}',
lnurl: '',
nfcTagWriting: false
}

View file

@ -33,12 +33,20 @@ async def display(request: Request, link_id):
status_code=HTTPStatus.NOT_FOUND, detail="Withdraw link does not exist."
)
try:
lnurl = create_lnurl(link, request)
except ValueError as exc:
raise HTTPException(
status_code=HTTPStatus.INTERNAL_SERVER_ERROR,
detail=str(exc),
) from exc
return withdraw_renderer().TemplateResponse(
"withdraw/display.html",
{
"request": request,
"spent": link.is_spent,
"unique_hash": link.unique_hash,
"lnurl_url": str(lnurl.url),
},
)

View file

@ -45,6 +45,7 @@ async def api_links(
detail=str(exc),
) from exc
linkk.lnurl = str(lnurl.bech32)
linkk.lnurl_url = str(lnurl.url)
return links
@ -75,6 +76,7 @@ async def api_link_retrieve(
detail=str(exc),
) from exc
link.lnurl = str(lnurl.bech32)
link.lnurl_url = str(lnurl.url)
return link
@ -166,6 +168,7 @@ async def api_link_create_or_update(
) from exc
link.lnurl = str(lnurl.bech32)
link.lnurl_url = str(lnurl.url)
return link