#! /bin/sh
# postrm.skeleton
# Skeleton maintainer script showing all the possible cases.
# Written by Charles Briscoe-Smith, March-June 1998.  Public Domain.

# Abort if any command returns an error value
set -e

# Set variables
gitlab_debian_conf=/etc/gitlab/gitlab-debian.conf
gitlab_debian_defaults=/var/lib/gitlab/gitlab-debian.defaults

# This script is called twice during the removal of the package; once
# after the removal of the package's files from the system, and as
# the final step in the removal of this package, after the package's
# conffiles have been removed.

# Ensure the menu system is updated

# Read debian specific configuration
test -f ${gitlab_debian_conf} && . ${gitlab_debian_conf}
test -f ${gitlab_debian_defaults} && . ${gitlab_debian_defaults}

case "$1" in
  remove)
    # This package is being removed, but its configuration has not yet
    # been purged.
    :

    # Remove diversion
    # ldconfig is NOT needed during removal of a library, only during
    # installation

    ;;
  purge)
    # This package has previously been removed and is now having
    # its configuration purged from the system.
    :
    # purge debconf questions
    if [ -e /usr/share/debconf/confmodule ]; then
      # Source debconf library.
      . /usr/share/debconf/confmodule

      # Do you want to remove all data?
      db_input high gitlab/purge || true
      db_go
      
      # Check if we should remove data?
      db_get gitlab/purge
      if [ "${RET}" = "true" ]; then
        if [ -d ${gitlab_data_dir} ]; then
          for i in shared public db repositories secrets.yml Gemfile.lock; do
            test -e ${gitlab_data_dir}/$i && rm -rf ${gitlab_data_dir}/$i
          done
        fi
        test -e ${gitlab_log_dir} && rm -rf ${gitlab_log_dir}
        test -e ${gitlab_cache_path} && rm -rf ${gitlab_cache_path}
        test -e ${gitlab_pid_path} && rm -rf ${gitlab_pid_path}
        test -e ${gitlab_data_dir} && rm -rf ${gitlab_data_dir}
        if [ ! -z "${gitlab_user}" ]; then
            # Do only if gitlab_user is set
            if command -v dropdb >/dev/null; then
                echo "Removing Database: gitlab_production"
                su ${gitlab_user} -c 'psql gitlab_production -c ""' && su postgres -c "dropdb gitlab_production"
            else
                echo "dropdb command not found. Hence not removing database."
           fi
           echo "Removing user: ${gitlab_user}"
           id -u ${gitlab_user} && userdel -r ${gitlab_user}
        else
            echo "gitlab_user not set. Hence not removing user."
        fi
        rm -rf ${gitlab_ssl_path}
      fi

      # Remove my changes to the db.
      db_purge
    fi

    nginx_site="/etc/nginx/sites-available/${GITLAB_HOST}"

    test -f ${nginx_site} && echo "Found nginx site configuration at ${nginx_site}..."


    # we mimic dpkg as closely as possible, so we remove configuration
    # files with dpkg backup extensions too:
    ### Some of the following is from Tore Anderson:
    for ext in '~' '%' .bak .ucf-new .ucf-old .ucf-dist;  do
	rm -f ${nginx_site}$ext
	rm -f ${gitlab_debian_conf}$ext
	rm -f ${gitlab_yml}$ext
	rm -f ${gitlab_tmpfiles}$ext
	rm -f ${gitlab_shell_config}$ext
    done
 
    # remove the configuration file itself
    test -f ${nginx_site} && rm -f ${nginx_site}
    test -f ${gitlab_debian_conf} && rm -f ${gitlab_debian_conf}
    test -f ${gitlab_yml} && rm -f ${gitlab_yml}
    test -f ${gitlab_tmpfiles} && rm -f ${gitlab_tmpfiles}
    test -f ${gitlab_shell_config} && rm -f ${gitlab_shell_config}

    # and finally clear it out from the ucf database
    if which ucf >/dev/null; then
      test -n "${nginx_site}" && ucf --purge ${nginx_site}
      test -n "${gitlab_debian_conf}" && ucf --purge ${gitlab_debian_conf}
      test -n "${gitlab_yml}" && ucf --purge ${gitlab_yml}
      test -n "${gitlab_tmpfiles}" && ucf --purge ${gitlab_tmpfiles}
      test -n "${gitlab_shell_config}" && ucf -purge ${gitlab_shell_config}        
    fi
    
    if which ucfr >/dev/null; then
      test -n "${nginx_site}" && ucfr --purge gitlab ${nginx_site}
      test -n "${gitlab_debian_conf}" && ucfr --purge gitlab ${gitlab_debian_conf}
      test -n "${gitlab_yml}" && ucfr --purge gitlab ${gitlab_yml}
      test -n "${gitlab_tmpfiles}" && ucfr --purge gitlab ${gitlab_tmpfiles}
      test -n "${gitlab_shell_config}" && ucfr -purge gitlab ${gitlab_shell_config}
    fi

    # remove generated assets
    rm -rf ${gitlab_data_dir}/public/assets
      
    # Remove private copies of configuration files
    rm -f ${nginx_site_private}
    rm -f ${gitlab_debian_conf_private}
    rm -f ${gitlab_yml_private}
    rm -f ${gitlab_tmpfiles_private}
    rm -f ${gitlab_shell_config_private}

    # Remove systemd service overrides
    for service in mailroom unicorn sidekiq workhorse; do
      path=/etc/systemd/system/gitlab-${service}.service.d
      rm -rf $path
    done

       # cleanup complete
    exit 0

    ;;
  disappear)
    if test "$2" != overwriter; then
      echo "$0: undocumented call to \`postrm $*'" 1>&2
      exit 0
    fi
    # This package has been completely overwritten by package $3
    # (version $4).  All our files are already gone from the system.
    # This is a special case: neither "prerm remove" nor "postrm remove"
    # have been called, because dpkg didn't know that this package would
    # disappear until this stage.
    :

    ;;
  upgrade)
    # About to upgrade FROM THIS VERSION to version $2 of this package.
    # "prerm upgrade" has been called for this version, and "preinst
    # upgrade" has been called for the new version.  Last chance to
    # clean up.
    :

    ;;
  failed-upgrade)
    # About to upgrade from version $2 of this package TO THIS VERSION.
    # "prerm upgrade" has been called for the old version, and "preinst
    # upgrade" has been called for this version.  This is only used if
    # the previous version's "postrm upgrade" couldn't handle it and
    # returned non-zero. (Fix old postrm bugs here.)
    :

    ;;
  abort-install)
    # Back out of an attempt to install this package.  Undo the effects of
    # "preinst install...".  There are two sub-cases.
    :

    if test "${2+set}" = set; then
      # When the install was attempted, version $2's configuration
      # files were still on the system.  Undo the effects of "preinst
      # install $2".
      :

    else
      # We were being installed from scratch.  Undo the effects of
      # "preinst install".
      :

    fi ;;
  abort-upgrade)
    # Back out of an attempt to upgrade this package from version $2
    # TO THIS VERSION.  Undo the effects of "preinst upgrade $2".
    :

    ;;
  *) echo "$0: didn't understand being called with \`$1'" 1>&2
     exit 0;;
esac

#DEBHELPER#
exit 0
