#!/bin/bash

# Установить цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${YELLOW}=== Настройка окружения для l2server ===${NC}"

# Проверка на выполнение от root
if [ "$EUID" -eq 0 ]; then
    echo -e "${RED}Ошибка: Не запускайте этот скрипт от root пользователя!${NC}"
    echo "Запустите скрипт от пользователя, для которого нужно настроить права."
    exit 1
fi

CURRENT_USER=$(whoami)
CURRENT_GROUP=$(id -gn $CURRENT_USER)

echo "Текущий пользователь: $CURRENT_USER"
echo "Текущая группа: $CURRENT_GROUP"

# 1. Настройка sudo для выполнения команд без пароля
echo -e "\n${YELLOW}1. Настройка прав sudo...${NC}"

# Проверяем, есть ли уже настройка в sudoers
if sudo grep -q "^$CURRENT_USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers; then
    echo -e "${GREEN}Права sudo уже настроены для пользователя $CURRENT_USER${NC}"
else
    echo "Добавляем пользователя $CURRENT_USER в sudoers без пароля..."
    
    # Создаем временный файл для добавления в sudoers
    sudo bash -c "echo '$CURRENT_USER ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/$CURRENT_USER"
    
    # Устанавливаем правильные права на файл
    sudo chmod 0440 /etc/sudoers.d/$CURRENT_USER
    
    # Проверяем синтаксис sudoers
    if sudo visudo -c; then
        echo -e "${GREEN}Права sudo успешно настроены${NC}"
    else
        echo -e "${RED}Ошибка в синтаксисе sudoers!${NC}"
        echo "Откатываем изменения..."
        sudo rm -f /etc/sudoers.d/$CURRENT_USER
        exit 1
    fi
fi

# 2. Создание директорий и настройка прав
echo -e "\n${YELLOW}2. Создание директорий и настройка прав...${NC}"

# Создаем основную директорию
sudo mkdir -p /srv/l2server/db-init

# Устанавливаем владельца и права
sudo chown -R $CURRENT_USER:$CURRENT_GROUP /srv/l2server

# Устанавливаем права на директории
sudo chmod -R 755 /srv/l2server

echo "Содержимое /srv/l2server:"
ls -la /srv/l2server/

echo -e "${GREEN}Директории созданы и права настроены${NC}"

# 3. Открытие портов в firewall
echo -e "\n${YELLOW}3. Настройка firewall...${NC}"

# Определяем, какой firewall используется
if command -v ufw &> /dev/null && sudo ufw status | grep -q "Status: active"; then
    echo "Используется ufw firewall"
    
    # Открываем порты в ufw
    for port in 7777 2106 9014 3306; do
        if sudo ufw status | grep -q "$port/tcp"; then
            echo "Порт $port уже открыт"
        else
            sudo ufw allow $port/tcp
            echo "Порт $port/tcp открыт"
        fi
    done
    
elif command -v firewall-cmd &> /dev/null && sudo firewall-cmd --state &> /dev/null; then
    echo "Используется firewalld"
    
    # Добавляем порты в firewalld
    for port in 7777 2106 9014 3306; do
        if sudo firewall-cmd --list-ports | grep -q "$port/tcp"; then
            echo "Порт $port уже открыт"
        else
            sudo firewall-cmd --permanent --add-port=$port/tcp
            echo "Порт $port/tcp открыт"
        fi
    done
    sudo firewall-cmd --reload
    
elif [ -f /etc/iptables/rules.v4 ] || command -v iptables &> /dev/null; then
    echo "Используется iptables"
    
    # Правила для iptables
    for port in 7777 2106 9014 3306; do
        if sudo iptables -L INPUT -n | grep -q ":$port "; then
            echo "Порт $port уже открыт в iptables"
        else
            sudo iptables -A INPUT -p tcp --dport $port -j ACCEPT
            echo "Порт $port/tcp открыт в iptables"
        fi
    done
    
    # Сохраняем правила в зависимости от дистрибутива
    if command -v netfilter-persistent &> /dev/null; then
        sudo netfilter-persistent save
    elif command -v iptables-save &> /dev/null; then
        sudo iptables-save | sudo tee /etc/iptables/rules.v4 > /dev/null
    fi
    
else
    echo -e "${YELLOW}Не удалось определить firewall или firewall не активен${NC}"
    echo "Пожалуйста, откройте порты вручную: 7777, 2106, 9014, 3306"
fi

# 4. Проверка открытых портов
echo -e "\n${YELLOW}4. Проверка открытых портов...${NC}"

for port in 7777 2106 9014 3306; do
    if sudo ss -tulpn | grep -q ":$port "; then
        echo -e "${GREEN}Порт $port/tcp слушается${NC}"
    else
        echo -e "${YELLOW}Порт $port/tcp не слушается (но правило firewall добавлено)${NC}"
    fi
done

# 5. Создание тестового скрипта для проверки прав
echo -e "\n${YELLOW}5. Создание тестового скрипта...${NC}"

TEST_SCRIPT="/home/$CURRENT_USER/test_permissions.sh"

cat > "$TEST_SCRIPT" << 'EOF'
#!/bin/bash

echo "=== Тест прав пользователя $(whoami) ==="

# Тест 1: Проверка sudo без пароля
echo -n "1. Тест sudo без пароля: "
if sudo -n true 2>/dev/null; then
    echo "УСПЕХ"
else
    echo "ОШИБКА"
fi

# Тест 2: Проверка доступа к директории
echo -n "2. Доступ к /srv/l2server/db-init: "
if [ -w "/srv/l2server/db-init" ]; then
    echo "УСПЕХ (есть права на запись)"
else
    echo "ОШИБКА (нет прав на запись)"
fi

# Тест 3: Создание файла в директории
TEST_FILE="/srv/l2server/db-init/test_file_$(date +%s).txt"
echo -n "3. Создание тестового файла: "
if touch "$TEST_FILE" 2>/dev/null; then
    echo "УСПЕХ"
    rm -f "$TEST_FILE"
else
    echo "ОШИБКА"
fi

echo "=== Тест завершен ==="
EOF

chmod +x "$TEST_SCRIPT"
echo "Тестовый скрипт создан: $TEST_SCRIPT"
echo "Запустите его для проверки: ./test_permissions.sh"

echo -e "\n${GREEN}=== Настройка завершена! ===${NC}"
echo -e "Пользователь ${YELLOW}$CURRENT_USER${NC} теперь может:"
echo "1. Выполнять команды с sudo без пароля"
echo "2. Полный доступ к /srv/l2server/db-init"
echo "3. Пропущены порты: 7777, 2106, 9014, 3306"
