Skip to content
Snippets Groups Projects
guard.sh 8.19 KiB
Newer Older

#!/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
source ${SCRIPT_DIR}/../lib/setup.bash
checkRootPrivileges
detectDistribution

if [[ -z "${INSTALL_GUARD}" ]]; then
  # sourcing the default configuration to use
  echo "Warning: Missing environment variable. Sourcing default configuration files ..."
  exportProperties ${SCRIPT_DIR}/../config/config
  exportProperties ${SCRIPT_DIR}/../setup/versions
fi

## Help text
show_usage() {
echo -n "
Install Open-Xchange Guard packages and optionally initialize it

  $0 [OPTIONS]
    
    --enable
    --disable
    --restart
    -k | --key <value>

"
}


### 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
    ;;
    --enable)
    GUARD_ENABLE=true
    shift
    ;;
    --disable)
    GUARD_ENABLE=false
    shift
    ;;
    --middleware)
    MIDDLEWARE=true
    shift
    ;;
    --frontend)
    FRONTEND=true
    shift
    ;;
    --backend)
    BACKEND=true
    shift
    ;;    
    --install)
    INSTALL_GUARD=true
    shift
    ;;    
    --guard-endpoint)
    echo "Using $2 as guard endpoint url ..."
    export OX_GUARD_ENDPOINT_URL="$2"
    shift
    shift
    ;;
    # -k|--key)
    # value="$2"
    # shift
    # shift
    # ;;
    --restart)
    RESTART_OX=true
    shift
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift 
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters

if [ "$INSTALL_GUARD" = true ] ; then

  if [[ -z "${AS_GUARD_VERSION}" ]]; then
      echo ""
      echo "WARNING: Skipping guard setup"
      echo ""
      sleep 3
      exit 0
  fi

  # 
  if [[ "${INSTALL_MIDDLEWARE}" = true  ]]; then
      if [[ "${INSTALL_BACKEND}" = true  ]] || [[ "${INSTALL_TYPE}" == "singlenode" ]]; then
          # These packages are guard only, see below for middleware realted guard packages
          PACKAGES="open-xchange-guard open-xchange-guard-file-storage"
      fi

      PACKAGES="${PACKAGES} open-xchange-guard-ui open-xchange-guard-backend-plugin"
  fi

  if [[ "${INSTALL_FRONTEND}" = true  ]]; then
      PACKAGES="${PACKAGES} open-xchange-guard-ui-static open-xchange-guard-reader open-xchange-guard-help*"
  fi

  installPackages ${PACKAGES}
fi 


if [[ "${GUARD_ENABLE}" = true  ]]; then
  # Default value, override globally for cluster envs
  if [[ -z "${OX_GUARD_ENDPOINT_URL}" ]]; then
    OX_GUARD_ENDPOINT_URL="http://localhost:8009/guardadmin"
  fi

  if [[ "${INSTALL_FRONTEND}" = true  ]]; then
    echo "Adding Guard proxy rules ..." 
    cp -f ${SCRIPT_DIR}/../config/frontend/conf/89_guard-proxy.dummy ${HTTPD_CONF_PATH}/89_guard-proxy.conf

      
    if [[ "${INSTALL_TYPE}" == "singlenode" ]]; then
      # Creating guard config with higher prios for apache config (load order)
      ${SCRIPT_DIR}/../config/frontend/add-balancer.sh \
          --name "oxguard" \
          --balancer "http://localhost:8009" \
          --route "singlenode" \
          --priority 10

      ${SCRIPT_DIR}/../config/frontend/add-balancer.sh \
          --name "oxguardpks" \
          --balancer "http://localhost:8009/pks" \
          --route "singlenode" \
          --priority 10

    else
        echo "ERROR: guard init currently only supports singlenode. TODO: implement additional hostname parameter for balancer backend config"
        # e.g. guard.sh --guard-backend guard.host:8009
        exit 99
    fi
  fi
 
  INIT_STATE_FILE="/opt/open-xchange/etc/22-init-guard-done"
  if [ ! -f ${INIT_STATE_FILE} ]; then

    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/runallupdate -A ${OX_ADMINMASTER_USER} -P ${OX_ADMINMASTER_PASS}

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

    echo "$(date)" >> ${INIT_STATE_FILE}
  else
    echo "WARNING: This scripts has already been executed and will be skipped!"
    sleep 5
  fi



elif [[ "${GUARD_ENABLE}" = false  ]]; then
  echo ""
  # do something to disable it
fi

if [[ "${RESTART_OX}" = true  ]]; then
  restartService open-xchange
fi