Added decode lnurl and extra payment check

This commit is contained in:
Ben Arc 2021-10-20 03:59:24 +01:00
parent b6f5052da0
commit 19df2f888b
2 changed files with 66 additions and 2 deletions

View file

@ -19,7 +19,7 @@
<q-card-section> <q-card-section>
<code><span class="text-light-green">GET</span> /api/v1/wallet</code> <code><span class="text-light-green">GET</span> /api/v1/wallet</code>
<h5 class="text-caption q-mt-sm q-mb-none">Headers</h5> <h5 class="text-caption q-mt-sm q-mb-none">Headers</h5>
<code>{"X-Api-Key": "<i>{{ wallet.adminkey }}</i>"}</code><br /> <code>{"X-Api-Key": "<i>{{ wallet.inkey }}</i>"}</code><br />
<h5 class="text-caption q-mt-sm q-mb-none"> <h5 class="text-caption q-mt-sm q-mb-none">
Returns 200 OK (application/json) Returns 200 OK (application/json)
</h5> </h5>
@ -94,6 +94,35 @@
</q-card-section> </q-card-section>
</q-card> </q-card>
</q-expansion-item> </q-expansion-item>
<q-expansion-item
group="api"
dense
expand-separator
label="Decode an invoice"
>
<q-card>
<q-card-section>
<code
><span class="text-light-green">POST</span>
/api/v1/payments/decode</code
>
<h5 class="text-caption q-mt-sm q-mb-none">Headers</h5>
<code>{"X-Api-Key": "<i>{{ wallet.inkey }}</i>"}</code><br />
<h5 class="text-caption q-mt-sm q-mb-none">Body (application/json)</h5>
<code>{"invoice": &lt;string&gt;}</code>
<h5 class="text-caption q-mt-sm q-mb-none">
Returns 200 (application/json)
</h5>
<h5 class="text-caption q-mt-sm q-mb-none">Curl example</h5>
<code
>curl -X POST {{ request.url_root }}api/v1/payments/decode -d
'{"data": &lt;bolt11/lnurl, string&gt;}' -H "X-Api-Key:
<i>{{ wallet.inkey }}</i>" -H "Content-type: application/json"</code
>
</q-card-section>
</q-card>
</q-expansion-item>
<q-expansion-item <q-expansion-item
group="api" group="api"
dense dense

View file

@ -5,7 +5,7 @@ from binascii import unhexlify
from http import HTTPStatus from http import HTTPStatus
from typing import Dict, Optional, Union from typing import Dict, Optional, Union
from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse from urllib.parse import ParseResult, parse_qs, urlencode, urlparse, urlunparse
from lnbits.bolt11 import Invoice
import httpx import httpx
from fastapi import Query, Request from fastapi import Query, Request
from fastapi.exceptions import HTTPException from fastapi.exceptions import HTTPException
@ -34,6 +34,7 @@ from ..services import (
create_invoice, create_invoice,
pay_invoice, pay_invoice,
perform_lnurlauth, perform_lnurlauth,
check_invoice_status,
) )
from ..tasks import api_invoice_listeners from ..tasks import api_invoice_listeners
@ -61,6 +62,16 @@ async def api_update_wallet(
@core_app.get("/api/v1/payments") @core_app.get("/api/v1/payments")
async def api_payments(wallet: WalletTypeInfo = Depends(get_key_type)): async def api_payments(wallet: WalletTypeInfo = Depends(get_key_type)):
await get_payments(
wallet_id=wallet.wallet.id,
pending=True,
complete=True,
)
pendingPayments = await get_payments(wallet_id=wallet.wallet.id, pending=True)
for payment in pendingPayments:
await check_invoice_status(
wallet_id=payment.wallet_id, payment_hash=payment.payment_hash
)
return await get_payments(wallet_id=wallet.wallet.id, pending=True, complete=True) return await get_payments(wallet_id=wallet.wallet.id, pending=True, complete=True)
@ -441,6 +452,30 @@ async def api_lnurlscan(code: str):
return params return params
@core_app.post("/api/v1/payments/decode")
async def api_payments_decode(data: str = Query(None)):
try:
if g.data["data"][:5] == "LNURL":
url = lnurl.decode(g.data["data"])
return {"domain": url}
else:
invoice = bolt11.decode(g.data["data"])
return {
"payment_hash": invoice.payment_hash,
"amount_msat": invoice.amount_msat,
"description": invoice.description,
"description_hash": invoice.description_hash,
"payee": invoice.payee,
"date": invoice.date,
"expiry": invoice.expiry,
"secret": invoice.secret,
"route_hints": invoice.route_hints,
"min_final_cltv_expiry": invoice.min_final_cltv_expiry,
}
except:
return {"message": "Failed to decode"}
@core_app.post("/api/v1/lnurlauth", dependencies=[Depends(WalletAdminKeyChecker())]) @core_app.post("/api/v1/lnurlauth", dependencies=[Depends(WalletAdminKeyChecker())])
async def api_perform_lnurlauth(callback: str): async def api_perform_lnurlauth(callback: str):
err = await perform_lnurlauth(callback) err = await perform_lnurlauth(callback)