#!/bin/bash

export AWS_DEFAULT_REGION=eu-west-1

export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=

S3_BUCKET="origincdn"
S3_PATH="${1:-/}"

aws s3 ls --recursive "s3://${S3_BUCKET}${S3_PATH}"| \
  perl -pe 's/^(?:\S+\s+){3}//'|\
while read x;
do
  case "${x}" in
    *.css)
      CONTENT_TYPE="text/css";
    ;;
    *.eot)
      CONTENT_TYPE="application/vnd.ms-fontobject";
    ;;
    *.gif)
      CONTENT_TYPE="image/gif";
    ;;
    *.tar.gz|*.tgz)
      CONTENT_TYPE="application/x-gtar";
    ;;
    *.gz)
      CONTENT_TYPE="application/gzip";
    ;;
    *.ico)
      CONTENT_TYPE="image/x-icon";
    ;;
    *.jpg|*.jpeg)
      CONTENT_TYPE="image/jpeg";
    ;;
    *.js)
      CONTENT_TYPE="application/javascript";
    ;;
    *.json)
      CONTENT_TYPE="application/json";
    ;;
    *.htm|*.html)
      CONTENT_TYPE="text/html";
    ;;
    *.map)
      CONTENT_TYPE="application/octet-stream";
    ;;
    *.png)
      CONTENT_TYPE="image/png";
    ;;
    *.svg)
      CONTENT_TYPE="image/svg+xml";
    ;;
    *.ttf)
      CONTENT_TYPE="font/ttf";
    ;;
    *.txt)
      CONTENT_TYPE="text/plain";
    ;;
    *.woff)
      CONTENT_TYPE="application/font-woff";
    ;;
    *.woff2)
      CONTENT_TYPE="application/font-woff2";
    ;;
    *.xml)
      CONTENT_TYPE="text/xml";
    ;;
    *.zip)
      CONTENT_TYPE="application/zip";
    ;;
    *)
      continue;
    ;;
  esac;

  S3_OPTS=""

  CHANGE_METADATA=0

  HEAD="$(aws s3api head-object --bucket "${S3_BUCKET}" --key "${x}")"

  CACHE_CONTROL_ORIG_STR="$(echo -n "${HEAD}"|jq -r '.CacheControl //empty')"
  if [ ! -z "${CACHE_CONTROL_ORIG_STR}" ];
  then
    CACHE_CONTROL_ORIG_LIST="$(echo -n "${HEAD}"|jq -r '.CacheControl | sub(" "; ""; "g") | split(",") | sort')"
    CACHE_CONTROL_ORIG_STR="$(echo -n "${CACHE_CONTROL_ORIG_LIST}"|jq -r 'join(",")')"

    MAX_AGE="$(echo -n "${CACHE_CONTROL_ORIG_LIST}"|jq -r '.[]|select(. | startswith("max-age="))')"
    if [ -z "${MAX_AGE}" ];
    then
      MAX_AGE="max-age=86400"
    fi

    CACHE_CONTROL="${MAX_AGE},must-revalidate"
    if [ "${CACHE_CONTROL}" != "${CACHE_CONTROL_ORIG_STR}" ];
    then
      CHANGE_METADATA=1
    fi
  else
    CHANGE_METADATA=1
  fi

  CONTENT_TYPE_ORIG_STR="$(echo -n "${HEAD}"|jq -r '.ContentType //empty | sub(" "; ""; "g")')"
  if [ "${CONTENT_TYPE}" != "${CONTENT_TYPE_ORIG_STR}" ];
  then
    CHANGE_METADATA=1
  fi

  if [ ${CHANGE_METADATA} -eq 1 ];
  then
    echo "${x}";
    echo "Content-Type: ${CONTENT_TYPE_ORIG_STR} vs ${CONTENT_TYPE}";
    echo "Cache-Control: ${CACHE_CONTROL_ORIG_STR} vs ${CACHE_CONTROL}";
    S3_OPTS="--content-type ${CONTENT_TYPE} --cache-control ${CACHE_CONTROL} --acl public-read"
    aws s3 cp ${S3_OPTS} "s3://${S3_BUCKET}/${x}"  "s3://${S3_BUCKET}/${x}" --metadata-directive REPLACE
  fi
done
