diff --git a/lnbits/extensions/bleskomat/helpers.py b/lnbits/extensions/bleskomat/helpers.py index 1062ca27..6e55b3df 100644 --- a/lnbits/extensions/bleskomat/helpers.py +++ b/lnbits/extensions/bleskomat/helpers.py @@ -35,8 +35,8 @@ def generate_bleskomat_lnurl_secret(api_key_id: str, signature: str): return m.hexdigest() -def get_callback_url(request: Request): - return request.url_for("bleskomat.api_bleskomat_lnurl") +def get_callback_url(req: Request): + return req.url_for("bleskomat.api_bleskomat_lnurl") def is_supported_lnurl_subprotocol(tag: str) -> bool: diff --git a/lnbits/extensions/bleskomat/lnurl_api.py b/lnbits/extensions/bleskomat/lnurl_api.py index fa3e6133..4faa0ee9 100644 --- a/lnbits/extensions/bleskomat/lnurl_api.py +++ b/lnbits/extensions/bleskomat/lnurl_api.py @@ -25,9 +25,9 @@ from .helpers import ( # Handles signed URL from Bleskomat ATMs and "action" callback of auto-generated LNURLs. @bleskomat_ext.get("/u", name="bleskomat.api_bleskomat_lnurl") -async def api_bleskomat_lnurl(request: Request): +async def api_bleskomat_lnurl(req: Request): try: - query = request.query_params + query = req.query_params # Unshorten query if "s" is used instead of "signature". if "s" in query: @@ -96,7 +96,7 @@ async def api_bleskomat_lnurl(request: Request): ) # Reply with LNURL response object. - return lnurl.get_info_response_object(secret) + return lnurl.get_info_response_object(secret, req) # No signature provided. # Treat as "action" callback. diff --git a/lnbits/extensions/bleskomat/models.py b/lnbits/extensions/bleskomat/models.py index e96ddb80..89aefe1f 100644 --- a/lnbits/extensions/bleskomat/models.py +++ b/lnbits/extensions/bleskomat/models.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, validator from starlette.requests import Request from lnbits import bolt11 -from lnbits.core.services import pay_invoice +from lnbits.core.services import pay_invoice, PaymentFailure from . import db from .exchange_rates import exchange_rate_providers, fiat_currencies @@ -119,13 +119,13 @@ class BleskomatLnurl(BaseModel): tag = self.tag if tag == "withdrawRequest": try: - payment_hash = await pay_invoice( + await pay_invoice( wallet_id=self.wallet, payment_request=query["pr"] ) + except (ValueError, PermissionError, PaymentFailure) as e: + raise LnurlValidationError("Failed to pay invoice: " + str(e)) except Exception: - raise LnurlValidationError("Failed to pay invoice") - if not payment_hash: - raise LnurlValidationError("Failed to pay invoice") + raise LnurlValidationError("Unexpected error") async def use(self, conn) -> bool: now = int(time.time()) diff --git a/lnbits/extensions/bleskomat/views.py b/lnbits/extensions/bleskomat/views.py index c3e775c8..92d47513 100644 --- a/lnbits/extensions/bleskomat/views.py +++ b/lnbits/extensions/bleskomat/views.py @@ -14,13 +14,13 @@ templates = Jinja2Templates(directory="templates") @bleskomat_ext.get("/", response_class=HTMLResponse) -async def index(request: Request, user: User = Depends(check_user_exists)): +async def index(req: Request, user: User = Depends(check_user_exists)): bleskomat_vars = { - "callback_url": get_callback_url(request=request), + "callback_url": get_callback_url(req), "exchange_rate_providers": exchange_rate_providers_serializable, "fiat_currencies": fiat_currencies, } return bleskomat_renderer().TemplateResponse( "bleskomat/index.html", - {"request": request, "user": user.dict(), "bleskomat_vars": bleskomat_vars}, + {"request": req, "user": user.dict(), "bleskomat_vars": bleskomat_vars}, )