#!/usr/bin/env bash
# onx-clamav-sigupdate — ücretsiz ek imza feed'lerini indir, doğrula (load-test), reload
source "$(dirname "$0")/_lib/common.sh"
require_root
require_cmd jq
require_cmd curl
require_cmd clamscan
DBDIR="/var/lib/clamav"
mkdir -p "$DBDIR"
COUNT=0

# KRİTİK 1: clamav DB formatını UZANTIDAN anlar → load-test gerçek uzantıyla yapılmalı
#           (.tmp / uzantısız → "unknown file type" → reddedilir).
# KRİTİK 2: tarama hedefi /dev/null OLMAZ — clamscan onu "Not supported file type"
#           sayıp DB geçerli olsa bile exit 2 döner. Hedef olarak BOŞ NORMAL DOSYA kullan
#           (DB yüklenirse exit 0; DB bozuksa exit 2 → reddet).
# sigtool --verify KULLANILMAZ: imzasız üçüncü-parti feed'lerde daima başarısız olur.
TMPD="$(mktemp -d)"
trap 'rm -rf "$TMPD"' EXIT
PROBE="$TMPD/.probe"; : > "$PROBE"

# $1=url  $2=hedef dosya adı (gerçek uzantıyla, ör. sanesecurity.phish.ndb)
_install_feed() {
    local url="$1" name="$2" tmp
    tmp="$TMPD/$name"
    curl -fsSL "$url" -o "$tmp" 2>/dev/null || return 1
    [[ -s "$tmp" ]] || return 1
    clamscan -d "$tmp" "$PROBE" >/dev/null 2>&1 || return 1
    mv -f "$tmp" "$DBDIR/$name"
    return 0
}

# SaneSecurity — web-shell/phishing/backdoor + dosya-adı imzaları
for SIG in sanesecurity.ftm phish.ndb rogue.hdb winnow_malware.hdb \
           winnow_extended_malware.hdb jurlbl.ndb foxhole_filename.cdb foxhole_generic.cdb; do
    _install_feed "https://ftp.swin.edu.au/sanesecurity/${SIG}" "sanesecurity.${SIG}" && COUNT=$((COUNT+1)) || true
done

# Linux Malware Detect (rfxn)
for LMD in rfxn.hdb rfxn.ndb; do
    _install_feed "https://www.rfxn.com/downloads/${LMD}" "lmd.${LMD}" && COUNT=$((COUNT+1)) || true
done

# clamd reload (varsa)
command -v clamdscan &>/dev/null && clamdscan --reload &>/dev/null || true
systemctl reload clamav-daemon &>/dev/null || systemctl reload clamd@scan &>/dev/null || true

json_ok "$(jq -n --argjson n "$COUNT" '{ok:($n>0),installed:$n}')"
