From b4dc07170f95e0737904e45b088ded332e9896a3 Mon Sep 17 00:00:00 2001
From: Bitkarrot <73979971+bitkarrot@users.noreply.github.com>
Date: Mon, 24 Jan 2022 14:51:39 -0800
Subject: [PATCH 1/4] fix curl example paths
---
.../withdraw/templates/withdraw/_api_docs.html | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/lnbits/extensions/withdraw/templates/withdraw/_api_docs.html b/lnbits/extensions/withdraw/templates/withdraw/_api_docs.html
index 77f855fdd..c1172bcdb 100644
--- a/lnbits/extensions/withdraw/templates/withdraw/_api_docs.html
+++ b/lnbits/extensions/withdraw/templates/withdraw/_api_docs.html
@@ -22,7 +22,7 @@
[<withdraw_link_object>, ...]
curl -X GET {{ request.base_url }}api/v1/links -H "X-Api-Key: {{
+ >curl -X GET {{ request.base_url }}withdraw/api/v1/links -H "X-Api-Key: {{
user.wallets[0].inkey }}"
@@ -49,7 +49,7 @@
{"lnurl": <string>}
curl -X GET {{ request.base_url }}api/v1/links/<withdraw_id> -H
+ >curl -X GET {{ request.base_url }}withdraw/api/v1/links/<withdraw_id> -H
"X-Api-Key: {{ user.wallets[0].inkey }}"
@@ -78,7 +78,7 @@
{"lnurl": <string>}
curl -X POST {{ request.base_url }}api/v1/links -d '{"title":
+ >curl -X POST {{ request.base_url }}withdraw/api/v1/links -d '{"title":
<string>, "min_withdrawable": <integer>,
"max_withdrawable": <integer>, "uses": <integer>,
"wait_time": <integer>, "is_unique": <boolean>}' -H
@@ -114,7 +114,7 @@
{"lnurl": <string>}
Curl example
curl -X PUT {{ request.base_url }}api/v1/links/<withdraw_id> -d
+ >curl -X PUT {{ request.base_url }}withdraw/api/v1/links/<withdraw_id> -d
'{"title": <string>, "min_withdrawable": <integer>,
"max_withdrawable": <integer>, "uses": <integer>,
"wait_time": <integer>, "is_unique": <boolean>}' -H
@@ -142,7 +142,7 @@
Curl example
curl -X DELETE {{ request.base_url }}api/v1/links/<withdraw_id>
+ >curl -X DELETE {{ request.base_url }}withdraw/api/v1/links/<withdraw_id>
-H "X-Api-Key: {{ user.wallets[0].adminkey }}"
@@ -170,7 +170,7 @@
Curl example
curl -X GET {{ request.base_url
- }}api/v1/links/<the_hash>/<lnurl_id> -H "X-Api-Key: {{
+ }}withdraw/api/v1/links/<the_hash>/<lnurl_id> -H "X-Api-Key: {{
user.wallets[0].inkey }}"
@@ -191,7 +191,7 @@
>
Curl example
curl -X GET {{ request.base_url }}/withdraw/img/<lnurl_id>"
+ >curl -X GET {{ request.base_url }}withdraw/img/<lnurl_id>"
From b00a39a7cec7f23d6f9ad6226b898913bf1d1bf4 Mon Sep 17 00:00:00 2001
From: pseudozach
Date: Mon, 24 Jan 2022 15:58:51 -0800
Subject: [PATCH 2/4] fix livestream startup issue
---
lnbits/extensions/livestream/__init__.py | 2 +-
lnbits/extensions/livestream/views.py | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lnbits/extensions/livestream/__init__.py b/lnbits/extensions/livestream/__init__.py
index 38d143c3b..17fc2d3b8 100644
--- a/lnbits/extensions/livestream/__init__.py
+++ b/lnbits/extensions/livestream/__init__.py
@@ -30,6 +30,6 @@ from .views import * # noqa
from .views_api import * # noqa
-def lnticket_start():
+def livestream_start():
loop = asyncio.get_event_loop()
loop.create_task(catch_everything_and_restart(wait_for_paid_invoices))
diff --git a/lnbits/extensions/livestream/views.py b/lnbits/extensions/livestream/views.py
index f6afc1fc1..4f1bd1c5c 100644
--- a/lnbits/extensions/livestream/views.py
+++ b/lnbits/extensions/livestream/views.py
@@ -1,5 +1,5 @@
from http import HTTPStatus
-from mmap import MAP_DENYWRITE
+# from mmap import MAP_DENYWRITE
from fastapi.param_functions import Depends
from fastapi.params import Query
From b5aad94ecd908a84ae48153362e8584ffa3fa17d Mon Sep 17 00:00:00 2001
From: benarc
Date: Thu, 10 Feb 2022 13:55:45 +0000
Subject: [PATCH 3/4] rolled back admin fix
---
lnbits/core/crud.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py
index 61710a722..97b6586e7 100644
--- a/lnbits/core/crud.py
+++ b/lnbits/core/crud.py
@@ -61,7 +61,6 @@ async def get_user(user_id: str, conn: Optional[Connection] = None) -> Optional[
email=user["email"],
extensions=[e[0] for e in extensions],
wallets=[Wallet(**w) for w in wallets],
- admin=LNBITS_ADMIN_USERS and user["id"] in [x.strip() for x in LNBITS_ADMIN_USERS]
)
From f1fb569e2b03515dd3881d6d48af3ce7403d52f5 Mon Sep 17 00:00:00 2001
From: benarc
Date: Fri, 11 Feb 2022 10:03:26 +0000
Subject: [PATCH 4/4] lnurlpayout fix
---
lnbits/extensions/lnurlpayout/tasks.py | 33 ++++++++++++++--------
lnbits/extensions/lnurlpayout/views_api.py | 29 +++++++++++++------
2 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/lnbits/extensions/lnurlpayout/tasks.py b/lnbits/extensions/lnurlpayout/tasks.py
index e0757129b..7f2a83248 100644
--- a/lnbits/extensions/lnurlpayout/tasks.py
+++ b/lnbits/extensions/lnurlpayout/tasks.py
@@ -1,15 +1,17 @@
import asyncio
-import json
+from http import HTTPStatus
+
import httpx
+from starlette.exceptions import HTTPException
from lnbits.core import db as core_db
-from lnbits.core.models import Payment
-from lnbits.tasks import register_invoice_listener
-from lnbits.core.views.api import api_wallet
from lnbits.core.crud import get_wallet
-from lnbits.core.views.api import api_payment, api_payments_decode, pay_invoice
+from lnbits.core.models import Payment
+from lnbits.core.services import pay_invoice
+from lnbits.core.views.api import api_payments_decode
+from lnbits.tasks import register_invoice_listener
-from .crud import get_lnurlpayout, get_lnurlpayout_from_wallet
+from .crud import get_lnurlpayout_from_wallet
async def wait_for_paid_invoices():
@@ -25,16 +27,16 @@ async def on_invoice_paid(payment: Payment) -> None:
try:
# Check its got a payout associated with it
lnurlpayout_link = await get_lnurlpayout_from_wallet(payment.wallet_id)
+ print("LNURLpayout", lnurlpayout_link)
if lnurlpayout_link:
# Check the wallet balance is more than the threshold
wallet = await get_wallet(lnurlpayout_link.wallet)
- if wallet.balance < lnurlpayout_link.threshold + (
- lnurlpayout_link.threshold * 0.02
- ):
- return
+ threshold = lnurlpayout_link.threshold + (lnurlpayout_link.threshold * 0.02)
+ if wallet.balance < threshold:
+ return
# Get the invoice from the LNURL to pay
async with httpx.AsyncClient() as client:
try:
@@ -43,6 +45,7 @@ async def on_invoice_paid(payment: Payment) -> None:
raise HTTPException(
status_code=HTTPStatus.FORBIDDEN, detail="LNURL broken"
)
+
try:
r = await client.get(str(url["domain"]), timeout=40)
res = r.json()
@@ -56,6 +59,12 @@ async def on_invoice_paid(payment: Payment) -> None:
timeout=40,
)
res = r.json()
+
+ if hasattr(res, "status") and res["status"] == "ERROR":
+ raise HTTPException(
+ status_code=HTTPStatus.FORBIDDEN,
+ detail=res["reason"],
+ )
try:
await pay_invoice(
wallet_id=payment.wallet_id,
@@ -65,7 +74,9 @@ async def on_invoice_paid(payment: Payment) -> None:
return
except:
pass
- except:
+
+ except Exception as e:
+ print("ERROR", str(e))
return
except (httpx.ConnectError, httpx.RequestError):
return
diff --git a/lnbits/extensions/lnurlpayout/views_api.py b/lnbits/extensions/lnurlpayout/views_api.py
index d45de6fe6..67562909c 100644
--- a/lnbits/extensions/lnurlpayout/views_api.py
+++ b/lnbits/extensions/lnurlpayout/views_api.py
@@ -4,7 +4,8 @@ from fastapi import Query
from fastapi.params import Depends
from starlette.exceptions import HTTPException
-from lnbits.core.crud import get_user, get_payments
+from lnbits.core.crud import get_payments, get_user
+from lnbits.core.models import Payment
from lnbits.core.services import create_invoice
from lnbits.core.views.api import api_payment, api_payments_decode
from lnbits.decorators import WalletTypeInfo, get_key_type, require_admin_key
@@ -14,10 +15,10 @@ from .crud import (
create_lnurlpayout,
delete_lnurlpayout,
get_lnurlpayout,
- get_lnurlpayouts,
get_lnurlpayout_from_wallet,
+ get_lnurlpayouts,
)
-from .models import lnurlpayout, CreateLnurlPayoutData
+from .models import CreateLnurlPayoutData, lnurlpayout
from .tasks import on_invoice_paid
@@ -87,14 +88,24 @@ async def api_lnurlpayout_check(
lnurlpayout_id: str, wallet: WalletTypeInfo = Depends(get_key_type)
):
lnurlpayout = await get_lnurlpayout(lnurlpayout_id)
- payments = await get_payments(
- wallet_id=lnurlpayout.wallet,
- complete=True,
+ ## THIS
+ mock_payment = Payment(
+ checking_id="mock",
pending=False,
- outgoing=True,
- incoming=True,
+ amount=1,
+ fee=1,
+ time=0000,
+ bolt11="mock",
+ preimage="mock",
+ payment_hash="mock",
+ wallet_id=lnurlpayout.wallet,
)
- result = await on_invoice_paid(payments[0])
+ ## INSTEAD OF THIS
+ # payments = await get_payments(
+ # wallet_id=lnurlpayout.wallet, complete=True, pending=False, outgoing=True, incoming=True
+ # )
+
+ result = await on_invoice_paid(mock_payment)
return