diff --git 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
@@ -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
@@ -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