commit
11ce32cf04
|
@ -21,8 +21,9 @@ async def index(request: Request, user: User = Depends(check_user_exists)):
|
||||||
|
|
||||||
|
|
||||||
@livestream_ext.get("/track/{track_id}", name="livestream.track_redirect_download")
|
@livestream_ext.get("/track/{track_id}", name="livestream.track_redirect_download")
|
||||||
async def track_redirect_download(track_id, request: Request):
|
async def track_redirect_download(track_id, p: str = Query(...)):
|
||||||
payment_hash = request.path_params["p"]
|
print("BOO", track_id, p)
|
||||||
|
payment_hash = p
|
||||||
track = await get_track(track_id)
|
track = await get_track(track_id)
|
||||||
ls = await get_livestream_by_track(track_id)
|
ls = await get_livestream_by_track(track_id)
|
||||||
payment: Payment = await get_wallet_payment(ls.wallet, payment_hash)
|
payment: Payment = await get_wallet_payment(ls.wallet, payment_hash)
|
||||||
|
|
|
@ -509,6 +509,13 @@
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
self.ChargeLinks.push(mapCharge(response.data))
|
self.ChargeLinks.push(mapCharge(response.data))
|
||||||
self.formDialogCharge.show = false
|
self.formDialogCharge.show = false
|
||||||
|
self.formDialogCharge.data = {
|
||||||
|
onchain: false,
|
||||||
|
lnbits: false,
|
||||||
|
description: '',
|
||||||
|
time: null,
|
||||||
|
amount: null
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(function (error) {
|
.catch(function (error) {
|
||||||
LNbits.utils.notifyApiError(error)
|
LNbits.utils.notifyApiError(error)
|
||||||
|
|
|
@ -2,9 +2,11 @@ from datetime import datetime
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
|
|
||||||
import shortuuid # type: ignore
|
import shortuuid # type: ignore
|
||||||
|
import json
|
||||||
from fastapi import HTTPException
|
from fastapi import HTTPException
|
||||||
from fastapi.param_functions import Query
|
from fastapi.param_functions import Query
|
||||||
from starlette.requests import Request
|
from starlette.requests import Request
|
||||||
|
from starlette.responses import HTMLResponse # type: ignore
|
||||||
|
|
||||||
from lnbits.core.services import pay_invoice
|
from lnbits.core.services import pay_invoice
|
||||||
|
|
||||||
|
@ -16,7 +18,7 @@ from .crud import get_withdraw_link_by_hash, update_withdraw_link
|
||||||
|
|
||||||
@withdraw_ext.get(
|
@withdraw_ext.get(
|
||||||
"/api/v1/lnurl/{unique_hash}",
|
"/api/v1/lnurl/{unique_hash}",
|
||||||
status_code=HTTPStatus.OK,
|
response_class=HTMLResponse,
|
||||||
name="withdraw.api_lnurl_response",
|
name="withdraw.api_lnurl_response",
|
||||||
)
|
)
|
||||||
async def api_lnurl_response(request: Request, unique_hash):
|
async def api_lnurl_response(request: Request, unique_hash):
|
||||||
|
@ -35,17 +37,67 @@ async def api_lnurl_response(request: Request, unique_hash):
|
||||||
# WHAT STATUS_CODE TO USE??
|
# WHAT STATUS_CODE TO USE??
|
||||||
detail="Withdraw is spent."
|
detail="Withdraw is spent."
|
||||||
)
|
)
|
||||||
# return ({"status": "ERROR", "reason": "Withdraw is spent."},
|
url = request.url_for("withdraw.api_lnurl_callback", unique_hash=link.unique_hash)
|
||||||
# HTTPStatus.OK,
|
withdrawResponse = {
|
||||||
# )
|
"tag": "withdrawRequest",
|
||||||
|
"callback": url,
|
||||||
|
"k1": link.k1,
|
||||||
|
"minWithdrawable": link.min_withdrawable * 1000,
|
||||||
|
"maxWithdrawable": link.max_withdrawable * 1000,
|
||||||
|
"defaultDescription": link.title,
|
||||||
|
}
|
||||||
|
return json.dumps(withdrawResponse)
|
||||||
|
|
||||||
return link.lnurl_response(request).dict()
|
|
||||||
|
# FOR LNURLs WHICH ARE UNIQUE
|
||||||
|
|
||||||
|
|
||||||
|
@withdraw_ext.get(
|
||||||
|
"/api/v1/lnurl/{unique_hash}/{id_unique_hash}",
|
||||||
|
response_class=HTMLResponse,
|
||||||
|
name="withdraw.api_lnurl_multi_response",
|
||||||
|
)
|
||||||
|
async def api_lnurl_multi_response(request: Request, unique_hash, id_unique_hash):
|
||||||
|
link = await get_withdraw_link_by_hash(unique_hash)
|
||||||
|
|
||||||
|
if not link:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.OK, detail="LNURL-withdraw not found."
|
||||||
|
)
|
||||||
|
|
||||||
|
if link.is_spent:
|
||||||
|
raise HTTPException(status_code=HTTPStatus.OK, detail="Withdraw is spent.")
|
||||||
|
|
||||||
|
useslist = link.usescsv.split(",")
|
||||||
|
found = False
|
||||||
|
for x in useslist:
|
||||||
|
tohash = link.id + link.unique_hash + str(x)
|
||||||
|
if id_unique_hash == shortuuid.uuid(name=tohash):
|
||||||
|
found = True
|
||||||
|
if not found:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=HTTPStatus.OK, detail="LNURL-withdraw not found."
|
||||||
|
)
|
||||||
|
|
||||||
|
url = request.url_for("withdraw.api_lnurl_callback", unique_hash=link.unique_hash)
|
||||||
|
withdrawResponse = {
|
||||||
|
"tag": "withdrawRequest",
|
||||||
|
"callback": url,
|
||||||
|
"k1": link.k1,
|
||||||
|
"minWithdrawable": link.min_withdrawable * 1000,
|
||||||
|
"maxWithdrawable": link.max_withdrawable * 1000,
|
||||||
|
"defaultDescription": link.title,
|
||||||
|
}
|
||||||
|
return json.dumps(withdrawResponse)
|
||||||
|
|
||||||
|
|
||||||
# CALLBACK
|
# CALLBACK
|
||||||
|
|
||||||
|
@withdraw_ext.get(
|
||||||
@withdraw_ext.get("/api/v1/lnurl/cb/{unique_hash}", name="withdraw.api_lnurl_callback")
|
"/api/v1/lnurl/cb/{unique_hash}",
|
||||||
|
status_code=HTTPStatus.OK,
|
||||||
|
name="withdraw.api_lnurl_callback"
|
||||||
|
)
|
||||||
async def api_lnurl_callback(
|
async def api_lnurl_callback(
|
||||||
request: Request,
|
request: Request,
|
||||||
unique_hash: str = Query(...),
|
unique_hash: str = Query(...),
|
||||||
|
@ -102,35 +154,3 @@ async def api_lnurl_callback(
|
||||||
await update_withdraw_link(link.id, **changesback)
|
await update_withdraw_link(link.id, **changesback)
|
||||||
return {"status": "ERROR", "reason": "Link not working"}
|
return {"status": "ERROR", "reason": "Link not working"}
|
||||||
|
|
||||||
|
|
||||||
# FOR LNURLs WHICH ARE UNIQUE
|
|
||||||
|
|
||||||
|
|
||||||
@withdraw_ext.get(
|
|
||||||
"/api/v1/lnurl/{unique_hash}/{id_unique_hash}",
|
|
||||||
status_code=HTTPStatus.OK,
|
|
||||||
name="withdraw.api_lnurl_multi_response",
|
|
||||||
)
|
|
||||||
async def api_lnurl_multi_response(request: Request, unique_hash, id_unique_hash):
|
|
||||||
link = await get_withdraw_link_by_hash(unique_hash)
|
|
||||||
|
|
||||||
if not link:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.OK, detail="LNURL-withdraw not found."
|
|
||||||
)
|
|
||||||
|
|
||||||
if link.is_spent:
|
|
||||||
raise HTTPException(status_code=HTTPStatus.OK, detail="Withdraw is spent.")
|
|
||||||
|
|
||||||
useslist = link.usescsv.split(",")
|
|
||||||
found = False
|
|
||||||
for x in useslist:
|
|
||||||
tohash = link.id + link.unique_hash + str(x)
|
|
||||||
if id_unique_hash == shortuuid.uuid(name=tohash):
|
|
||||||
found = True
|
|
||||||
if not found:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=HTTPStatus.OK, detail="LNURL-withdraw not found."
|
|
||||||
)
|
|
||||||
|
|
||||||
return link.lnurl_response(request).dict()
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import random
|
||||||
from functools import partial, wraps
|
from functools import partial, wraps
|
||||||
from os import getenv
|
from os import getenv
|
||||||
from typing import AsyncGenerator, Optional
|
from typing import AsyncGenerator, Optional
|
||||||
|
import time
|
||||||
|
|
||||||
from .base import (
|
from .base import (
|
||||||
InvoiceResponse,
|
InvoiceResponse,
|
||||||
|
@ -30,6 +31,10 @@ def async_wrap(func):
|
||||||
return run
|
return run
|
||||||
|
|
||||||
|
|
||||||
|
def _pay_invoice(ln, bolt11):
|
||||||
|
return ln.pay(bolt11)
|
||||||
|
|
||||||
|
|
||||||
def _paid_invoices_stream(ln, last_pay_index):
|
def _paid_invoices_stream(ln, last_pay_index):
|
||||||
return ln.waitanyinvoice(last_pay_index)
|
return ln.waitanyinvoice(last_pay_index)
|
||||||
|
|
||||||
|
@ -99,7 +104,8 @@ class CLightningWallet(Wallet):
|
||||||
|
|
||||||
async def pay_invoice(self, bolt11: str) -> PaymentResponse:
|
async def pay_invoice(self, bolt11: str) -> PaymentResponse:
|
||||||
try:
|
try:
|
||||||
r = self.ln.pay(bolt11)
|
wrapped = async_wrap(_pay_invoice)
|
||||||
|
r = await wrapped(self.ln, bolt11)
|
||||||
except RpcError as exc:
|
except RpcError as exc:
|
||||||
return PaymentResponse(False, None, 0, None, str(exc))
|
return PaymentResponse(False, None, 0, None, str(exc))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user