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/6] 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/6] 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 da6a2e772b5624125cafe28409407949a78718bf Mon Sep 17 00:00:00 2001 From: Arc <33088785+arcbtc@users.noreply.github.com> Date: Thu, 10 Feb 2022 09:56:02 +0000 Subject: [PATCH 3/6] Revert "fix disapearing admin extension" --- lnbits/core/crud.py | 14 ++++++-------- lnbits/core/views/generic.py | 4 +++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index e1539212e..ad2d9f2cc 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -1,15 +1,15 @@ -import datetime import json -from typing import Any, Dict, List, Optional -from urllib.parse import urlparse +import datetime from uuid import uuid4 +from typing import List, Optional, Dict, Any +from urllib.parse import urlparse from lnbits import bolt11 -from lnbits.db import COCKROACH, POSTGRES, Connection -from lnbits.settings import DEFAULT_WALLET_NAME, LNBITS_ADMIN_USERS +from lnbits.db import Connection, POSTGRES, COCKROACH +from lnbits.settings import DEFAULT_WALLET_NAME from . import db -from .models import BalanceCheck, Payment, User, Wallet +from .models import User, Wallet, Payment, BalanceCheck # accounts # -------- @@ -53,7 +53,6 @@ async def get_user(user_id: str, conn: Optional[Connection] = None) -> Optional[ """, (user_id,), ) - else: return None @@ -62,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] ) diff --git a/lnbits/core/views/generic.py b/lnbits/core/views/generic.py index d2fd8f412..d917ffab8 100644 --- a/lnbits/core/views/generic.py +++ b/lnbits/core/views/generic.py @@ -15,8 +15,8 @@ from lnbits.core.models import User from lnbits.decorators import check_user_exists from lnbits.helpers import template_renderer, url_for from lnbits.settings import ( - LNBITS_ADMIN_USERS, LNBITS_ALLOWED_USERS, + LNBITS_ADMIN_USERS, LNBITS_SITE_TITLE, SERVICE_FEE, ) @@ -118,6 +118,8 @@ async def wallet( return template_renderer().TemplateResponse( "error.html", {"request": request, "err": "User not authorized."} ) + if LNBITS_ADMIN_USERS and user_id in LNBITS_ADMIN_USERS: + user.admin = True if not wallet_id: if user.wallets and not wallet_name: wallet = user.wallets[0] From 0f79213b0ffad1972c23424b9e53456bacfb57e3 Mon Sep 17 00:00:00 2001 From: benarc Date: Thu, 10 Feb 2022 10:09:44 +0000 Subject: [PATCH 4/6] Tals admin extension fix --- lnbits/core/crud.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lnbits/core/crud.py b/lnbits/core/crud.py index ad2d9f2cc..61710a722 100644 --- a/lnbits/core/crud.py +++ b/lnbits/core/crud.py @@ -6,7 +6,7 @@ from urllib.parse import urlparse from lnbits import bolt11 from lnbits.db import Connection, POSTGRES, COCKROACH -from lnbits.settings import DEFAULT_WALLET_NAME +from lnbits.settings import DEFAULT_WALLET_NAME, LNBITS_ADMIN_USERS from . import db from .models import User, Wallet, Payment, BalanceCheck @@ -61,6 +61,7 @@ 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 b5aad94ecd908a84ae48153362e8584ffa3fa17d Mon Sep 17 00:00:00 2001 From: benarc Date: Thu, 10 Feb 2022 13:55:45 +0000 Subject: [PATCH 5/6] 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 6/6] 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