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 example
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 example
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 example
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