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 7d83ddcfb..0a7384edc 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