#!/bin/bash
# ==============================================================================
# 🚀 SCRIPT DE INSTALAÇÃO UNIFICADA: ALERTAS SSH (GCAL + TELEGRAM + PAM)
# ==============================================================================
# Este script automatiza o deploy completo da arquitetura de monitoramento em
# qualquer VPS da rede. Ele configura o PAM, Python, Telegram e Banners.
# ==============================================================================

# Cores para formatação de saída
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # Sem Cor

echo -e "${YELLOW}========================================================================${NC}"
echo -e "${YELLOW}           🛡️  MONITORAMENTO SSH AUTOMÁTICO - INSTALADOR DE DEPLOY      ${NC}"
echo -e "${YELLOW}========================================================================${NC}"

# 1. Verificar se é root
if [ "$EUID" -ne 0 ]; then
    echo -e "${RED}Erro: Este script precisa ser executado como root (sudo ./install.sh).${NC}"
    exit 1
fi

# 2. Captura de Parâmetro de VPS (IP ou Nome)
VPS_PREFIX=""
while [[ "$#" -gt 0 ]]; do
    case $1 in
        --vps) VPS_PREFIX="$2"; shift ;;
        *) echo "Parâmetro desconhecido: $1"; exit 1 ;;
    esac
    shift
done

# Se não foi passado --vps, tenta auto-detectar o IP da interface wg0 (VPN) ou eth0
if [ -z "$VPS_PREFIX" ]; then
    echo -e "${YELLOW}Auto-detectando o IP da VPS...${NC}"
    # Tenta pegar o IP da interface wg0 primeiro
    VPS_PREFIX=$(ip -o -4 addr show dev wg0 2>/dev/null | awk '{split($4,a,"/"); print a[1]}')
    
    if [ -z "$VPS_PREFIX" ]; then
        # Tenta pegar o IP da interface eth0
        VPS_PREFIX=$(ip -o -4 addr show dev eth0 2>/dev/null | awk '{split($4,a,"/"); print a[1]}')
    fi
fi

if [ -z "$VPS_PREFIX" ]; then
    VPS_PREFIX="127.0.0.1"
fi

echo -e "${GREEN}✅ Prefixo/IP Identificado para esta VPS: ${YELLOW}$VPS_PREFIX${NC}"

# 3. Instalação de Dependências
echo -e "\n${YELLOW}[Passo 1/6] Instalando pacotes e dependências (Apt)...${NC}"
apt-get update -qq
apt-get install -y -qq python3-googleapi curl
echo -e "${GREEN}✅ Pacotes instalados com sucesso.${NC}"

# 4. Criar Chave de Conta de Serviço se não existir
echo -e "\n${YELLOW}[Passo 2/6] Verificando chave da Conta de Serviço Google Cloud...${NC}"
if [ ! -f "/etc/ssh/gcal_key.json" ]; then
    echo -e "${YELLOW}⚠️  Aviso: O arquivo /etc/ssh/gcal_key.json não foi encontrado.${NC}"
    echo -e "${YELLOW}Por favor, certifique-se de salvar a chave JSON da conta de serviço em /etc/ssh/gcal_key.json e aplicar as permissões corretas.${NC}"
else
    echo -e "${GREEN}✅ Chave da Conta de Serviço detectada em /etc/ssh/gcal_key.json.${NC}"
    chown root:deploy /etc/ssh/gcal_key.json 2>/dev/null || chown root:root /etc/ssh/gcal_key.json
    chmod 640 /etc/ssh/gcal_key.json
fi

# 5. Criar arquivo de configurações se não existir
echo -e "\n${YELLOW}[Passo 3/6] Criando arquivo de configurações centralizadas (/etc/ssh/ssh_alerts_config.json)...${NC}"
if [ ! -f "/etc/ssh/ssh_alerts_config.json" ]; then
    cat <<EOF > /etc/ssh/ssh_alerts_config.json
{
  "telegram_token": "8641435108:AAGL3rOiVj1GpYAyUi4D-pdeDJ9K_JUdlgM",
  "telegram_chat_id": "",
  "calendar_id": "385857c79ef3aed0f4923b29007637a8b7764d6f8359959500bce27611833f5d@group.calendar.google.com"
}
EOF
    echo -e "${GREEN}✅ Arquivo de configurações criado.${NC}"
else
    echo -e "${GREEN}✅ Arquivo de configurações já existe. Mantendo configurações atuais.${NC}"
fi
chown root:deploy /etc/ssh/ssh_alerts_config.json 2>/dev/null || chown root:root /etc/ssh/ssh_alerts_config.json
chmod 640 /etc/ssh/ssh_alerts_config.json

# 6. Criar Scripts Integradores no Servidor
echo -e "\n${YELLOW}[Passo 4/6] Configurando scripts integradores em /usr/local/bin/...${NC}"

# Copia ou escreve o script principal Python
if [ -f "ssh_gcal_alert.py" ]; then
    cp ssh_gcal_alert.py /usr/local/bin/ssh_gcal_alert.py
else
    # Escreve o arquivo diretamente se rodando solto
    curl -s https://raw.githubusercontent.com/sua-uri-ou-copia-local/ssh_gcal_alert.py -o /usr/local/bin/ssh_gcal_alert.py 2>/dev/null
fi
chown root:root /usr/local/bin/ssh_gcal_alert.py
chmod 755 /usr/local/bin/ssh_gcal_alert.py

