#!/bin/bash
VERSION='1.0'

generate_password() {
    openssl rand -base64 12 | tr -d '/+' | cut -c1-16
}

user_exists() {
    grep -q "^$1:" .htpasswd 2>/dev/null || grep -q "^$1 / " .htpasswd.txt 2>/dev/null
}

echo ""
echo "=== Генератор паролей для Nginx (Basic Auth) ==="
echo ""

# Проверка файлов
touch .htpasswd .htpasswd.txt

# Ввод имени пользователя с проверкой
while true; do
    read -p "Введите имя пользователя: " USERNAME
    
    if [[ -z "$USERNAME" ]]; then
        echo "Имя пользователя не может быть пустым!"
        continue
    fi
    
    if user_exists "$USERNAME"; then
        echo "Ошибка: пользователь '$USERNAME' уже существует!"
        read -p "Перезаписать? (y/N): " OVERWRITE
        
        if [[ "$OVERWRITE" =~ [Yy] ]]; then
            # Удаляем старые записи
            sed -i "/^$USERNAME:/d" .htpasswd
            sed -i "/^$USERNAME \/ /d" .htpasswd.txt
            echo "Старые записи пользователя удалены."
            break
        else
            continue
        fi
    else
        break
    fi
done

# Генерация пароля
while true; do
    PASSWORD=$(generate_password)
    echo "--------------------------------"
    echo "Сгенерирован пароль: $PASSWORD"
    read -p "Использовать этот пароль? (Enter - принять, N - ввести вручную, AnyKey - сгенерировать новый): " CHOICE

    case "$CHOICE" in
        [Yy]|"" )
            echo "Пароль принят."
            break
            ;;
        [Nn] )
            while true; do
                read -s -p "Введите пароль: " PASSWORD
                echo

                if [[ -z "$PASSWORD" ]]; then
                    echo "Пароль не может быть пустым!"
                    continue
                fi

                read -s -p "Повторите пароль: " PASSWORD2
                echo

                if [[ "$PASSWORD" != "$PASSWORD2" ]]; then
                    echo "Пароли не совпадают!"
                else
                    break
                fi
            done
            break
            ;;
        * )
            continue
            ;;
    esac
done

# Добавление записей
HASH=$(openssl passwd -apr1 "$PASSWORD")
echo "$USERNAME:$HASH" >> .htpasswd
echo "$USERNAME / $PASSWORD" >> .htpasswd.txt

# Итог
echo "--------------------------------"
echo "Данные успешно добавлены:"
echo "Файл для Nginx: .htpasswd"
echo "Резервная копия: .htpasswd.txt"
echo "--------------------------------"
echo "Логин: $USERNAME"
echo "Пароль: $PASSWORD"
echo "--------------------------------"
