From 133afff8ee17464e47ac274210a419a29f08c015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dni=20=E2=9A=A1?= Date: Thu, 17 Jul 2025 13:58:03 +0200 Subject: [PATCH] fix: catch init fiat providers (#3281) --- lnbits/core/services/fiat_providers.py | 5 +++++ lnbits/core/services/payments.py | 3 +++ lnbits/fiat/__init__.py | 15 +++++++++++---- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/lnbits/core/services/fiat_providers.py b/lnbits/core/services/fiat_providers.py index 9457f61b..01fedb39 100644 --- a/lnbits/core/services/fiat_providers.py +++ b/lnbits/core/services/fiat_providers.py @@ -176,6 +176,11 @@ async def test_connection(provider: str) -> SimpleStatus: This function should be called when setting up or testing the Stripe integration. """ fiat_provider = await get_fiat_provider(provider) + if not fiat_provider: + return SimpleStatus( + success=False, + message=f"Fiat provider '{provider}' not found.", + ) status = await fiat_provider.status() if status.error_message: return SimpleStatus( diff --git a/lnbits/core/services/payments.py b/lnbits/core/services/payments.py index 07d370bd..05ffa545 100644 --- a/lnbits/core/services/payments.py +++ b/lnbits/core/services/payments.py @@ -136,6 +136,9 @@ async def create_fiat_invoice( internal_payment = await create_wallet_invoice(wallet_id, invoice_data) fiat_provider = await get_fiat_provider(fiat_provider_name) + if not fiat_provider: + raise InvoiceError("No fiat provider found.", status="failed") + fiat_invoice = await fiat_provider.create_invoice( amount=invoice_data.amount, payment_hash=internal_payment.payment_hash, diff --git a/lnbits/fiat/__init__.py b/lnbits/fiat/__init__.py index a6175493..3f35640c 100644 --- a/lnbits/fiat/__init__.py +++ b/lnbits/fiat/__init__.py @@ -3,6 +3,8 @@ from __future__ import annotations import importlib from enum import Enum +from loguru import logger + from lnbits.fiat.base import FiatProvider from lnbits.settings import settings @@ -15,7 +17,7 @@ class FiatProviderType(Enum): stripe = "StripeWallet" -async def get_fiat_provider(name: str) -> FiatProvider: +async def get_fiat_provider(name: str) -> FiatProvider | None: if name not in FiatProviderType.__members__: raise ValueError(f"Fiat provider '{name}' is not supported.") @@ -27,13 +29,18 @@ async def get_fiat_provider(name: str) -> FiatProvider: del fiat_providers[name] else: return fiat_provider - fiat_providers[name] = _init_fiat_provider(FiatProviderType[name]) + _provider = _init_fiat_provider(FiatProviderType[name]) + if not _provider: + return None + + fiat_providers[name] = _provider return fiat_providers[name] -def _init_fiat_provider(fiat_provider: FiatProviderType) -> FiatProvider: +def _init_fiat_provider(fiat_provider: FiatProviderType) -> FiatProvider | None: if not settings.is_fiat_provider_enabled(fiat_provider.name): - raise ValueError(f"Fiat provider '{fiat_provider.name}' not enabled.") + logger.warning(f"Fiat provider '{fiat_provider.name}' not enabled.") + return None provider_constructor = getattr(fiat_module, fiat_provider.value) return provider_constructor()