#!/bin/bash
# prerm script for #PACKAGE#
#
# see: dh_installdeb(1)

set -e

# Begin vars.sh
#!/bin/bash
# DO NOT EDIT
# This file is regenerated each run.
# If you want to add or change a variable, edit debify/settings.json and the vars hashref

source /etc/os-release
export OBS_REPO="x${NAME}_${VERSION_ID}"
if ls debian/*.install &> /dev/null; then
    perl -pi -e 's/\${env:OBS_REPO}/$ENV{OBS_REPO}/' debian/*.install
fi

export DEB_INSTALL_ROOT="/usr/src/packages/BUILD/debian/tmp"
export DEB_SOURCE_ROOT="/usr/src/packages/BUILD/debian/SOURCES_FROM_SPEC"
export RPM_SOURCE_DIR="/usr/src/packages/BUILD/debian/SOURCES_FROM_SPEC"
export __isa_bits="64"
export __isa_name="x86"
export __sourcedir=""
export _bindir="/opt/cpanel//root/usr/bin"
export _datadir="/opt/cpanel//root/usr/share"
export _defaultdocdir="/opt/cpanel//root/usr/share/doc"
export _docdir="/opt/cpanel//root/usr/share/doc"
export _exec_prefix="/opt/cpanel//root/usr"
export _includedir="/opt/cpanel//root/usr/include"
export _infodir="/opt/cpanel//root/usr/share/info"
export _isa=""
export _lib="lib64"
export _libdir="/opt/cpanel//root/usr/lib64"
export _libexecdir="/opt/cpanel//root/usr/libexec"
export _localstatedir="/opt/cpanel//root/var"
export _mandir="/opt/cpanel//root/usr/share/man"
export _prefix="/opt/cpanel//root/usr"
export _root_bindir="/opt/cpanel//root/usr/bin"
export _root_datadir="/opt/cpanel//root/usr/share"
export _root_exec_prefix="/opt/cpanel//root/usr"
export _root_includedir="/opt/cpanel//root/usr/include"
export _root_infodir="/opt/cpanel//root/usr/share/info"
export _root_initddir="/opt/cpanel//root/etc/rc.d/init.d"
export _root_libdir="/opt/cpanel//root/usr/lib64"
export _root_libexecdir="/opt/cpanel//root/usr/libexec"
export _root_localstatedir="/opt/cpanel//root/var"
export _root_mandir="/opt/cpanel//root/usr/share/man"
export _root_prefix="/opt/cpanel//root/usr"
export _root_sbindir="/opt/cpanel//root/usr/sbin"
export _root_sharedstatedir="/opt/cpanel//root/usr/com"
export _root_sysconfdir="/opt/cpanel//root/etc"
export _sbindir="/opt/cpanel//root/usr/sbin"
export _scl_prefix="/opt/cpanel"
export _scl_root="/opt/cpanel//root"
export _sysconfdir="/opt/cpanel//root/etc"
export _unitdir="/usr/lib/systemd/system"
export buildroot="/usr/src/packages/BUILD"
export full_package_name="ea-modsec2-rules-owasp-crs-3.3.5"
export ix86="i386"
export name="ea-modsec2-rules-owasp-crs"
export nil="0"
export ns_name="ea"
export pkg=""
export pkg_name=""
export pkgname=""
export previous_version="3.3.4"
export release="1"
export release_prefix="1"
export scl=""
export scl_name=""
export scl_name_base=""
export scl_name_version=""
export scl_prefix=""
export version="3.3.5"
export version_with_debian_revision="3.3.5-1"
export SOURCE1="$DEB_SOURCE_ROOT/new_includes.yaml"
export SOURCE2="$DEB_SOURCE_ROOT/meta_OWASP3.yaml"
export SOURCE3="$DEB_SOURCE_ROOT/pkg.prerm"
export SOURCE4="$DEB_SOURCE_ROOT/pkg.postinst"
export SOURCE5="$DEB_SOURCE_ROOT/pkg.preinst"
# End vars.sh

# summary of how this script can be called:
#        * <prerm> `remove'
#        * <old-prerm> `upgrade' <new-version>
#        * <new-prerm> `failed-upgrade' <old-version>
#        * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
#        * <deconfigured's-prerm> `deconfigure' `in-favour'
#          <package-being-installed> <version> `removing'
#          <conflicting-package> <version>
# for details, see https://www.debian.org/doc/debian-policy/ or
# the debian-policy package


case "$1" in
    remove|upgrade|deconfigure)
    ;;

    failed-upgrade)
    ;;

    *)
        echo "prerm called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

# Contents of SOURCES/pkg.prerm
#!/bin/bash

# dpkg is evil, we depend on this behavior
set +e

PERL=/usr/local/cpanel/3rdparty/bin/perl
if test -x "$PERL"; then
    # NOOP
    echo ""
else
    # during building this cannot be executed
    exit 0
fi

if [ "$1" = "remove" ] || [ "$1" = "0" ] ; then
    echo "Removing OWASP3 config"
    PERL=/usr/local/cpanel/3rdparty/bin/perl

    # We can't `/usr/local/cpanel/scripts/modsec_vendor remove OWASP3`
    #   because it also removes the PKG owned files creating many warnings later
    #   so we emulate the bits we need

    # 1. update installed_from.yaml
    $PERL -MCpanel::CachedDataStore -e \
      'my $hr=Cpanel::CachedDataStore::loaddatastore($ARGV[0]);delete $hr->{data}{OWASP3};Cpanel::CachedDataStore::savedatastore($ARGV[0], { data => $hr->{data} })' \
      /var/cpanel/modsec_vendors/installed_from.yaml

    # 2. update modsec_cpanel_conf_datastore
    $PERL -MYAML::Syck -e 'my $h=YAML::Syck::LoadFile($ARGV[0]);delete $h->{active_vendors}{OWASP3};delete $h->{vendor_updates}{OWASP3};for my $rid (keys %{$h->{disabled_rules}}) { delete $h->{disabled_rules}{$rid} if $h->{disabled_rules}{$rid} eq "OWASP3" } for my $pth (keys %{$h->{active_configs}}) { delete $h->{active_configs}{$pth} if $pth =~ m{^modsec_vendor_configs/OWASP3/} } YAML::Syck::DumpFile($ARGV[0], $h)' /var/cpanel/modsec_cpanel_conf_datastore

    #. 3 kill caches
    rm -rf /var/cpanel/modsec_vendors/meta_OWASP3.cache /var/cpanel/modsec_vendors/installed_from.cache /var/cpanel/modsec_cpanel_conf_datastore.cache

    # 4. rebuild modsec2.cpanel.conf based on new modsec_cpanel_conf_datastore
    $PERL -MWhostmgr::ModSecurity::ModsecCpanelConf -e 'Whostmgr::ModSecurity::ModsecCpanelConf->new->manipulate(sub {})'

    # 5. remove updates-disabled from conf

    update_name="update_$$.pl"
    cat << EOT > $update_name
use strict;
use warnings;

use Cpanel::SysPkgs;

my \$pkg = "ea-modsec2-rules-owasp-crs";
my \$sp = Cpanel::SysPkgs->new;
if (\$sp->can("drop_exclude_rule_for_package")) {
    # This clause is for v102+
    \$sp->drop_exclude_rule_for_package (\$pkg);
}
else {
    # This clause is for v100-
    my (\$parse, \$write) = \$sp->can("write_conf") ? qw(parse_conf write_conf) : qw(parse_yum_conf write_yum_conf);
    \$parse="parse_pkgmgr_conf" if \$sp->can("parse_pkgmgr_conf");
    \$write = "write_pkgmgr_conf" if \$sp->can("write_pkgmgr_conf");
    \$sp->\$parse;
    if ( grep { \$_ eq \$pkg } split /\s+/, \$sp->{original_exclude_string} ) {
        \$sp->{exclude_string} =~ s/(?:^\$pkg\$|^\$pkg\s+|\s+\$pkg\s+|\s+\$pkg\$)//g;
        \$sp->\$write;
    }
}
exit 0;
EOT

    $PERL $update_name
    /bin/rm -f $update_name

fi

# End SOURCES/pkg.prerm


exit 0
