#!/bin/bash

. ${SCRIPTS:-/}start-utils

: ${ENV_VARIABLE_PREFIX:=CFG_}

if isTrue "${REPLACE_ENV_VARIABLES}"; then
  log "Replacing env variables in configs that match the prefix $ENV_VARIABLE_PREFIX..."

  # File excludes
  fileExcludes=
  for f in ${REPLACE_ENV_VARIABLES_EXCLUDES}; do
    fileExcludes="${fileExcludes} -not -name $f"
  done

  # Directory excludes (recursive)
  dirExcludes=$(join_by " -o -path " ${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS})
  if [[ $dirExcludes ]]; then
    dirExcludes=" -type d ( -path ${dirExcludes} ) -prune -o"
  fi

  isDebugging && echo "Using find file exclusions: $fileExcludes"
  isDebugging && echo "Using find directory exclusions: $dirExcludes"

  while IFS='=' read -r name value ; do
    # check if name of env variable matches the prefix
    # sanity check environment variables to avoid code injections
    if [[ "$name" = $ENV_VARIABLE_PREFIX* ]] \
        && [[ $value =~ ^[0-9a-zA-Z_:/=?.+\-]*$ ]] \
        && [[ $name =~ ^[0-9a-zA-Z_\-]*$ ]]; then
      # Read content from file environment
      if [[ $name = *"_FILE" ]] && [[ -f $value ]]; then
        name="${name/_FILE/}"
        value=$(<$value)
      fi

      log "Replacing $name with $value ..."
      find /data/ \
          $dirExcludes \
          -type f \
          \( -name "*.yml" -or -name "*.yaml" -or -name "*.txt" -or -name "*.cfg" \
          -or -name "*.conf" -or -name "*.properties" \) \
          $fileExcludes \
          -exec sed -i 's#${'"$name"'}#'"$value"'#g' {} \;
    fi
  done < <(env)
fi

exec ${SCRIPTS:-/}start-minecraftFinalSetup $@
