#!/bin/bash

# Cabecera CGI para indicar el tipo de contenido
#echo "Content-Type: text/plain"
#echo ""

PASS_BASE="L4V3rd4d3r4R4z0n"

# Si no existe el archivo de log, lo crea
RUTA_LOGS="/var/www/ddns/log/ddns_registro_id_hardware.log"

# Inicializar el log archivo no existe
if [ ! -f "$RUTA_LOGS" ]; then
    echo 0 > "$RUTA_LOGS"
fi


# Extraer parámetros
NOMBRE_HOST=$1
NOMBRE_DOMINIO=$2
ID_HARD=$3
IP=$4

# Decodificar los valores URL si es necesario

NOMBRE_HOST=$(echo -e "$(echo "$NOMBRE_HOST" | sed 's/+/ /g;s/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\x\1/g')")
NOMBRE_DOMINIO=$(echo -e "$(echo "$NOMBRE_DOMINIO" | sed 's/+/ /g;s/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\x\1/g')")
ID_HARD=$(echo -e "$(echo "$ID_HARD" | sed 's/+/ /g;s/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\x\1/g')")
IP=$(echo -e "$(echo "$IP" | sed 's/+/ /g;s/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\x\1/g')")


#echo $NOMBRE_HOST >> $RUTA_LOGS
#echo $NOMBRE_DOMINIO >> $RUTA_LOGS
#echo $ID_HARD >> $RUTA_LOGS
#echo $IP >> $RUTA_LOGS

#Verifico a que dominio pertenece el host para enviar la consulta al dominio correspondiente

CLIENTE_QUERY="SELECT iddominio FROM dominios where nombredominio like '$NOMBRE_DOMINIO';"
CLIENTE_RESULT=$(echo "$CLIENTE_QUERY" | mysql -u ddns -p$PASS_BASE ddns -s -N)

#echo $CLIENTE_QUERY
#echo $CLIENTE_RESULT

if [ -z "$CLIENTE_RESULT" ]; then
    echo "$(date) - Error: Dominio no encontrado! Saliendo sin responder nada!" >> $RUTA_LOGS
    echo "{\"Resultado\":1,\"Mensaje\":\"Dominio inexistente\"}"
    #echo "$(date) - Error: Dominio no encontrado! Saliendo sin responder nada!"
    exit 1
fi


CLIENTE_QUERY="UPDATE hosts SET idhardware='$ID_HARD', valor='$IP', ultimoupdate=NOW(), activo=1 WHERE nombrehost='$NOMBRE_HOST' AND iddominio=$CLIENTE_RESULT;"
CLIENTE_RESULT=$(echo "$CLIENTE_QUERY" | mysql -u ddns -p$PASS_BASE ddns -s -N)

echo "$(date) - ID de hardware e IP actualizados correctamente en la base de datos!" >> $RUTA_LOGS

#En este punto tengo el ID de hardware y la IP en la base de datos. Ahora tengo que actualizar la IP del host en el DNS...

echo $CLIENTE_RESULT


############## ACTUALIZACION DNS #######################

# Actualizar el servidor DNS mediante `nsupdate`
ZONE=$NOMBRE_DOMINIO
SERVER="localhost"
DNS_KEY="/var/www/ddns/cgi/ddns.key"  # Ruta al archivo de clave segura para DDNS
NOMBRE_HOST=$NOMBRE_HOST.$ZONE


#	echo $DNS_KEY
#        echo $SERVER
#        echo $ZONE
#        echo $NOMBRE_HOST
#        echo $IP
#	cat $DNS_KEY

# Ejecutar nsupdate para actualizar la IP en el DNS
nsupdate -k $DNS_KEY<< EOF
server $SERVER
zone $ZONE
update delete $NOMBRE_HOST A
update add $NOMBRE_HOST 300 A $IP
send
EOF

# Verificar si nsupdate fue exitoso
if [ $? -eq 0 ]; then
    echo "$(date) - La IP del host $NOMBRE_HOST fue actualizada exitosamente a $IP en el DNS!" >> $RUTA_LOGS
    #echo "$(date) - La IP del host $NOMBRE_HOST fue actualizada exitosamente a $IP en el DNS!"
    echo "{\"Resultado\":0,\"Mensaje\":\"OK\"}"
else
    echo "$(date) - Error: No se pudo actualizar el DNS! Enviando mensaje de error..." >> $RUTA_LOGS
    #echo "$(date) - Error: No se pudo actualizar el DNS! Enviando mensaje de error..."
    echo "{\"Resultado\":1,\"Mensaje\":\"Error de actualizacion DNS\"}"
    exit 1
fi
