#!/usr/bin/env bash
# shellcheck disable=SC2162,SC2046,SC2002,SC2034
set -euo pipefail

#
# GovCMS illegal files.
#

GOVCMS_ILLEGAL_FILE_PATTERN=${GOVCMS_ILLEGAL_FILE_PATTERN:-"(adminer|phpmyadmin|bigdump)"}
GOVCMS_FILE_LIST=${GOVCMS_FILE_LIST:-}
GOVCMS_PREPARE_XML_SCRIPT=${GOVCMS_PREPARE_XML_SCRIPT:-govcms-prepare-xml}
GOVCMS_OUTFILE=${GOVCMS_OUTFILE:-govcms-illegal-files}

FAILURES=""
function join_char { local IFS="$1" shift; echo "$*"; }

function illegal_file {
  if [[ "$1" =~ $GOVCMS_ILLEGAL_FILE_PATTERN(.+)?\.php ]]; then
    return 0
  fi
  return 1
}

function illegal_file {
  if [[ "$1" =~ $GOVCMS_ILLEGAL_FILE_PATTERN(.+)?\.php ]]; then
    return 0
  fi
  return 1
}

echo "GovCMS Validate :: Illegal files"

if [ -n "${GOVCMS_FILE_LIST}" ]; then
  for file in $GOVCMS_FILE_LIST; do
    if illegal_file "$file" -eq 0; then
      echo "[fail]: Illegal file found [$file]"
      FAILURES="${FAILURES},${1}"
    fi
  done
  echo "[success]: No illegal files."
  exit 0
fi

while read -rd $'\0' file; do
  if illegal_file "$file"; then
    echo "[fail]: Illegal file found [$file]"
    FAILURES="${FAILURES},${file}"
  fi
done < <(find . -name "*.php" -print0)

if [ -x "${GOVCMS_PREPARE_XML_SCRIPT}" ]; then
  FILE_LFS=$(join_char , "${GOVCMS_FILE_LIST}")
  ${GOVCMS_PREPARE_XML_SCRIPT} --failures="${FAILURES}" --total="${FILE_LFS}" --name="${GOVCMS_OUTFILE}" --fail-message="GovCMS.QA.IllegalFiles"
fi

if [ -z "${FAILURES}" ]; then
  echo "[success]: No illegal files."
  exit 0
fi

echo "[fail]: Illegal files detected"
exit 1
