#!/usr/bin/env bash

set -eo pipefail
shopt -s nullglob

WHEREAMI="$(cd "$(dirname "$0")" && pwd)"

# -------------------------- Set User and Group values -------------------------
IMPLY_USER="$(id -un)"
IMPLY_GROUP="$(id -gn)"

# ---------------------------- Load Common Routines ----------------------------

 . "${WHEREAMI}"/routines

# ----------------------------- Default Parameters -----------------------------

MANAGER_CONFIG_DIR=${MANAGER_CONFIG_DIR:-"/etc/opt/imply/manager"}

VERBOSE_CONFIG_GEN=${VERBOSE_CONFIG_GEN:-false}

TLS_DIR=${TLS_DIR:-"/opt/imply/manager/tls"}

IMPLY_AGENT_USER=${IMPLY_AGENT_USER:-"${IMPLY_USER}"}
IMPLY_AGENT_GROUP=${IMPLY_AGENT_GROUP:-"${IMPLY_GROUP}"}

IMPLY_MANAGER_HOST=${IMPLY_MANAGER_HOST:-"$(hostname)"}
IMPLY_MANAGER_BE_PORT=${IMPLY_MANAGER_BE_PORT:-9989}
IMPLY_MANAGER_SUPER_PRINCIPAL=${IMPLY_MANAGER_SUPER_PRINCIPAL:-"imply"}
IMPLY_MANAGER_REPO_PORT=${IMPLY_MANAGER_REPO_PORT:-9999}
IMPLY_MANAGER_AGENT_PORT=${IMPLY_MANAGER_AGENT_PORT:-9998}
IMPLY_MANAGER_AUTH_TOKEN_PATH=${IMPLY_MANAGER_AUTH_TOKEN_PATH:-"/run/secrets/imply-auth-token"}
IMPLY_MANAGER_CA_CERT_PATH=${IMPLY_MANAGER_CA_CERT_PATH:-"/run/secrets/imply-ca.crt"}
IMPLY_MANAGER_CA_KEY_PATH=${IMPLY_MANAGER_CA_KEY_PATH:-"/run/secrets/imply-ca.key"}
IMPLY_MANAGER_STORE_CA_CERT_PATH=${IMPLY_MANAGER_STORE_CA_CERT_PATH:-"/run/secrets/manager-store-ca.crt"}
IMPLY_MANAGER_STORE_CLIENT_CERT_PATH=${IMPLY_MANAGER_STORE_CLIENT_CERT_PATH:-"/run/secrets/manager-store-client.crt"}
IMPLY_MANAGER_STORE_CLIENT_KEY_PATH=${IMPLY_MANAGER_STORE_CLIENT_KEY_PATH:-"/run/secrets/manager-store-client.key"}
IMPLY_MANAGER_VAR_FILES_PATH=${IMPLY_MANAGER_VAR_FILES_PATH:-"/run/secrets"}

# --------------------------------- Auth Token ---------------------------------

if [[ -z "${IMPLY_MANAGER_AUTH_TOKEN}" && -f "${IMPLY_MANAGER_AUTH_TOKEN_PATH}" ]]; then
  IMPLY_MANAGER_AUTH_TOKEN=$(cat "${IMPLY_MANAGER_AUTH_TOKEN_PATH}")
fi

if [ -n "${IMPLY_MANAGER_AUTH_TOKEN}" ]; then
  echo "Authentication: Enabled"
else
  echo "Authentication: Disabled"
fi

# ---------------------- Metadata Store TLS Configuration ----------------------

if [ ! -f "${IMPLY_MANAGER_STORE_CA_CERT_PATH}" ] && [ -n "${IMPLY_MANAGER_STORE_CA_CERT}" ]; then
  mkdir -p "$(dirname "${IMPLY_MANAGER_STORE_CA_CERT_PATH}")"
  echo "${IMPLY_MANAGER_STORE_CA_CERT//$'\n'/}" > "${IMPLY_MANAGER_STORE_CA_CERT_PATH}"
fi

if [ ! -f "${IMPLY_MANAGER_STORE_CLIENT_CERT_PATH}" ] && [ -n "${IMPLY_MANAGER_STORE_CLIENT_CERT}" ]; then
  mkdir -p "$(dirname "${IMPLY_MANAGER_STORE_CLIENT_CERT_PATH}")"
  echo "${IMPLY_MANAGER_STORE_CLIENT_CERT//$'\n'/}" > "${IMPLY_MANAGER_STORE_CLIENT_CERT_PATH}"
fi

if [ ! -f "${IMPLY_MANAGER_STORE_CLIENT_KEY_PATH}" ] && [ -n "${IMPLY_MANAGER_STORE_CLIENT_KEY}" ]; then
  mkdir -p "$(dirname "${IMPLY_MANAGER_STORE_CLIENT_KEY_PATH}")"
  echo "${IMPLY_MANAGER_STORE_CLIENT_KEY//$'\n'/}" > "${IMPLY_MANAGER_STORE_CLIENT_KEY_PATH}"
fi

# ---------------------------- Manager License Key -----------------------------

if [ -z "${IMPLY_MANAGER_LICENSE_KEY}" ] && [ -f "${IMPLY_MANAGER_LICENSE_PATH}" ]; then
  IMPLY_MANAGER_LICENSE_KEY=$(cat "${IMPLY_MANAGER_LICENSE_PATH}")
fi

# ---------------------- Set Parameters Defined in Files -----------------------

# Allow users to specify configuration parameters via files.
#
# Format : {filename}={fileContents}
#
# Here the filename is the environment variable name to be set and the file
# contents is the value the environment variable will be set to

if [ -d "${IMPLY_MANAGER_VAR_FILES_PATH}" ]; then
  IFS=$'\n' read -ra FILES <<< "$(find "${IMPLY_MANAGER_VAR_FILES_PATH}" -type f)"
  load_file_as_env "${FILES[@]}"
fi
