Skip to content

Commit b20eeee

Browse files
committed
fix[Delete user on server]
1 parent 9f84e09 commit b20eeee

2 files changed

Lines changed: 38 additions & 22 deletions

File tree

core/routers/router.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ async def create_user(user: User, api_key: str = Depends(check_api_key)):
5050

5151
@router.post("/delete-user", response_model=ResponseModel)
5252
async def delete_user(user: User, api_key: str = Depends(check_api_key)):
53-
result = await delete_user_on_server(user.name)
53+
result = delete_user_on_server(user.name)
5454
if result:
5555
return ResponseModel(
5656
success=True,

core/service/user_managment.py

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -44,27 +44,32 @@ def create_user_on_server(name, expiry_date) -> bool:
4444
return False
4545

4646

47-
async def delete_user_on_server(name) -> bool | str:
47+
def delete_user_on_server(name) -> bool | str:
4848
try:
4949
if not os.path.exists(script_path):
50-
logger.error("script not found on ")
50+
logger.error("script not found at %s", script_path)
5151
return False
5252

5353
env = {"PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"}
5454
bash = pexpect.spawn(
55-
"/usr/bin/bash",
56-
[script_path],
57-
env=env,
58-
encoding="utf-8",
59-
timeout=120,
55+
"/usr/bin/bash", [script_path], env=env, encoding="utf-8", timeout=120
6056
)
6157

62-
bash = pexpect.spawn(f"bash {script_path}", encoding="utf-8", timeout=60)
58+
try:
59+
bash.expect(r"Option:|Select an option:", timeout=20)
60+
except pexpect.TIMEOUT:
61+
logger.warning("Did not see main menu prompt, attempting to continue")
6362

64-
bash.expect("Option:")
6563
bash.sendline("2")
6664

67-
bash.expect("Client:")
65+
try:
66+
bash.expect(
67+
r"Select the client to revoke:|Select the client to revoke", timeout=20
68+
)
69+
except pexpect.TIMEOUT:
70+
logger.info("Didn't match full header")
71+
72+
bash.expect(r"Client:", timeout=20)
6873
list_output = bash.before
6974

7075
pattern = re.compile(r"\s*(\d+)\)\s*(.+)")
@@ -77,28 +82,39 @@ async def delete_user_on_server(name) -> bool | str:
7782
break
7883

7984
if not user_number:
80-
logger.error(f"User '{name}' not found for delete!")
81-
bash.close()
85+
logger.error("User '%s' not found for delete!", name)
86+
bash.close(force=True)
8287
return "not_found"
8388

89+
logger.info("Revoking user '%s' -> number %s", name, user_number)
8490
bash.sendline(user_number)
8591

86-
bash.expect(r"\[y/N\]:", timeout=30)
87-
bash.sendline("y")
92+
try:
93+
bash.expect(
94+
r"Confirm .*revocation\?.*\[y/N\]:|Confirm .*revocation\?.*:|Confirm .*revocation\?",
95+
timeout=20,
96+
)
97+
bash.sendline("y")
98+
except pexpect.TIMEOUT:
99+
logger.warning("Confirmation prompt not seen; trying to continue")
88100

89-
bash.expect(pexpect.EOF)
101+
bash.expect(pexpect.EOF, timeout=120)
102+
bash.close()
103+
104+
# remove local .ovpn file if exists
90105
file_to_delete = f"/root/{name}.ovpn"
91106
if os.path.exists(file_to_delete):
92107
try:
93108
os.remove(file_to_delete)
94-
return True
109+
logger.info("Removed %s", file_to_delete)
95110
except Exception as e:
96-
logger.error(f"Error deleting file {file_to_delete}: {e}")
97-
return False
98-
else:
99-
logger.warning(f"File {file_to_delete} does not exist.")
111+
logger.error("Error deleting file %s: %s", file_to_delete, e)
112+
return True
113+
114+
return True
115+
100116
except Exception as e:
101-
logger.error("Error in delete_user_on_server:", e)
117+
logger.exception("Error in delete_user_on_server: %s", e)
102118
return False
103119

104120

0 commit comments

Comments
 (0)