#!/bin/bash

## Copyright (C) 2012 - 2020 ENCRYPTED SUPPORT LP <adrelanos@riseup.net>
## See the file COPYING for copying conditions.

command_not_found_sources_list_fix() {
   if [ -f "/var/lib/whonix/do_once/${FUNCNAME}_version_1" ]; then
      return 0
   fi

   if [ ! -e /etc/apt/sources.list ]; then
      ## https://forums.whonix.org/t/command-not-found-warningcould-not-open-file-etc-apt-sources-list/7903
      touch /etc/apt/sources.list || true
   fi

   mkdir --parents "/var/lib/whonix/do_once"
   touch "/var/lib/whonix/do_once/${FUNCNAME}_version_1"
}

command_not_found_permission_fix() {
   if [ -f "/var/lib/whonix/do_once/${FUNCNAME}_version_1" ]; then
      return 0
   fi

   if [ -f /var/lib/command-not-found/commands.db ]; then
      ## https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=917455
      chmod o+r /var/lib/command-not-found/commands.db || true
   fi

   mkdir --parents "/var/lib/whonix/do_once"
   touch "/var/lib/whonix/do_once/${FUNCNAME}_version_1"
}

bisq_desktop_directories_workaround() {
   if [ ! -f /usr/share/whonix/marker ]; then
      return 0
   fi

   if [ -f "/var/lib/whonix/do_once/${FUNCNAME}_version_1" ]; then
      return 0
   fi

   user_name="user"
   if test -f "/home/$user_name/.local/share/Bisq/btc_mainnet/tor/tor" ; then
      return 0
   fi
   if [ ! -d "/home/$user_name" ]; then
      return 0
   fi
   if ! id "$user_name" >&/dev/null ; then
      return 0
   fi

   if command -v qubesdb-read >&/dev/null; then
      qubes_vm_name="$(qubesdb-read /name)" || return 0
      qubes_vm_type="$(qubesdb-read /qubes-vm-type)" || return 0
   fi
   if [ "$qubes_vm_type" = "TemplateVM" ]; then
      return 0
   fi
   ## Avoid running in Qubes DVM Template.
   ## https://phabricator.whonix.org/T726
   if echo "$qubes_vm_name" | grep -q "\-dvm" ; then
      return 0
   fi

   sudo --non-interactive -u "$user_name" mkdir -p "/home/$user_name/.local/share/Bisq/btc_mainnet/tor" || true
   sudo --non-interactive -u "$user_name" touch "/home/$user_name/.local/share/Bisq/btc_mainnet/tor/tor" || true

   mkdir --parents "/var/lib/whonix/do_once"
   touch "/var/lib/whonix/do_once/${FUNCNAME}_version_1"
}

bashrc_migration() {
   if [ -f "/var/lib/whonix/do_once/${FUNCNAME}_version_6" ]; then
      return 0
   fi

   if [ ! -f "/usr/share/whonix/marker" ]; then
      ## Do this only in Whonix.
      return 0
   fi

   local file_name old new

   file_name="/home/user/.bashrc"

   if ! test -f "$file_name" ; then
      return 0
   fi

   old="/usr/share/dist-legacy/bashrc-old"
   new="/usr/share/dist-legacy/bashrc-new"

   if diff "$old" "$file_name" &>/dev/null ; then
      ## No diff. Therefore upgrade.
      cp "$new" "$file_name" || true
      chown user:user "$file_name" || true
   fi

   mkdir --parents "/var/lib/whonix/do_once"
   touch "/var/lib/whonix/do_once/${FUNCNAME}_version_6"
}

if [ "$(id -u)" != "0" ]; then
   echo "$0 ERROR: must run as root!" >&2
   exit 1
fi

## Fix for:
## dpkg-maintscript-helper: error: couldn't identify the package
[ -n "$DPKG_MAINTSCRIPT_PACKAGE" ] || DPKG_MAINTSCRIPT_PACKAGE="whonix-legacy"
[ -n "$DPKG_MAINTSCRIPT_NAME" ] || DPKG_MAINTSCRIPT_NAME="preinst"
export DPKG_MAINTSCRIPT_PACKAGE DPKG_MAINTSCRIPT_NAME
timeout --kill-after 60 60 /var/lib/dpkg/info/whonix-legacy.preinst install || true

if [ -d "/var/lib/whonixcheck" ]; then
   ## Whonix 13: whonixcheck runs as user 'user'.
   ## Whonix 14: whonixcheck runs as user 'whonixcheck'.
   chown --recursive whonixcheck:whonixcheck "/var/lib/whonixcheck" || true
fi

## automate Tor permission fix
## https://www.whonix.org/wiki/Tor#Permissions_Fix
## https://forums.whonix.org/t/tor-error-your-tor-config-file-contains-at-least-one-error-var-lib-tor-tor-cannot-be-read-permission-denied/6200
## cat /var/lib/dpkg/info/tor.postinst | grep chown
## chown debian-tor:debian-tor /var/lib/tor
## chown debian-tor:adm /var/log/tor
if [ -d "/var/lib/tor" ]; then
   chown --recursive debian-tor:debian-tor /var/lib/tor || true
fi
if [ -d "/var/log/tor" ]; then
   chown --recursive debian-tor:adm /var/log/tor || true
fi

command_not_found_sources_list_fix

command_not_found_permission_fix

bisq_desktop_directories_workaround

bashrc_migration
