#!/bin/sh
#
# kcupdate.sh - Actualizador de Kerio Control Offline
# Compatible con ash/sh de Kerio Control
# Autor: Ing. Luis Lopez Sanchez
# Modificado: 2026-04-24
#

######## DECLARANDO LAS VARIABLES NECESARIAS ##########
SALVATMP="/tmp"
SALVADIR="/var/winroute"
SERVER_URL="http://antivirus.innovanet.uy/Updates/KerioControl"

######## DECLARANDO LAS URLS DE DESCARGA ##########
URL_BITDEFENDER="${SERVER_URL}/Bitdefender.tar.gz"
URL_IPSIDS="${SERVER_URL}/IPS-IDS.tar.gz"
URL_TEMPLATES="${SERVER_URL}/templates.tar.gz"

######## DETECTAR RUTAS DE KERIO CONTROL ##########
BITDEFENDER_PATH=""
SNORT_RULES_PATH=""
SNORT_TEMPLATES_PATH=""

# Función para verificar si existe directorio
check_dir() {
    if [ -d "$1" ]; then
        return 0
    else
        return 1
    fi
}

# Detectar Bitdefender
if check_dir "/var/winroute/bitdefender/Plugins"; then
    BITDEFENDER_PATH="/var/winroute/bitdefender/Plugins"
elif check_dir "/opt/kerio/winroute/bitdefender/Plugins"; then
    BITDEFENDER_PATH="/opt/kerio/winroute/bitdefender/Plugins"
elif check_dir "/opt/winroute/bitdefender/Plugins"; then
    BITDEFENDER_PATH="/opt/winroute/bitdefender/Plugins"
fi

# Detectar Snort Rules
if check_dir "/var/winroute/snort/rules"; then
    SNORT_RULES_PATH="/var/winroute/snort/rules"
elif check_dir "/opt/kerio/winroute/snort/rules"; then
    SNORT_RULES_PATH="/opt/kerio/winroute/snort/rules"
elif check_dir "/opt/winroute/snort/rules"; then
    SNORT_RULES_PATH="/opt/winroute/snort/rules"
fi

# Detectar Snort Templates
if check_dir "/var/winroute/snort/templates"; then
    SNORT_TEMPLATES_PATH="/var/winroute/snort/templates"
elif check_dir "/opt/kerio/winroute/snort/templates"; then
    SNORT_TEMPLATES_PATH="/opt/kerio/winroute/snort/templates"
elif check_dir "/opt/winroute/snort/templates"; then
    SNORT_TEMPLATES_PATH="/opt/winroute/snort/templates"
fi

######## VERIFICAR QUE SE ENCONTRARON LAS RUTAS ##########
if [ -z "$BITDEFENDER_PATH" ]; then
    echo "ERROR: No se encontró directorio de Bitdefender"
    exit 1
fi

if [ -z "$SNORT_TEMPLATES_PATH" ]; then
    echo "ERROR: No se encontró directorio de Snort Templates"
    exit 1
fi

echo "Rutas detectadas:"
echo "  Bitdefender: $BITDEFENDER_PATH"
echo "  Snort Rules: ${SNORT_RULES_PATH:-NO ENCONTRADO}"
echo "  Snort Templates: $SNORT_TEMPLATES_PATH"

######## HABILITAR ESCRITURA EN SISTEMA DE ARCHIVOS ##########
echo "Habilitando escritura en sistema de archivos..."
mount -o rw,remount /
if [ $? -ne 0 ]; then
    echo "ERROR: No se pudo habilitar escritura"
    exit 1
fi
echo "OK: Sistema de archivos en modo lectura/escritura"

######## DESCARGAR ARCHIVOS ##########
echo "Descargando actualizaciones..."

cd "$SALVATMP"

# Descargar Bitdefender
echo "Descargando Bitdefender..."
if ! curl -k -L -o Bitdefender.tar.gz "$URL_BITDEFENDER" 2>/dev/null; then
    echo "ERROR: Falló descarga de Bitdefender"
    exit 1
