2
0

docker-entrypoint.sh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/bin/bash
  2. set -e
  3. function array_by_comma { local IFS=","; echo "$*"; }
  4. # Wait for containers
  5. while ! mysqladmin status --socket=/var/run/mysqld/mysqld.sock -u${DBUSER} -p${DBPASS} --silent; do
  6. echo "Waiting for SQL..."
  7. sleep 2
  8. done
  9. until [[ $(redis-cli -h redis-mailcow PING) == "PONG" ]]; do
  10. echo "Waiting for Redis..."
  11. sleep 2
  12. done
  13. # Trigger db init
  14. echo "Running DB init..."
  15. php -c /usr/local/etc/php -f /web/inc/init_db.inc.php
  16. # Migrate domain map
  17. declare -a DOMAIN_ARR
  18. redis-cli -h redis-mailcow DEL DOMAIN_MAP
  19. while read line
  20. do
  21. DOMAIN_ARR+=("$line")
  22. done < <(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT domain FROM domain" -Bs)
  23. while read line
  24. do
  25. DOMAIN_ARR+=("$line")
  26. done < <(mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} -e "SELECT alias_domain FROM alias_domain" -Bs)
  27. if [[ ! -z ${DOMAIN_ARR} ]]; then
  28. for domain in "${DOMAIN_ARR[@]}"; do
  29. redis-cli -h redis-mailcow HSET DOMAIN_MAP ${domain} 1
  30. done
  31. fi
  32. # Set API options if env vars are not empty
  33. if [[ ${API_ALLOW_FROM} != "invalid" ]] && \
  34. [[ ${API_KEY} != "invalid" ]] && \
  35. [[ ! -z ${API_KEY} ]] && \
  36. [[ ! -z ${API_ALLOW_FROM} ]]; then
  37. IFS=',' read -r -a API_ALLOW_FROM_ARR <<< "${API_ALLOW_FROM}"
  38. declare -a VALIDATED_API_ALLOW_FROM_ARR
  39. REGEX_IP6='^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$'
  40. REGEX_IP4='^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
  41. for IP in "${API_ALLOW_FROM_ARR[@]}"; do
  42. if [[ ${IP} =~ ${REGEX_IP6} ]] || [[ ${IP} =~ ${REGEX_IP4} ]]; then
  43. VALIDATED_API_ALLOW_FROM_ARR+=("${IP}")
  44. fi
  45. done
  46. VALIDATED_IPS=$(array_by_comma ${VALIDATED_API_ALLOW_FROM_ARR[*]})
  47. if [[ ! -z ${VALIDATED_IPS} ]]; then
  48. mysql --socket=/var/run/mysqld/mysqld.sock -u ${DBUSER} -p${DBPASS} ${DBNAME} << EOF
  49. DELETE FROM api;
  50. INSERT INTO api (api_key, active, allow_from) VALUES ("${API_KEY}", "1", "${VALIDATED_IPS}");
  51. EOF
  52. fi
  53. fi
  54. exec "$@"