startup.sh 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #!/bin/bash -e
  2. # set -x (bash debug) if log level is trace
  3. # https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper
  4. log-helper level eq trace && set -x
  5. FIRST_START_DONE="${CONTAINER_STATE_DIR}/docker-phpldapadmin-first-start-done"
  6. #
  7. # HTTPS config
  8. #
  9. if [ "${PHPLDAPADMIN_HTTPS,,}" == "true" ]; then
  10. log-helper info "Set apache2 https config..."
  11. # generate a certificate and key if files don't exists
  12. # https://github.com/osixia/docker-light-baseimage/blob/stable/image/service-available/:ssl-tools/assets/tool/ssl-helper
  13. ssl-helper ${PHPLDAPADMIN_SSL_HELPER_PREFIX} "${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/certs/$PHPLDAPADMIN_HTTPS_CRT_FILENAME" "${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/certs/$PHPLDAPADMIN_HTTPS_KEY_FILENAME" "${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/certs/$PHPLDAPADMIN_HTTPS_CA_CRT_FILENAME"
  14. # add CA certificat config if CA cert exists
  15. if [ -e "${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/certs/$PHPLDAPADMIN_HTTPS_CA_CRT_FILENAME" ]; then
  16. sed -i "s/#SSLCACertificateFile/SSLCACertificateFile/g" ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/https.conf
  17. fi
  18. ln -sf ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/https.conf /etc/apache2/sites-available/phpldapadmin.conf
  19. #
  20. # HTTP config
  21. #
  22. else
  23. log-helper info "Set apache2 http config..."
  24. ln -sf ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/apache2/http.conf /etc/apache2/sites-available/phpldapadmin.conf
  25. fi
  26. #
  27. # Reverse proxy config
  28. #
  29. if [ "${PHPLDAPADMIN_TRUST_PROXY_SSL,,}" == "true" ]; then
  30. echo 'SetEnvIf X-Forwarded-Proto "^https$" HTTPS=on' > /etc/apache2/mods-enabled/remoteip_ssl.conf
  31. fi
  32. a2ensite phpldapadmin | log-helper debug
  33. #
  34. # phpLDAPadmin directory is empty, we use the bootstrap
  35. #
  36. if [ ! "$(ls -A -I lost+found /var/www/phpldapadmin)" ]; then
  37. log-helper info "Bootstap phpLDAPadmin..."
  38. cp -R /var/www/phpldapadmin_bootstrap/* /var/www/phpldapadmin
  39. rm -rf /var/www/phpldapadmin_bootstrap
  40. rm -f /var/www/phpldapadmin/config/config.php
  41. fi
  42. # if there is no config
  43. if [ ! -e "/var/www/phpldapadmin/config/config.php" ]; then
  44. # on container first start customise the container config file
  45. if [ ! -e "$FIRST_START_DONE" ]; then
  46. get_salt() {
  47. salt=$(</dev/urandom tr -dc '1324567890#<>,()*.^@$% =-_~;:/{}[]+!`azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN' | head -c64 | tr -d '\\')
  48. }
  49. # phpLDAPadmin cookie secret
  50. get_salt
  51. sed -i "s|{{ PHPLDAPADMIN_CONFIG_BLOWFISH }}|${salt}|g" ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/config/config.php
  52. append_to_file() {
  53. TO_APPEND=$1
  54. sed -i "s|{{ PHPLDAPADMIN_SERVERS }}|${TO_APPEND}\n{{ PHPLDAPADMIN_SERVERS }}|g" ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/config/config.php
  55. }
  56. append_value_to_file() {
  57. local TO_PRINT=$1
  58. local VALUE=$2
  59. local php_value=$(print_by_php_type "$VALUE")
  60. append_to_file "\$servers->setValue($TO_PRINT$php_value);"
  61. }
  62. print_by_php_type() {
  63. if [ "$1" == "True" ]; then
  64. echo "true"
  65. elif [ "$1" == "False" ]; then
  66. echo "false"
  67. elif [[ "$1" == array\(\'* ]]; then
  68. echo "$1"
  69. else
  70. echo "'$1'"
  71. fi
  72. }
  73. # phpLDAPadmin host config
  74. host_info(){
  75. local to_print=$1
  76. for info in $(complex-bash-env iterate "$2")
  77. do
  78. if [ $(complex-bash-env isRow "${!info}") = true ]; then
  79. local key=$(complex-bash-env getRowKey "${!info}")
  80. local valueVarName=$(complex-bash-env getRowValueVarName "${!info}")
  81. if [ $(complex-bash-env isTable "${!valueVarName}") = true ] || [ $(complex-bash-env isRow "${!valueVarName}") = true ]; then
  82. host_info "$to_print'$key'," "${valueVarName}"
  83. else
  84. append_value_to_file "$to_print'$key'," "${!valueVarName}"
  85. fi
  86. fi
  87. done
  88. }
  89. # phpLDAPadmin config
  90. for host in $(complex-bash-env iterate PHPLDAPADMIN_LDAP_HOSTS)
  91. do
  92. append_to_file "\$servers->newServer('ldap_pla');"
  93. if [ $(complex-bash-env isRow "${!host}") = true ]; then
  94. hostname=$(complex-bash-env getRowKey "${!host}")
  95. info=$(complex-bash-env getRowValueVarName "${!host}")
  96. if [ "${PHPLDAPADMIN_LDAP_HOSTS_FRIENDLY,,}" != "true" ]; then
  97. append_to_file "\$servers->setValue('server','host','$hostname');"
  98. fi
  99. append_to_file "\$servers->setValue('server','name','$hostname');"
  100. host_info "" "$info"
  101. else
  102. append_to_file "\$servers->setValue('server','name','${!host}');"
  103. append_to_file "\$servers->setValue('server','host','${!host}');"
  104. fi
  105. done
  106. sed -i "/{{ PHPLDAPADMIN_SERVERS }}/d" ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/config/config.php
  107. touch $FIRST_START_DONE
  108. fi
  109. log-helper debug "link ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/config/config.php to /var/www/phpldapadmin/config/config.php"
  110. cp -f ${CONTAINER_SERVICE_DIR}/phpldapadmin/assets/config/config.php /var/www/phpldapadmin/config/config.php
  111. fi
  112. # fix file permission
  113. find /var/www/ -type d -exec chmod 755 {} \;
  114. find /var/www/ -type f -exec chmod 644 {} \;
  115. chown www-data:www-data -R /var/www
  116. # symlinks special (chown -R don't follow symlinks)
  117. chown www-data:www-data /var/www/phpldapadmin/config/config.php
  118. chmod 400 /var/www/phpldapadmin/config/config.php
  119. echo "++++++++++++++copy lam to htdocs..."
  120. mv /tmp/ldap /var/www/phpldapadmin/htdocs/
  121. chmod 757 -R /var/www/phpldapadmin/htdocs/ldap/tmp/
  122. chmod 757 -R /var/www/phpldapadmin/htdocs/ldap/sess/
  123. chmod 777 -R /var/www/phpldapadmin/htdocs/ldap/config
  124. chown -R www-data:www-data /var/www/phpldapadmin/htdocs/ldap/
  125. exit 0