#!/bin/bash
#
# Copyright (C) 2019 OX Software GmbH
# 
# This file is part of OX Automation.
#
# OX Automation 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, either version 3 of the License, or
# (at your option) any later version.
#
# OX Automation 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 OX Automation. If not, see <http://www.gnu.org/licenses/>.
#
#
# Authors:
# Benedikt Kroening <benedikt.kroening@open-xchange.com>
#
set -e
SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P)"

# sourcing some commonly used functions and executing basic checks
source ${SCRIPT_DIR}/../lib/common.bash
checkRootPrivileges
detectDistribution
# sourcing the default configuration to use
# source ${SCRIPT_DIR}/config

OX_GUARD_ENDPOINT_URL="http://localhost:8009/guardadmin"

## Help text
show_usage() {
echo -n "
  $0 [OPTIONS]


"
}

### reading config from command line; overriding defaults
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -h|--help)
    show_usage
    exit 0
    shift
    ;;
    --debug)
    echo "WARNING: Debug flag set (--debug)"
    set -x
    shift
    ;;
    --mail-host)
    echo "Using $2 as mail backend ..."
    OX_MAIL_HOST="$2"
    shift
    shift
    ;;
    --mail-domain)
    echo "Using $2 as mail domain ..."
    OX_MAIL_DOMAIN="$2"
    shift
    shift
    ;;
    --guard-endpoint)
    echo "Using $2 as guard endpoint url ..."
    OX_GUARD_ENDPOINT_URL="$2"
    shift
    shift
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift 
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

echo "Using following configuration:"
set | grep "OX_GUARD"
echo "==============================="
sleep 5


# configure guard
setOXProperty com.openexchange.capability.guard true /opt/open-xchange/etc/guard-api.properties
setOXProperty com.openexchange.capability.guard-mail true /opt/open-xchange/etc/guard-api.properties
setOXProperty com.openexchange.capability.guard-drive true /opt/open-xchange/etc/guard-api.properties
setOXProperty com.openexchange.share.staticGuestCapabilities "guard" /opt/open-xchange/etc/guard-api.properties
setOXProperty com.openexchange.guard.endpoint "${OX_GUARD_ENDPOINT_URL}" /opt/open-xchange/etc/guard-api.properties
setOXProperty com.openexchange.rest.services.basic-auth.login "open-xchange" /opt/open-xchange/etc/server.properties
setOXProperty com.openexchange.rest.services.basic-auth.password "secret" /opt/open-xchange/etc/server.properties


# set guard config 
# TODO:
setOXProperty com.openexchange.guard.oxGuardDatabaseHostname "${DATABASE_HOST_NAME}" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.oxGuardShardDatabase "${DATABASE_HOST_NAME}" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.databaseUsername "${OX_CONFIGDB_USER}" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.databasePassword "${OX_CONFIGDB_PASS}" /opt/open-xchange/etc/guard-core.properties

# setOXProperty com.openexchange.guard.restApiHostname "frontend" /opt/open-xchange/etc/guard-core.properties
# setOXProperty com.openexchange.guard.supportApiUsername "open-xchange" /opt/open-xchange/etc/guard-core.properties
# setOXProperty com.openexchange.guard.supportApiPassword "secret" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.restApiUsername "open-xchange" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.restApiPassword "secret" /opt/open-xchange/etc/guard-core.properties

# setOXProperty com.openexchange.guard.oxBackendPort 80 /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.oxBackendPath "/appsuite/api/" /opt/open-xchange/etc/guard-core.properties
# setup localhost config for sharing tests
# todo: guard external smtp config not hardcoded
setOXProperty com.openexchange.guard.externalReaderPath   "localhost/guard/reader/reader.html" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.externalEmailURL     "localhost" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.guestSMTPServer      "${OX_MAIL_HOST}" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.guestSMTPPort        "25" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.guestSMTPUsername    "noreply" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.guestSMTPPassword    "secret" /opt/open-xchange/etc/guard-core.properties
setOXProperty com.openexchange.guard.guestSMTPMailFrom    "noreply@${OX_MAIL_DOMAIN}" /opt/open-xchange/etc/guard-core.properties

restartService open-xchange
sleep 10
waitPort localhost 8009

/opt/open-xchange/sbin/guard --directory /opt/open-xchange/etc --init

restartService open-xchange
echo "$(date)" >> /opt/open-xchange/etc/99-init-middleware-done