docker-entrypoint.sh 2.0 KB

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