v-add-letsencrypt-host 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. # info: add letsencrypt for host and backend
  3. # options: NONE
  4. #
  5. # example: v-add-letsencrypt-host
  6. #
  7. # This function check and validates the backend certificate and generate
  8. # a new let's encrypt certificate.
  9. #----------------------------------------------------------#
  10. # Variables & Functions #
  11. #----------------------------------------------------------#
  12. # Includes
  13. # shellcheck source=/etc/hestiacp/hestia.conf
  14. source /etc/hestiacp/hestia.conf
  15. # shellcheck source=/usr/local/hestia/func/main.sh
  16. source $HESTIA/func/main.sh
  17. # shellcheck source=/usr/local/hestia/func/domain.sh
  18. source $HESTIA/func/domain.sh
  19. # load config file
  20. source_conf "$HESTIA/conf/hestia.conf"
  21. # Perform verification if read-only mode is enabled
  22. check_hestia_demo_mode
  23. # Argument definition
  24. domain=$(hostname -f)
  25. if [ -z $domain ]; then
  26. domain=$HOSTNAME
  27. fi
  28. user="$($BIN/v-search-domain-owner "$domain" web)"
  29. [[ -z "$user" ]] && user="admin"
  30. USER_DATA=$HESTIA/data/users/$user
  31. #----------------------------------------------------------#
  32. # Verifications #
  33. #----------------------------------------------------------#
  34. is_format_valid 'user' 'domain' 'aliases'
  35. is_object_valid 'user' 'USER' "$user"
  36. is_object_unsuspended 'user' 'USER' "$user"
  37. is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
  38. #----------------------------------------------------------#
  39. # Action #
  40. #----------------------------------------------------------#
  41. # Check if hostname already exists as domain
  42. if [ "$($BIN/v-list-web-domain $user $domain plain | cut -f 1)" != "$domain" ]; then
  43. # Create web domain for hostname
  44. $BIN/v-add-web-domain-ipv46 "$user" "$domain"
  45. fi
  46. # Validate web domain
  47. is_object_valid 'web' 'DOMAIN' "$domain"
  48. is_object_unsuspended 'web' 'DOMAIN' "$domain"
  49. get_domain_values 'web'
  50. # Load domain data
  51. parse_object_kv_list $(grep "DOMAIN='$domain'" $USER_DATA/web.conf)
  52. # Set ssl installation to yes
  53. add_ssl="yes"
  54. if [ "$SSL" = "yes" ]; then
  55. # Valildate SSL Certificate
  56. if [ -e "$USER_DATA/ssl/$domain.ca" ]; then
  57. if openssl verify -CAfile <(openssl x509 -in $USER_DATA/ssl/$domain.ca) $USER_DATA/ssl/$domain.pem | grep -q "$domain.pem: OK"; then
  58. add_ssl="no"
  59. fi
  60. else
  61. if openssl verify $USER_DATA/ssl/$domain.pem | grep -q "$domain.pem: OK"; then
  62. add_ssl="no"
  63. fi
  64. fi
  65. fi
  66. # Add let's encrypt ssl if needed
  67. if [ "$add_ssl" = "yes" ]; then
  68. # Add let's encrypt ssl
  69. $BIN/v-add-letsencrypt-domain "$user" "$domain"
  70. check_result $? "Let's Encrypt SSL creation failed" "$E_UPDATE"
  71. fi
  72. # Add certificate to backend
  73. $BIN/v-update-host-certificate "$user" "$domain"
  74. # Enable automatic ssl forward and hsts
  75. $BIN/v-add-web-domain-ssl-force "$user" "$domain" > /dev/null 2>&1
  76. $BIN/v-add-web-domain-ssl-hsts "$user" "$domain" > /dev/null 2>&1
  77. #----------------------------------------------------------#
  78. # Hestia #
  79. #----------------------------------------------------------#
  80. exit