# Copia ou escreve o script do instalador Telegram
if [ -f "ssh_alert_setup_telegram.py" ]; then
    cp ssh_alert_setup_telegram.py /usr/local/bin/ssh_alert_setup_telegram.py
else
    curl -s https://raw.githubusercontent.com/sua-uri-ou-copia-local/ssh_alert_setup_telegram.py -o /usr/local/bin/ssh_alert_setup_telegram.py 2>/dev/null
fi
chown root:root /usr/local/bin/ssh_alert_setup_telegram.py
chmod 755 /usr/local/bin/ssh_alert_setup_telegram.py

# Criar o gatilho do PAM dinamicamente com o VPS_PREFIX correto
cat <<EOF > /usr/local/bin/ssh_pam_trigger.sh
#!/bin/bash
# Executa apenas se o estágio do PAM for 'open_session' e o serviço for o 'sshd'
if [ "\$PAM_TYPE" = "open_session" ] && [ "\$PAM_SERVICE" = "sshd" ]; then
    USER_LOGIN="\$PAM_USER"
    IP_LOGIN="\$PAM_RHOST"
    DATE_LOGIN=\$(date "+%Y-%m-%d %H:%M:%S")

    # Se o IP vier vazio (comum em alguns túneis locais), assume localhost
    if [ -z "\$IP_LOGIN" ]; then
        IP_LOGIN="127.0.0.1"
    fi

    # Validação de IP seguro da VPN
    if [[ ! "\$IP_LOGIN" =~ ^10\.99\.0\. ]]; then
        AVISO_INDEVIDO="🚨 ALERTA: Acesso fora da rede VPN segura detectado!"
    else
        AVISO_INDEVIDO="✅ Acesso autorizado através da rede VPN segura."
    fi

    # Dispara o script Python de calendário e Telegram em segundo plano
    /usr/local/bin/ssh_gcal_alert.py --vps "$VPS_PREFIX" --user "\$USER_LOGIN" --ip "\$IP_LOGIN" --status "\$AVISO_INDEVIDO" > /dev/null 2>&1 &
fi
EOF
chown root:root /usr/local/bin/ssh_pam_trigger.sh
chmod 755 /usr/local/bin/ssh_pam_trigger.sh
echo -e "${GREEN}✅ Scripts integradores configurados e autorizados.${NC}"

# 7. Configurar o PAM
echo -e "\n${YELLOW}[Passo 5/6] Configurando o subsistema PAM para SSH (/etc/pam.d/sshd)...${NC}"
PAM_LINE="session optional pam_exec.so type=open_session /usr/local/bin/ssh_pam_trigger.sh"

if grep -q "ssh_pam_trigger.sh" /etc/pam.d/sshd; then
    echo -e "${GREEN}✅ PAM para SSH já está devidamente configurado (ignorado para evitar duplicidade).${NC}"
else
    echo "$PAM_LINE" >> /etc/pam.d/sshd
    echo -e "${GREEN}✅ Gatilho do PAM anexado com sucesso ao fim do arquivo /etc/pam.d/sshd.${NC}"
fi

# 8. Configurar o Banner Visual do Terminal (profile.d)
echo -e "\n${YELLOW}[Passo 6/6] Configurando banner visual de auditoria no terminal (/etc/profile.d/ssh_alert.sh)...${NC}"
cat <<EOF > /etc/profile.d/ssh_alert.sh
#!/bin/bash
# Script de Banner de Auditoria SSH

USER_LOGIN=\$USER
IP_LOGIN=\$(echo \$SSH_CONNECTION | awk '{print \$1}')
DATE_LOGIN=\$(date "+%Y-%m-%d %H:%M:%S")

# Validação de IP seguro da VPN (10.99.0.X)
if [[ ! "\$IP_LOGIN" =~ ^10\.99\.0\. ]]; then
    AVISO_INDEVIDO="🚨 ALERTA: Acesso fora da rede VPN segura detectado!"
else
    AVISO_INDEVIDO="✅ Acesso autorizado através da rede VPN segura."
fi

# Exibição do Banner de Auditoria ao Usuário no Terminal
echo -e "\033[1;33m"
echo "========================================================================="
echo "                  🖥️  AUDITORIA DE ACESSO SISTÊMICO                      "
echo "========================================================================="
echo -e "\033[0m"
echo "  Usuário Conectado: \$USER_LOGIN"
echo "  IP de Origem:      \$IP_LOGIN"
echo "  Data do Login:     \$DATE_LOGIN"
echo "  Status do Canal:   \$AVISO_INDEVIDO"
echo ""
echo "  * Todas as operações estão sendo monitoradas e auditadas."
echo "========================================================================="
echo ""
EOF
chmod 755 /etc/profile.d/ssh_alert.sh
echo -e "${GREEN}✅ Banner visual de terminal ativado.${NC}"

# Finalização e Próximos Passos
echo -e "\n${GREEN}========================================================================${NC}"
echo -e "${GREEN}🎉 INSTALAÇÃO CONCLUÍDA COM SUCESSO!${NC}"
echo -e "${GREEN}========================================================================${NC}"
echo -e "\n${YELLOW}👉 PRÓXIMO PASSO (VINCULAR TELEGRAM):${NC}"
echo -e "Para receber notificações instantâneas no seu Telegram, execute o comando abaixo"
echo -e "como administrador e envie uma mensagem para o seu bot:"
echo -e "\n   ${GREEN}sudo /usr/local/bin/ssh_alert_setup_telegram.py${NC}\n"
echo -e "========================================================================"
