#!/bin/bash

set -e

PROGNAME=$(basename "$0")

UPGRADE_TRIGGER='/var/lib/grommunio-files/pending_upgrade'
FILES_BASEDIR='/usr/sahre/grommunio-files'
FILES_LOGDIR='/var/log/grommunio-files'

get_distro_family () {
        local OS_INFO_FILE='/usr/lib/os-release'
        [ -e /etc/os-release ] && OS_INFO_FILE='/etc/os-relase'
        local OS_ID_LIKE=$(grep -P '^(ID|ID_LIKE)=' /etc/os-release | perl -pe 's/^(ID|ID_LIKE)="{0,1}([-._a-z0-9 ]+)"{0,1}$/\2/' | tr '\n' ' ')
        case "$OS_ID_LIKE" in
                *debian*)
                        echo "debian"
                        ;;
                *suse*)
                        echo "suse"
                        ;;
                *rhel*)
                        echo "rhel"
                        ;;
                *fedora*)
                        echo "rhel"
                        ;;
        esac
        return 0
}

do_upgrade () {
  local OLD_UMASK=$(umask)
  local TMPDIR=$(mktemp -d gfupdater.XXXXXXXXXX)
  umask 0700
  ! test -f "${FILES_LOGDIR}/upgrade.log" && touch "${FILES_LOGDIR}/upgrade.log" ||:
  umask "$OLD_UMASK"
  if [ -e "${UPGRADE_TRIGGER}" ] ; then
    if [ -s ${FILES_BASEDIR}/config/config.php ] ; then
      sudo -u grofiles ${FILES_BASEDIR}/occ maintenance:mode --on \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      cp -r ${FILES_BASEDIR}/lib/private/Repair ${TMPDIR}/ \
        >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      cp -r ${FILES_BASEDIR}/version.php ${TMPDIR}/ >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      tar -xf ${FILES_BASEDIR}/updater/updater-28.tar.gz -C ${FILES_BASEDIR}/ \
        >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ upgrade \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      tar -xf ${FILES_BASEDIR}/updater/updater-29.tar.gz -C ${FILES_BASEDIR}/ \
        >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ upgrade \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      tar -xf ${FILES_BASEDIR}/updater/updater-30.tar.gz -C ${FILES_BASEDIR}/ \
        >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ upgrade \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      cp -r ${TMPDIR}/* ${FILES_BASEDIR}/ \
        >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ upgrade \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ db:add-missing-columns \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ db:add-missing-primary-keys \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ db:add-missing-indices \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ db:convert-filecache-bigint \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      echo "ALTER DATABASE grofiles CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;" | mysql \
        >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ config:system:set mysql.utf8mb4 \
        --type boolean --value true \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ maintenance:repair --include-expensive \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ maintenance:mode --off \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ config:system:set integrity.check.disabled \
        --type boolean --value true --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config name 'grommunio Files' \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config logo ${FILES_BASEDIR}/logo.svg \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config logoheader ${FILES_BASEDIR}/logo.svg \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config favicon ${FILES_BASEDIR}/favicon.svg \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config background \
        ${FILES_BASEDIR}/background.jpg --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config -r disable-user-theming \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config slogan 'filesync & sharing' \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config url 'https://grommunio.com' \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ theming:config primary_color '#2A2B30' \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ app:enable user_external \
        --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ config:system:set maintenance_window_start \
        --type=integer --value=1 \
	--no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ config:system:set check_for_working_wellknown_setup \
        --type=integer --value=0 --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      sudo -u grofiles ${FILES_BASEDIR}/occ config:app:set onlyoffice DocumentServerUrl \
	--value "/office/" --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      default_phone_region_exists=$(sudo -u grofiles /usr/share/grommunio-files/occ config:system:get default_phone_region | wc -l)
      if [ "$default_phone_region_exists" -eq 0 ]; then
        sudo -u grofiles ${FILES_BASEDIR}/occ config:system:set default_phone_region \
          --value='43' --no-interaction >> ${FILES_LOGDIR}/upgrade.log 2>&1 ||:
      fi
    fi
    rm -rf "${UPGRADE_TRIGGER}" "${TMPDIR}"
  fi
}

trigger_upgrade () {
  touch "${UPGRADE_TRIGGER}"
}

case "$PROGNAME" in
	grommunio-files-upgrade)
		do_upgrade
		;;
	grommunio-files-prepare-upgrade)
		trigger_upgrade
		;;
esac

