From b0c286d58bfc624aa3c1da1f88734eb5ecc01a89 Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Thu, 29 May 2025 12:10:52 +0300 Subject: [PATCH] feat: add fiat providers --- lnbits/core/crud/users.py | 1 + lnbits/core/models/users.py | 3 +++ lnbits/settings.py | 13 ++++++++++++- tests/api/test_auth.py | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lnbits/core/crud/users.py b/lnbits/core/crud/users.py index b44c1bf0d..a116afd7e 100644 --- a/lnbits/core/crud/users.py +++ b/lnbits/core/crud/users.py @@ -190,6 +190,7 @@ async def get_user_from_account( wallets=wallets, admin=account.is_admin, super_user=account.is_super_user, + fiat_providers=account.fiat_providers, has_password=account.password_hash is not None, ) diff --git a/lnbits/core/models/users.py b/lnbits/core/models/users.py index 47842da67..1a7cc517e 100644 --- a/lnbits/core/models/users.py +++ b/lnbits/core/models/users.py @@ -104,11 +104,13 @@ class Account(BaseModel): is_super_user: bool = Field(default=False, no_database=True) is_admin: bool = Field(default=False, no_database=True) + fiat_providers: list[str] = Field(default=[], no_database=True) def __init__(self, **data): super().__init__(**data) self.is_super_user = settings.is_super_user(self.id) self.is_admin = settings.is_admin_user(self.id) + self.fiat_providers = settings.get_fiat_providers_for_user(self.id) def hash_password(self, password: str) -> str: """sets and returns the hashed password""" @@ -171,6 +173,7 @@ class User(BaseModel): wallets: list[Wallet] = [] admin: bool = False super_user: bool = False + fiat_providers: list[str] = [] has_password: bool = False extra: UserExtra = UserExtra() diff --git a/lnbits/settings.py b/lnbits/settings.py index 88178f777..6d246f4ea 100644 --- a/lnbits/settings.py +++ b/lnbits/settings.py @@ -564,6 +564,7 @@ class StrikeFundingSource(LNbitsSettings): class StripeFundingSource(LNbitsSettings): + stripe_enabled: bool = Field(default=False) stripe_endpoint: str = Field(default="https://api.stripe.com") stripe_secret_key: str | None = Field(default=None) # empty list means all users are allowed to receive payments via Stripe @@ -604,7 +605,17 @@ class FundingSourcesSettings( class FiatFundingSourcesSettings(StripeFundingSource): - pass + + def get_fiat_providers_for_user(self, user_id: str) -> list[str]: + """ + Returns a list of fiat payment methods allowed for the user. + """ + allowed_providers = [] + if not self.stripe_allowed_users or user_id in self.stripe_allowed_users: + allowed_providers.append("stripe") + + # Add other fiat providers here as needed + return allowed_providers class WebPushSettings(LNbitsSettings): diff --git a/tests/api/test_auth.py b/tests/api/test_auth.py index 7edbd3725..10fb5c90c 100644 --- a/tests/api/test_auth.py +++ b/tests/api/test_auth.py @@ -178,7 +178,7 @@ async def test_login_alan_username_password_ok( assert user.email == "alan@lnbits.com", "Email check." assert not user.pubkey, "No pubkey." assert not user.admin, "Not admin." - assert not user.super_user, "Not superuser." + assert not user.super_user, "Not superuser." # todo: add test for fiat providers assert user.has_password, "Password configured." assert ( len(user.wallets) == 1