#! /bin/bash
##    Creato da MoonDragon 
##    Creato il 19 settembre 2012 - aggiornato 13 dicembre 2024
##    Sito ufficiale: http://www.moondragon.comule.com
##    Mi trovate anche su http://forum.ubuntu-it.org
## Alcune volte non funziona perchè non riesce accedere al file, quindi dare:
## sudo chmod 777 /var/log/clamav/freshclam.log
## sudo chmod 777 /var/lib/clamav
## sudo chmod 777 /var/log/clamav
## sudo mkdir /usr/local/share/clamav
## sudo chmod 777 /usr/local/share/clamav
## in caso di altri problemi con i permessi usare chown -R clamav:clamav /var/log/clamav/
## fonte https://askubuntu.com/questions/880253/sudo-freshclam-not-working-error-cant-open-var-log-clamav-freshclam-log-in-a
## se ci sono problemi di aggiornamento provare con sudo systemctl stop clamav-freshclam.service && sudo freshclam -v --no-dns
## in caso non riuscisse a partire freshclam, immettere il percorso completo
## /usr/bin/freshclam -d -c 6 &
## in caso aumentare il timeout a 80
## sudo gedit /etc/clamav/freshclam.conf
## in caso di problemi ulteriori
## sudo dpkg-reconfigure clamav-freshclam
## poi dare
## sudo rm -f /usr/local/etc/freshclam.conf
## sudo ln -s /etc/clamav/freshclam.conf /usr/local/etc/freshclam.conf
## se si ha errore libreria dare
## sudo apt-get install --reinstall libclamav9 (numero finale in base alla versione)
## per abilitare la scansione pacchetti rar installare libclamunrar9
## per vedere file clamav
## sudo lsof | grep freshclam
## per vedere servizi attivi
## sudo service --status-all | grep clamav
## clamscan --version
## freshclam --version
## ls -l /var/lib/clamav/
## per fermare il servizio
## sudo /etc/init.d/clamav-freshclam stop
## per sapere la versione dell antivirus usare
## apt info clamav
## per aggiornare manualmente le firme antivirali usare
## wget https://database.clamav.net/daily.cvd
## sudo cp daily.cvd /var/lib/clamav/
##oppure
## wget https://db.it.clamav.net/main.cvd
## wget https://db.it.clamav.net/daily.cvd
## wget https://db.it.clamav.net/bytecode.cvd
## sudo cp main.cvd daily.cvd bytecode.cvd /var/lib/clamav/
## Versione dello script: 2.1
##
#!/bin/bash

# Funzione per eseguire comandi sudo in xterm
run_sudo_in_xterm() {
  local command="$1"
  xterm -e "bash -c 'sudo $command; echo -n \"Premi INVIO per continuare...\"; read'"
}

# Controllo se le dipendenze sono installate
inst=$(dpkg -l clamav-freshclam 2> /dev/null | tail -1 | cut -d " " -f1)
if [ "$inst" != "ii" ]; then
  zenity --warning --text="ClamAV non è installato. Procedo con l'installazione..."
  run_sudo_in_xterm "apt-get install -y clamav-freshclam libclamunrar9 && mkdir -p /var/log/clamav && chmod 777 -R /var/log/clamav && freshclam" | zenity --progress --pulsate --title="Installazione dipendenze" --text="Attendere il termine di installazione"
fi

# Controllo dei permessi sulla cartella di log
if [ ! -w /var/log/clamav ]; then
  zenity --warning --text="I permessi della cartella di log non sono corretti. Modifico i permessi..."
  run_sudo_in_xterm "chmod 777 -R /var/log/clamav"
fi

# Funzione per controllare l'età del database delle firme
check_db_age() {
  local db_file=$1
  if [ -f "$db_file" ]; then
    local modified_time=$(stat -c %Y "$db_file")
    local current_time=$(date +%s)
    local age=$(( (current_time - modified_time) / 86400 )) # giorni
    if [ "$age" -gt 30 ]; then
      return 0 # Il database è più vecchio di un mese
    fi
  fi
  return 1 # Il database non è più vecchio di un mese o non esiste
}

# Controllo dell'età dei database delle firme
if check_db_age "/var/lib/clamav/daily.cld" || check_db_age "/var/lib/clamav/main.cvd"; then
  zenity --question --text="Il database delle firme è più vecchio di un mese. Vuoi aggiornarlo?"
  if [ "$?" -eq "0" ]; then
    zenity --info --text="Aggiorna il database delle firme..."
    run_sudo_in_xterm "freshclam" || {
      zenity --warning --text="Aggiornamento non riuscito. Provo con i mirror..."
      wget -q https://database.clamav.net/daily.cvd -O /var/lib/clamav/daily.cvd &&
      wget -q https://database.clamav.net/main.cvd -O /var/lib/clamav/main.cvd &&
      run_sudo_in_xterm "freshclam" || {
        zenity --error --text="Impossibile aggiornare le firme antivirali.";
        exit 1
      }
    }
  fi
fi

# Scansione dei file e accumulo dei risultati
result=""
file_count=$(clamscan -r --scan-archive --bell -l "$@" | grep -c ^)
index=0
echo "Scansione in corso..."

{
    clamscan -i -r "$@" | while read -r line; do
        result+="$line"$'\n'
        index=$((index + 1))
        # Calcola la percentuale
        percent=$((index * 100 / file_count))
        echo $percent
        # Aggiorna Zenity
        echo "# Scansione in corso... ($percent%)"
    done
} | zenity --progress --title="Scansione in corso" --text="Attendere..." --percentage=0 --auto-close --width=100 --height=20

# Alla fine mostra i risultati totali
if [ -n "$result" ]; then
    zenity --text-info --title="Risultati scansione" --width=600 --height=400 --ok-label="Chiudi" <<< "$result"
else
    zenity --info --text="Nessuna minaccia trovata."
fi

