diff --git a/app/db/crud.py b/app/db/crud.py index aa912bc..a666eee 100644 --- a/app/db/crud.py +++ b/app/db/crud.py @@ -1,4 +1,5 @@ import json +import secrets from datetime import datetime from enum import Enum from typing import Dict, List, Optional, Tuple, Union @@ -364,12 +365,12 @@ def reset_user_data_usage(db: Session, dbuser: User): def revoke_user_sub(db: Session, dbuser: User): dbuser.sub_revoked_at = datetime.utcnow() - user = UserResponse.model_validate(dbuser) - for proxy_type, settings in user.proxies.copy().items(): - settings.revoke() - user.proxies[proxy_type] = settings - dbuser = update_user(db, dbuser, user) - + # user = UserResponse.model_validate(dbuser) + # for proxy_type, settings in user.proxies.copy().items(): + # settings.revoke() + # user.proxies[proxy_type] = settings + # dbuser = update_user(db, dbuser, user) + dbuser.key = secrets.token_hex(16) db.commit() db.refresh(dbuser) return dbuser diff --git a/app/marznode/operations.py b/app/marznode/operations.py index f229cb8..a09e144 100644 --- a/app/marznode/operations.py +++ b/app/marznode/operations.py @@ -22,7 +22,7 @@ async def remove_user(user: "DBUser"): for inb in user.inbounds: nodes_set.add(inb.node_id) - print(nodes_set) + for n in nodes_set: await marznode.nodes[n].remove_user(user) diff --git a/app/views/user.py b/app/views/user.py index 993ec89..17a6e44 100644 --- a/app/views/user.py +++ b/app/views/user.py @@ -179,19 +179,21 @@ async def revoke_user_subscription(username: str, """ Revoke users subscription (Subscription link and proxies) """ - if not (admin.is_sudo or (dbuser.admin and dbuser.admin.username == admin.username)): + db_user = crud.get_user(db, username) + + if not (admin.is_sudo or (db_user.admin and db_user.admin.username == admin.username)): raise HTTPException(status_code=403, detail="You're not allowed") - dbuser = crud.get_user(db, username) - if not dbuser: + if not db_user: raise HTTPException(status_code=404, detail="User not found") - dbuser = crud.revoke_user_sub(db=db, dbuser=dbuser) + db_user = crud.revoke_user_sub(db=db, dbuser=db_user) - if dbuser.status in [UserStatus.active, UserStatus.on_hold]: - asyncio.get_running_loop().create_task(xray.operations.update_user(dbuser=dbuser)) - user = UserResponse.model_validate(dbuser) - asyncio.get_running_loop().create_task( + if db_user.status in [UserStatus.active, UserStatus.on_hold]: + await marznode.operations.remove_user(db_user) + await marznode.operations.add_user(db_user) + user = UserResponse.model_validate(db_user) + asyncio.create_task( report.user_subscription_revoked( user=user, by=admin