#! /bin/sh -e

. /usr/share/debconf/confmodule
. /lib/system-integrity-check/envinfo
. /lib/system-integrity-check/getpkginfo
. /lib/system-integrity-check/wgetfile
. /lib/system-integrity-check/checkpkg

db_capb

db_progress START 0 4 system-integrity-check/progress/title
db_progress INFO system-integrity-check/progress/info-extract

mkdir -p /var/cache/system-integrity-check

wgetfile fatal http://$host/Packages.gz /var/cache/system-integrity-check/Packages.gz
wgetfile fatal http://$host/Packages.gz.md5 /var/cache/system-integrity-check/Packages.gz.md5

cd /var/cache/system-integrity-check/
if [ "$(md5sum Packages.gz)" != "$(cat Packages.gz.md5)" ]; then
  db_subst system-integrity-check/md5-check-error HOST "$host"
  db_subst system-integrity-check/md5-check-error SUBST0 "http://$host/pool/Packages.gz"
  db_input critical system-integrity-check/md5-check-error
  db_go || true
  exit 1
fi
zcat Packages.gz > Packages
rm Packages.gz Packages.gz.md5
cd /

db_progress STEP 1

if ! print_pkg_list_from_status; then
  db_input critical system-integrity-check/dpkg-status-error
  db_go || true
  exit 1
fi

db_progress STEP 1

pkgnum="$(cat /var/cache/system-integrity-check/pkglist | wc -l)"

if [ $pkgnum -le 0 ]; then
  db_input critical system-integrity-check/dpkg-status-error
  db_go || true
  exit 1
fi

# make the progress bar nicer
pkgnum="$(expr $pkgnum \* 2)"

db_progress STEP 1

/lib/system-integrity-check/parser

db_progress STEP 1
db_progress STOP

# go for the real check

db_progress START 0 $pkgnum system-integrity-check/progress/title

while read pkg ver <&9; do
  read poolname <&9
  if [ -n "$poolname" ]; then
    pkgname="$(basename $poolname).md5"
    db_subst system-integrity-check/progress/info-fetch SUBST0 "pool/$poolname.md5"
    db_progress INFO system-integrity-check/progress/info-fetch
    wgetfile warn "http://$host/pool/$poolname.md5" "/var/cache/system-integrity-check/$pkgname"
    if [ -f "/var/cache/system-integrity-check/$pkgname" ]; then
      if validate_md5file "/var/cache/system-integrity-check/$pkgname"; then
        db_progress STEP 1
        # check
        db_subst system-integrity-check/progress/info-pkg SUBST0 "$pkgname"
        db_progress INFO system-integrity-check/progress/info-pkg
        dorealcheck_md5 "/var/cache/system-integrity-check/$pkgname"
        db_progress STEP 1
      else
        db_subst system-integrity-check/report/md5-check-error SUBST0 "$pkgname"
        db_metaget system-integrity-check/report/md5-check-error description || RET=''
        if [ -z "$RET" ]; then
          echo "Unable to fetch debconf translation: using plain english." >> "$report"
          echo "Unable to verify md5sum of /var/cache/system-integrity-check/$pkgname. Skipping." >> "$report"
        else
          echo "$RET" >> "$report"
        fi
        db_progress STEP 2
      fi
    else
      db_progress STEP 2
    fi
  else
    db_subst system-integrity-check/report/grep-error SUBST0 "$pkg"
    db_subst system-integrity-check/report/grep-error SUBST1 "$ver"
    db_metaget system-integrity-check/report/grep-error description || RET=''
    if [ -z "$RET" ]; then
      echo "Unable to fetch debconf translation: using plain english." >> "$report"
      echo "Unable to find information for $pkg in version $ver. Skipping." >> "$report"
    else
      echo "$RET" >> "$report"
    fi
    db_progress STEP 2
  fi
done 9</var/cache/system-integrity-check/outlist

db_progress STOP

db_subst system-integrity-check/report SUBST0 "$report"
db_input high system-integrity-check/report || true
db_go || true

db_capb backup

exit 0
