configuration_functions.sh 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. # All functions used during configuration of a service
  2. # only relevant if the menu shows "Configure service", although the service has already been configured or installed. This should only happen if things are messed up.
  3. pre_configure_routine() {
  4. if [[ "${CONFIGURED_SERVICES[@]}" =~ ${PROPER_NAME} ]] || [[ -f "${ENV_DIR}/${SERVICE_NAME}" ]]|| [[ "${INSTALLED_SERVICES[@]}" =~ ${PROPER_NAME} ]];then
  5. prompt_confirm "Existing configuration found. Destroy containers and reconfigure?" && destroy || echo "Exiting..";exit
  6. fi
  7. }
  8. # Ask the user what fqdn to use for the service
  9. set_domain() {
  10. echo ""
  11. [[ $INVALID ]] && echo -e "\nPlease enter a valid domain!\n"
  12. INVALID=
  13. while [[ -z $fqdn_is_valid ]];do
  14. if [[ -z "${SERVICE_DOMAIN[0]}" ]]; then
  15. read -p "${PROPER_NAME} Service Domain (FQDN): " SERVICE_DOMAIN
  16. else
  17. previous_domain=${SERVICE_DOMAIN[0]}
  18. unset SERVICE_DOMAIN
  19. read -p "${PROPER_NAME} Service Domain (FQDN): " -ei "${previous_domain}" SERVICE_DOMAIN
  20. fi
  21. validate_fqdn ${SERVICE_DOMAIN[0]}
  22. done
  23. INVALID=1
  24. echo ""
  25. if [[ $PROMPT_SSL ]];then
  26. configure_ssl
  27. fi
  28. }
  29. # Ask user for mx info. User has the option to set for the service that is being configured global mx environment variables or service specific. This creates mx.env (if it does not exist yet) or ${SERVICE_NAME}_mx.env respectively
  30. configure_mx() {
  31. echo ""
  32. prompt_confirm "Use global SMTP Settings?"
  33. if [[ $? == 1 ]];then
  34. SERVICE_SPECIFIC_MX="${SERVICE_NAME}_"
  35. else
  36. unset SERVICE_SPECIFIC_MX
  37. fi
  38. if [[ ( $SERVICE_SPECIFIC_MX && ! -f "${ENV_DIR}/${SERVICE_SPECIFIC_MX}mx.env" ) || ( -z $SERVICE_SPECIFIC_MX && ! -f "${ENV_DIR}/mx.env" ) ]];then
  39. echo -e "# \n# \e[4mSMTP Settings\e[0m"
  40. if [ "$MX_EMAIL" ]; then
  41. read -p "SMTP User: " -ei "$MX_EMAIL" MX_EMAIL
  42. else
  43. read -p "SMTP User: " -ei "" MX_EMAIL
  44. fi
  45. unset MX_PASSWORD
  46. while [[ -z ${MX_PASSWORD} ]];do
  47. if [ $VALIDATE ];then
  48. echo -e "\n\e[31m Password cannot be empty.\e[0m"
  49. fi
  50. stty_orig=`stty -g`
  51. stty -echo
  52. read -p "SMTP Password: " -ei "" MX_PASSWORD
  53. stty $stty_orig
  54. echo ""
  55. VALIDATE=1
  56. done
  57. unset VALIDATE
  58. invalid_mx=1
  59. while [[ $invalid_mx ]];do
  60. if [ -z "$MX_HOSTNAME" ]; then
  61. read -p "MX Hostname for email delivery (FQDN): " -ei "smtp.example.com" MX_HOSTNAME
  62. else
  63. read -p "MX Hostname for email delivery (FQDN): " -ei "$MX_HOSTNAME" MX_HOSTNAME
  64. fi
  65. host -t mx ${MX_EMAIL#*@} | grep ${MX_HOSTNAME} >/dev/null \
  66. && unset invalid_mx \
  67. || echo -e "\n\e[31m${MX_HOSTNAME} not a valid mx entry for ${MX_EMAIL#*@}.\e[0m\n"
  68. done
  69. cat <<-EOF >> "${ENV_DIR}/${SERVICE_SPECIFIC_MX}mx.env"
  70. #MX
  71. ## ------------------------------
  72. MX_HOSTNAME=${MX_HOSTNAME}
  73. MX_EMAIL=${MX_EMAIL}
  74. MX_PASSWORD="${MX_PASSWORD}"
  75. ## ------------------------------
  76. #/MX
  77. EOF
  78. fi
  79. }
  80. # Services that need to be connected to a fqdn will have the variable $PROMPT_SSL set. In that case this function asks if the user wants to get an SSL certificate from Let's Encrypt or keep using the self signed certificate that will be generated during configuration
  81. configure_ssl() {
  82. prompt_confirm "Use Letsencrypt instead of a self-signed certificate?"
  83. if [[ $? == 0 ]];then
  84. SSL_CHOICE="le"
  85. if [[ $LE_EMAIL ]]; then
  86. prompt_confirm "Use ${LE_EMAIL} for Let's Encrypt?"
  87. if [[ $? == 1 ]];then
  88. read -p "Enter E-mail Adress for Let's Encrypt: " LE_EMAIL
  89. if ! [[ $(grep ${LE_EMAIL} "${ENV_DIR}"/dockerbunker.env) ]];then
  90. prompt_confirm "Use this address globally for every future service configured to obtain a Let's Encrypt certificate?"
  91. if [[ $? == 0 && ! $(grep ${LE_EMAIL} "${ENV_DIR}"/dockerbunker.env) ]];then
  92. sed -i "s/LE_EMAIL=.*/LE_EMAIL="${LE_EMAIL}"/" "${ENV_DIR}"/dockerbunker.env
  93. fi
  94. fi
  95. fi
  96. else
  97. get_le_email
  98. fi
  99. else
  100. SSL_CHOICE="ss"
  101. fi
  102. }
  103. # Ask what email to use for Let's Encrypt
  104. get_le_email() {
  105. echo ""
  106. read -p "Existing E-mail Adress for letsencrypt: " -ei "" LE_EMAIL
  107. [[ -f ${SERVICE_ENV} ]] && sed -i "s/LE_EMAIL=.*/LE_EMAIL=${LE_EMAIL}/" ${SERVICE_ENV}
  108. }
  109. # Update dockerbunker.env to let dockerbunker know that the service is now configured, then offer a menu to choose further steps (setup/reconfigure/destroy)
  110. post_configure_routine() {
  111. if [[ ${STATIC} ]];then
  112. if ! [[ "${STATIC_SITES[@]}" =~ "${SERVICE_DOMAIN[0]}" ]];then
  113. STATIC_SITES+=( "${SERVICE_DOMAIN[0]}" )
  114. sed -i '/STATIC_SITES/d' "${ENV_DIR}/dockerbunker.env"
  115. declare -p STATIC_SITES >> "${ENV_DIR}/dockerbunker.env"
  116. fi
  117. else
  118. [[ ${SERVICE_DOMAIN[0]} ]] && ! elementInArray "${PROPER_NAME}" "${!WEB_SERVICES[@]}" && WEB_SERVICES+=( [${PROPER_NAME}]="${SERVICE_DOMAIN[0]}" )
  119. ! elementInArray "${PROPER_NAME}" "${CONFIGURED_SERVICES[@]}" && CONFIGURED_SERVICES+=( "${PROPER_NAME}" )
  120. for containers in ${add_to_network[@]};do
  121. [[ ( $container && ! "${CONTAINERS_IN_DOCKERBUNKER_NETWORK[@]}" =~ "${container}" ) ]] && CONTAINERS_IN_DOCKERBUNKER_NETWORK+=( "${container}" )
  122. done
  123. if [[ -f "${ENV_DIR}/dockerbunker.env" ]];then
  124. sed -i '/CONFIGURED_SERVICES/d' "${ENV_DIR}/dockerbunker.env"
  125. sed -i '/WEB_SERVICES/d' "${ENV_DIR}/dockerbunker.env"
  126. sed -i '/CONTAINERS_IN_DOCKERBUNKER_NETWORK/d' "${ENV_DIR}/dockerbunker.env"
  127. sed -i '/INSTALLED_SERVICES/d' "${ENV_DIR}/dockerbunker.env"
  128. declare -p CONFIGURED_SERVICES >> "${ENV_DIR}/dockerbunker.env"
  129. declare -p INSTALLED_SERVICES >> "${ENV_DIR}/dockerbunker.env"
  130. declare -p WEB_SERVICES >> "${ENV_DIR}/dockerbunker.env"
  131. declare -p CONTAINERS_IN_DOCKERBUNKER_NETWORK >> "${ENV_DIR}/dockerbunker.env" 2>/dev/null
  132. echo ""
  133. echo "Please run \"Setup service\" next."
  134. bash "${BASE_DIR}/data/services/${SERVICE_NAME}/${SERVICE_NAME}.sh"
  135. fi
  136. fi
  137. }