#!/bin/bash
# 
# ***** BEGIN LICENSE BLOCK *****
# Zimbra Collaboration Suite Server
# Copyright (C) 2010, 2011, 2012, 2013, 2014, 2016 Synacor, Inc.
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software Foundation,
# version 2 of the License.
#
# This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
# without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
# You should have received a copy of the GNU General Public License along with this program.
# If not, see <https://www.gnu.org/licenses/>.
# ***** END LICENSE BLOCK *****
# 


usage() {
  echo "Usage: $0"
  exit 1
}

if [ "$(whoami)" != "zimbra" ]; then
  echo Error: must be run as zimbra user
  exit 1
fi

source /opt/zimbra/bin/zmshutil || exit 1
zmsetvars

[ -f /opt/zimbra/bin/zmacl ] && /opt/zimbra/bin/zmacl disable &> /dev/null
# shellcheck disable=SC2154
download_dir=${mailboxd_directory}/webapps/zimbra/downloads
index=${download_dir}/index.html

admin_dir=${mailboxd_directory}/webapps/zimbraAdmin/WEB-INF/classes/messages
zmsg=${admin_dir}/ZaMsg.properties

function find_download_filename {
  fname="$1"
  find "${download_dir}" -name "$fname" -exec basename '{}' \;
}

function append_download_if_missing {
  key="$1"
  val="$2"

  grep -q -E "\<${key}\>" "${zmsg}"
  if [ $? -ne 0 ]; then
    echo "${key} = /downloads/${val}" >> "${zmsg}"
  fi
}

# shellcheck disable=SC2034
function populate_downloads_to_append {
  CONNECTOR_MSI_DOWNLOAD_LINK=$(find_download_filename "ZmCustomizeMsi.js")
  ZCO_BRANDING_DOWNLOAD_LINK=$(find_download_filename "ZimbraBrandMsi.vbs")
  CONNECTOR_64_DOWNLOAD_LINK=$(find_download_filename "ZimbraConnectorOLK_*_x64.msi")
  CONNECTOR_UNSIGNED_64_DOWNLOAD_LINK=$(find_download_filename "ZimbraConnectorOLK_*_x64-UNSIGNED.msi")
  CONNECTOR_32_DOWNLOAD_LINK=$(find_download_filename "ZimbraConnectorOLK_*_x86.msi")
  CONNECTOR_UNSIGNED_32_DOWNLOAD_LINK=$(find_download_filename "ZimbraConnectorOLK_*_x86-UNSIGNED.msi")
  GENERAL_MIG_WIZ_X64_DOWNLOAD_LINK=$(find_download_filename "ZimbraMigration_*_x64.zip")
  GENERAL_MIG_WIZ_X86_DOWNLOAD_LINK=$(find_download_filename "ZimbraMigration_*_x86.zip")
  IMPORT_WIZ_DOWNLOAD_LINK=$(find_download_filename "ZCSPSTImportWizard-*.zip")
  DOMINO_MIG_WIZ_DOWNLOAD_LINK=$(find_download_filename "ZCSDominoMigrationWizard-*.zip")
  GROUPWISE_MIG_WIZ_DOWNLOAD_LINK=$(find_download_filename "ZCSGroupwiseMigrationWizard-*.exe")
  MIG_WIZ_DOWNLOAD_LINK=$(find_download_filename "ZCSExchangeMigrationWizard-*.zip")
}

if [ -d "${download_dir}" ]; then
  ZCO_32BIT=$(find_download_filename "ZimbraConnectorOLK*x86.msi")
  ZCO_64BIT=$(find_download_filename "ZimbraConnectorOLK*x64.msi")
  PST_IMPORT=$(find_download_filename "ZCSPSTImportWizard*")
  EXCHANGE_MIG_WIZARD=$(find_download_filename "ZCSExchangeMigrationWizard*")
  DOMINO_MIG_WIZARD=$(find_download_filename "ZCSDominoMigrationWizard*")
  GENERAL_MIG_WIZARD_32BIT=$(find_download_filename "ZimbraMigration_*_x86.zip")
  GENERAL_MIG_WIZARD_64BIT=$(find_download_filename "ZimbraMigration_*_x64.zip")

  populate_downloads_to_append 

  sed -e "s/@@ZCO_32BIT@@/${ZCO_32BIT}/" \
  -e "s/@@ZCO_64BIT@@/${ZCO_64BIT}/" \
  -e "s/@@PST_IMPORT@@/${PST_IMPORT}/" \
  -e "s/@@EXCHANGE_MIG_WIZARD@@/${EXCHANGE_MIG_WIZARD}/" \
  -e "s/@@GENERAL_MIG_WIZARD_32BIT@@/${GENERAL_MIG_WIZARD_32BIT}/" \
  -e "s/@@GENERAL_MIG_WIZARD_64BIT@@/${GENERAL_MIG_WIZARD_64BIT}/" \
  -e "s/@@DOMINO_MIG_WIZARD@@/${DOMINO_MIG_WIZARD}/" > "${index}" < "${index}.in"

  if [ -f "${zmsg}" ]; then
    sed -i -e "s#ZimbraConnectorOLK_.*x86.msi#${ZCO_32BIT}#" \
      -e "s#ZimbraConnectorOLK_.*x64.msi#${ZCO_64BIT}#" "${zmsg}"
  fi

  downloads_to_add=(
    CONNECTOR_MSI_DOWNLOAD_LINK
    ZCO_BRANDING_DOWNLOAD_LINK
    CONNECTOR_64_DOWNLOAD_LINK
    CONNECTOR_UNSIGNED_64_DOWNLOAD_LINK
    CONNECTOR_32_DOWNLOAD_LINK
    CONNECTOR_UNSIGNED_32_DOWNLOAD_LINK
    GENERAL_MIG_WIZ_X64_DOWNLOAD_LINK
    GENERAL_MIG_WIZ_X86_DOWNLOAD_LINK
    IMPORT_WIZ_DOWNLOAD_LINK
    DOMINO_MIG_WIZ_DOWNLOAD_LINK
    GROUPWISE_MIG_WIZ_DOWNLOAD_LINK
    MIG_WIZ_DOWNLOAD_LINK
  )

  for dl in "${downloads_to_add[@]}"; do
     # shellcheck disable=SC2046
     append_download_if_missing "${dl}" $(eval echo "\$$dl")
  done
fi

[ -f /opt/zimbra/bin/zmacl ] && /opt/zimbra/bin/zmacl enable &> /dev/null
exit 0

