Refactor: Implement user removal in Python
This commit is contained in:
@ -26,7 +26,7 @@ class Command(Enum):
|
|||||||
ADD_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'add_user.sh')
|
ADD_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'add_user.sh')
|
||||||
EDIT_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'edit_user.sh')
|
EDIT_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'edit_user.sh')
|
||||||
RESET_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'reset_user.sh')
|
RESET_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'reset_user.sh')
|
||||||
REMOVE_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'remove_user.sh')
|
REMOVE_USER = os.path.join(SCRIPT_DIR, 'hysteria2', 'remove_user.py')
|
||||||
SHOW_USER_URI = os.path.join(SCRIPT_DIR, 'hysteria2', 'show_user_uri.py')
|
SHOW_USER_URI = os.path.join(SCRIPT_DIR, 'hysteria2', 'show_user_uri.py')
|
||||||
WRAPPER_URI = os.path.join(SCRIPT_DIR, 'hysteria2', 'wrapper_uri.py')
|
WRAPPER_URI = os.path.join(SCRIPT_DIR, 'hysteria2', 'wrapper_uri.py')
|
||||||
IP_ADD = os.path.join(SCRIPT_DIR, 'hysteria2', 'ip.sh')
|
IP_ADD = os.path.join(SCRIPT_DIR, 'hysteria2', 'ip.sh')
|
||||||
@ -303,7 +303,7 @@ def remove_user(username: str):
|
|||||||
'''
|
'''
|
||||||
Removes a user by username.
|
Removes a user by username.
|
||||||
'''
|
'''
|
||||||
run_cmd(['bash', Command.REMOVE_USER.value, username])
|
run_cmd(['python3', Command.REMOVE_USER.value, username])
|
||||||
|
|
||||||
def kick_user_by_name(username: str):
|
def kick_user_by_name(username: str):
|
||||||
'''Kicks a specific user by username.'''
|
'''Kicks a specific user by username.'''
|
||||||
|
|||||||
57
core/scripts/hysteria2/remove_user.py
Normal file
57
core/scripts/hysteria2/remove_user.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import asyncio
|
||||||
|
from init_paths import *
|
||||||
|
from paths import *
|
||||||
|
|
||||||
|
async def remove_user(username):
|
||||||
|
"""
|
||||||
|
Remove a user from the USERS_FILE asynchronously.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
username (str): The username to remove
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: 0 on success, 1 on failure
|
||||||
|
"""
|
||||||
|
if not os.path.isfile(USERS_FILE):
|
||||||
|
print(f"Error: Config file {USERS_FILE} not found.")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
try:
|
||||||
|
async with asyncio.to_thread(open, USERS_FILE, 'r') as f:
|
||||||
|
try:
|
||||||
|
users_data = json.load(f)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
print(f"Error: {USERS_FILE} contains invalid JSON.")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
if username in users_data:
|
||||||
|
del users_data[username]
|
||||||
|
async with asyncio.to_thread(open, USERS_FILE, 'w') as f:
|
||||||
|
json.dump(users_data, f, indent=4)
|
||||||
|
print(f"User {username} removed successfully.")
|
||||||
|
else:
|
||||||
|
print(f"Error: User {username} not found.")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error: {str(e)}")
|
||||||
|
return 1
|
||||||
|
|
||||||
|
return 0
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
print(f"Usage: {sys.argv[0]} <username>")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
username = sys.argv[1]
|
||||||
|
exit_code = await remove_user(username)
|
||||||
|
sys.exit(exit_code)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
asyncio.run(main())
|
||||||
@ -1,28 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
source /etc/hysteria/core/scripts/path.sh
|
|
||||||
source /etc/hysteria/core/scripts/utils.sh
|
|
||||||
define_colors
|
|
||||||
|
|
||||||
remove_user() {
|
|
||||||
if [ $# -ne 1 ]; then
|
|
||||||
echo "Usage: $0 <username>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local username=$1
|
|
||||||
|
|
||||||
if [ -f "$USERS_FILE" ]; then
|
|
||||||
if jq -e "has(\"$username\")" "$USERS_FILE" > /dev/null; then
|
|
||||||
jq --arg username "$username" 'del(.[$username])' "$USERS_FILE" > "${USERS_FILE}.temp" && mv "${USERS_FILE}.temp" "$USERS_FILE"
|
|
||||||
|
|
||||||
echo "User $username removed successfully."
|
|
||||||
else
|
|
||||||
echo -e "${red}Error:${NC} User $username not found."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -e "${red}Error:${NC} Config file $USERS_FILE not found."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1
|
|
||||||
remove_user "$1"
|
|
||||||
Reference in New Issue
Block a user