fi
echo "OK: Bitdefender descargado"

# Descargar templates
echo "Descargando Templates..."
if ! curl -k -L -o templates.tar.gz "$URL_TEMPLATES" 2>/dev/null; then
    echo "ERROR: Falló descarga de templates"
    exit 1
fi
echo "OK: Templates descargado"

######## EXTRAER ARCHIVOS ##########
echo "Extrayendo archivos..."

cd "$SALVATMP"

# Extraer Bitdefender
tar -xzf Bitdefender.tar.gz
if [ $? -ne 0 ]; then
    echo "ERROR: Falló extracción de Bitdefender"
    exit 1
fi

# Extraer Templates
tar -xzf templates.tar.gz
if [ $? -ne 0 ]; then
    echo "ERROR: Falló extracción de templates"
    exit 1
fi

echo "OK: Archivos extraídos"

######## COPIAR ARCHIVOS A DESTINOS ##########
echo "Copiando archivos a Kerio Control..."

# Bitdefender - Crear estructura correcta: Plugins/1/
echo "Actualizando Bitdefender..."

# Borrar TODO el contenido anterior
rm -rf "${BITDEFENDER_PATH}"/*

# Crear subdirectorio 1
mkdir -p "${BITDEFENDER_PATH}/1"

# Copiar archivos al subdirectorio 1
if [ -d "$SALVATMP/Plugins/1" ]; then
    cp -r "$SALVATMP/Plugins/1/"* "${BITDEFENDER_PATH}/1/"
    echo "OK: Bitdefender actualizado en ${BITDEFENDER_PATH}/1/"
elif [ -d "$SALVATMP/Bitdefender" ]; then
    # Estructura alternativa
    cp -r "$SALVATMP/Bitdefender/"* "${BITDEFENDER_PATH}/1/"
    echo "OK: Bitdefender actualizado (estructura alternativa)"
else
    echo "WARNING: No se encontró estructura esperada de Bitdefender"
fi

# Templates - Copiar a snort/templates/
echo "Actualizando Templates..."
if [ -d "$SALVATMP/templates" ]; then
    cp -r "$SALVATMP/templates/"* "$SNORT_TEMPLATES_PATH/"
    echo "OK: Templates actualizados"
else
    echo "WARNING: Directorio templates no encontrado en temporal"
fi

# Rules - Si existe el directorio, también actualizar (usando templates como fallback)
if [ -n "$SNORT_RULES_PATH" ]; then
    echo "Actualizando Rules..."
    if [ -d "$SALVATMP/rules" ]; then
        cp -r "$SALVATMP/rules/"* "$SNORT_RULES_PATH/"
        echo "OK: Rules actualizados"
    else
        echo "INFO: Rules no descargado, usando templates como fallback"
        # Copiar templates también a rules si es necesario
        if [ -f "$SALVATMP/templates/snort.tpl" ]; then
            cp "$SALVATMP/templates/snort.tpl" "$SNORT_RULES_PATH/" 2>/dev/null || true
        fi
    fi
fi

######## LIMPIAR ARCHIVOS TEMPORALES ##########
echo "Limpiando archivos temporales..."
cd "$SALVATMP"
rm -f Bitdefender.tar.gz templates.tar.gz
rm -rf Bitdefender Plugins templates rules
echo "OK: Limpieza completada"

######## VERIFICAR ACTUALIZACIÓN ##########
echo ""
echo "========================================"
echo "ACTUALIZACIÓN COMPLETADA"
echo "========================================"
echo ""
echo "Bitdefender (primeros archivos):"
ls "${BITDEFENDER_PATH}/1/" 2>/dev/null | head -5
echo "... ($(ls "${BITDEFENDER_PATH}/1/" 2>/dev/null | wc -l) archivos)"
echo ""
echo "Templates:"
ls -la "$SNORT_TEMPLATES_PATH/" | head -10
echo ""

######## REINICIAR KERIO CONTROL ##########
echo "Reiniciando Kerio Control..."
echo "El sistema se reiniciará en 5 segundos..."
sleep 5
reboot
