From bf1ad185b942e1f370c239278e37018e50e28dab Mon Sep 17 00:00:00 2001 From: Vlad Stan Date: Mon, 2 Feb 2026 12:06:38 +0200 Subject: [PATCH] refactor: use normal update --- lnbits/core/crud/__init__.py | 4 ---- lnbits/core/models/users.py | 4 +++- lnbits/core/views/auth_api.py | 4 +--- lnbits/core/views/user_api.py | 17 ++++++++--------- tests/api/test_users.py | 1 + 5 files changed, 13 insertions(+), 17 deletions(-) diff --git a/lnbits/core/crud/__init__.py b/lnbits/core/crud/__init__.py index 708009db9..2108d23d5 100644 --- a/lnbits/core/crud/__init__.py +++ b/lnbits/core/crud/__init__.py @@ -61,9 +61,7 @@ from .users import ( get_user, get_user_access_control_lists, get_user_from_account, - is_account_activated, update_account, - update_account_activation, ) from .wallets import ( create_wallet, @@ -146,13 +144,11 @@ __all__ = [ "get_wallets", "get_webpush_subscription", "get_webpush_subscriptions_for_user", - "is_account_activated", "is_internal_status_success", "mark_webhook_sent", "remove_deleted_wallets", "reset_core_settings", "update_account", - "update_account_activation", "update_admin_settings", "update_installed_extension", "update_installed_extension_state", diff --git a/lnbits/core/models/users.py b/lnbits/core/models/users.py index 576b97482..e7e60342e 100644 --- a/lnbits/core/models/users.py +++ b/lnbits/core/models/users.py @@ -181,6 +181,7 @@ class AccountId(BaseModel): class Account(AccountId): + activated: bool = True external_id: str | None = None # for external account linking username: str | None = None password_hash: str | None = None @@ -241,7 +242,7 @@ class Account(AccountId): class AccountOverview(Account): - activated: bool + activated: bool = True transaction_count: int | None = 0 wallet_count: int | None = 0 balance_msat: int | None = 0 @@ -277,6 +278,7 @@ class AccountFilters(FilterModel): class User(BaseModel): id: str + activated: bool = True created_at: datetime updated_at: datetime email: str | None = None diff --git a/lnbits/core/views/auth_api.py b/lnbits/core/views/auth_api.py index c416ba389..3f7c0066f 100644 --- a/lnbits/core/views/auth_api.py +++ b/lnbits/core/views/auth_api.py @@ -51,7 +51,6 @@ from ..crud import ( get_account_by_username, get_account_by_username_or_email, get_user_from_account, - is_account_activated, update_account, ) from ..models import ( @@ -88,8 +87,7 @@ async def login(data: LoginUsernamePassword) -> JSONResponse: if not account or not account.verify_password(data.password): raise HTTPException(HTTPStatus.UNAUTHORIZED, "Invalid credentials.") - is_activated = await is_account_activated(account.id) - if is_activated is False: + if not account.activated: raise HTTPException(HTTPStatus.FORBIDDEN, "Account is not activated.") return _auth_success_response(account.username, account.id, account.email) diff --git a/lnbits/core/views/user_api.py b/lnbits/core/views/user_api.py index 7fd5b66ec..c42973351 100644 --- a/lnbits/core/views/user_api.py +++ b/lnbits/core/views/user_api.py @@ -17,11 +17,10 @@ from lnbits.core.crud import ( get_user, get_wallet, get_wallets, - is_account_activated, - update_account_activation, update_admin_settings, update_wallet, ) +from lnbits.core.crud.users import get_account from lnbits.core.crud.wallets import delete_wallet_by_id from lnbits.core.models import ( AccountFilters, @@ -227,14 +226,14 @@ async def api_users_toggle_admin(user_id: str) -> SimpleStatus: name="Activate or deactivate a user", ) async def api_users_toggle_activated( - user_id: str, account: Account = Depends(check_admin) + user_id: str, admin_account: Account = Depends(check_admin) ) -> SimpleStatus: if user_id == settings.super_user: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail="Cannot deactivate super user.", ) - if user_id == account.id: + if user_id == admin_account.id: raise HTTPException( status_code=HTTPStatus.BAD_REQUEST, detail="You cannot deactivate yourself.", @@ -243,18 +242,18 @@ async def api_users_toggle_activated( if settings.is_admin_user(user_id): settings.lnbits_admin_users.remove(user_id) - is_activated = await is_account_activated(user_id) - - if is_activated is None: + user_account = await get_account(user_id) + if not user_account: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="User not found.", ) - await update_account_activation(user_id, not is_activated) + user_account.activated = not user_account.activated + await update_user_account(user_account) return SimpleStatus( success=True, - message=f"User {'activated' if not is_activated else 'deactivated'}.", + message=f"User {'activated' if user_account.activated else 'deactivated'}.", ) diff --git a/tests/api/test_users.py b/tests/api/test_users.py index 9e91fbca0..b002a3f3b 100644 --- a/tests/api/test_users.py +++ b/tests/api/test_users.py @@ -637,6 +637,7 @@ async def test_user_activation( payload: dict = jwt.decode(access_token, settings.auth_secret_key, ["HS256"]) access_token_payload = AccessTokenPayload(**payload) user_id = access_token_payload.usr + assert user_id is not None # Login works response = await http_client.post(