From c7f1e84ec4ceb02bcdcb042b781ae23b02bb025f Mon Sep 17 00:00:00 2001 From: Whispering Wind <151555003+ReturnFI@users.noreply.github.com> Date: Mon, 19 Aug 2024 00:53:55 +0330 Subject: [PATCH 1/3] case-insensitive --- core/scripts/telegrambot/tbot.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/scripts/telegrambot/tbot.py b/core/scripts/telegrambot/tbot.py index 28163b4..83f77dd 100644 --- a/core/scripts/telegrambot/tbot.py +++ b/core/scripts/telegrambot/tbot.py @@ -55,9 +55,12 @@ def process_add_user_step1(message): try: users = json.loads(result) + existing_users = {user.lower() for user in users.keys()} - if username in users: + if username.lower() in existing_users: bot.reply_to(message, f"Username '{username}' already exists. Please choose a different username.") + msg = bot.reply_to(message, "Enter a new username:") + bot.register_next_step_handler(msg, process_add_user_step1) return except json.JSONDecodeError: if "No such file or directory" in result or result.strip() == "": From e119f4990b3d598fc193ee97f279b56bd27741da Mon Sep 17 00:00:00 2001 From: Whispering Wind <151555003+ReturnFI@users.noreply.github.com> Date: Mon, 19 Aug 2024 00:55:15 +0330 Subject: [PATCH 2/3] Handle Error --- core/cli.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/cli.py b/core/cli.py index 947634c..709f93f 100644 --- a/core/cli.py +++ b/core/cli.py @@ -123,9 +123,11 @@ def add_user(username: str, traffic_limit: int, expiration_days: int, password: exit(1) if not creation_date: creation_date = datetime.now().strftime('%Y-%m-%d') - - run_cmd(['bash', Command.ADD_USER.value, username, str(traffic_limit), str(expiration_days), password, creation_date]) - + try: + run_cmd(['bash', Command.ADD_USER.value, username, str(traffic_limit), str(expiration_days), password, creation_date]) + except subprocess.CalledProcessError as e: + click.echo(f"{e.output.decode()}", err=True) + exit(1) @cli.command('edit-user') @click.option('--username', '-u', required=True, help='Username for the user to edit', type=str) From 3d38c58b051ec5e15f8e3e20012a3f509db77452 Mon Sep 17 00:00:00 2001 From: Whispering Wind <151555003+ReturnFI@users.noreply.github.com> Date: Mon, 19 Aug 2024 00:56:55 +0330 Subject: [PATCH 3/3] Check username (case-insensitive) --- core/scripts/hysteria2/add_user.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core/scripts/hysteria2/add_user.sh b/core/scripts/hysteria2/add_user.sh index 267c265..925484d 100644 --- a/core/scripts/hysteria2/add_user.sh +++ b/core/scripts/hysteria2/add_user.sh @@ -1,11 +1,7 @@ #!/bin/bash -# Source the path.sh script to load the necessary variables source /etc/hysteria/core/scripts/path.sh -# source /etc/hysteria/core/scripts/utils.sh -# define_colors -# Function to add a new user to the configuration add_user() { if [ $# -ne 3 ] && [ $# -ne 5 ]; then echo "Usage: $0 [password] [creation_date]" @@ -18,45 +14,49 @@ add_user() { password=$4 creation_date=$5 + username_lower=$(echo "$username" | tr '[:upper:]' '[:lower:]') + if [ -z "$password" ]; then password=$(pwgen -s 32 1) fi if [ -z "$creation_date" ]; then creation_date=$(date +%Y-%m-%d) else - # Validate the date format (YYYY-MM-DD) if ! [[ "$creation_date" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then echo "Invalid date format. Expected YYYY-MM-DD." exit 1 fi - # Check if the date is valid + if ! date -d "$creation_date" >/dev/null 2>&1; then echo "Invalid date. Please provide a valid date in YYYY-MM-DD format." exit 1 fi fi - # Validate the username if ! [[ "$username" =~ ^[a-zA-Z0-9]+$ ]]; then echo -e "${red}Error:${NC} Username can only contain letters and numbers." exit 1 fi - # Convert GB to bytes (1 GB = 1073741824 bytes) traffic=$(echo "$traffic_gb * 1073741824" | bc) if [ ! -f "$USERS_FILE" ]; then echo "{}" > "$USERS_FILE" fi - jq --arg username "$username" --arg password "$password" --argjson traffic "$traffic" --argjson expiration_days "$expiration_days" --arg creation_date "$creation_date" \ + user_exists=$(jq --arg username "$username_lower" ' + to_entries[] | select(.key | ascii_downcase == $username) | .key' "$USERS_FILE") + + if [ -n "$user_exists" ]; then + echo "User already exists." + exit 1 + fi + + jq --arg username "$username_lower" --arg password "$password" --argjson traffic "$traffic" --argjson expiration_days "$expiration_days" --arg creation_date "$creation_date" \ '.[$username] = {password: $password, max_download_bytes: $traffic, expiration_days: $expiration_days, account_creation_date: $creation_date, blocked: false}' \ "$USERS_FILE" > "${USERS_FILE}.temp" && mv "${USERS_FILE}.temp" "$USERS_FILE" - # python3 "$CLI_PATH" restart-hysteria2 > /dev/null 2>&1 - echo -e "User $username added successfully." } -# Call the function with the provided arguments add_user "$1" "$2" "$3" "$4" "$5"