11#! /bin/bash
22# info: check letsencrypt domain
3- # options: USER DOMAIN [ALIASES]
3+ # options: USER DOMAIN [ALIASES] [MAIL]
44#
55# The function check and validates domain with Let's Encrypt
66
1313user=$1
1414domain=$2
1515aliases=$3
16+ mail=$4
1617
1718# LE API
1819LE_API=' https://acme-v02.api.letsencrypt.org'
@@ -54,29 +55,41 @@ query_le_v2() {
5455# Verifications #
5556# ----------------------------------------------------------#
5657
57- check_args ' 2' " $# " ' USER DOMAIN [ALIASES]'
58+ check_args ' 2' " $# " ' USER DOMAIN [ALIASES] [MAIL] '
5859is_format_valid ' user' ' domain' ' aliases'
59- is_system_enabled " $WEB_SYSTEM " ' WEB_SYSTEM'
6060is_object_valid ' user' ' USER' " $user "
6161is_object_unsuspended ' user' ' USER' " $user "
62- is_object_valid ' web ' ' DOMAIN ' " $domain "
63- is_object_unsuspended ' web ' ' DOMAIN ' " $domain "
64- get_domain_values ' web'
65- # check if alias is the letsencrypt wildcard domain, if not, make the normal checks
66- if [[ " $aliases " != " *. $domain " ]] ; then
62+ if [ -z " $mail " ] ; then
63+ is_system_enabled " $WEB_SYSTEM " ' WEB_SYSTEM '
64+ is_object_valid ' web' ' DOMAIN ' " $domain "
65+ is_object_unsuspended ' web ' ' DOMAIN ' " $ domain"
66+ get_domain_values ' web '
6767 for alias in $( echo " $aliases " | tr ' ,' ' \n' | sort -u) ; do
6868 check_alias=" $( echo $ALIAS | tr ' ,' ' \n' | grep ^$alias $) "
6969 if [ -z " $check_alias " ]; then
7070 check_result $E_NOTEXIST " domain alias $alias doesn't exist"
7171 fi
7272 done
73- fi ;
73+ else
74+ is_system_enabled " $MAIL_SYSTEM " ' MAIL_SYSTEM'
75+ is_object_valid ' mail' ' DOMAIN' " $domain "
76+ is_object_unsuspended ' mail' ' DOMAIN' " $domain "
77+ is_object_value_empty ' mail' ' DOMAIN' " $domain " ' $SSL'
78+ fi
79+
7480
7581
7682# ----------------------------------------------------------#
7783# Action #
7884# ----------------------------------------------------------#
7985
86+ # Generate correct variables for mail domain SSL certificates
87+ if [ ! -z " $mail " ]; then
88+ root_domain=$domain
89+ domain=" mail.$root_domain "
90+ aliases=" $WEBMAIL_ALIAS .$root_domain "
91+ fi
92+
8093# Registering LetsEncrypt user account
8194$BIN /v-add-letsencrypt-user $user
8295if [ " $? " -ne 0 ]; then
@@ -152,24 +165,38 @@ for auth in $authz; do
152165 $BIN /v-add-dns-record $user $domain " _acme-challenge" " TXT" $record
153166 check_result $? " DNS _acme-challenge record wasn't created"
154167 else
155- if [ " $WEB_SYSTEM " = ' nginx' ] || [ ! -z " $PROXY_SYSTEM " ]; then
156- conf=" $HOMEDIR /$user /conf/web/nginx.$domain .conf_letsencrypt"
157- sconf=" $HOMEDIR /$user /conf/web/snginx.$domain .conf_letsencrypt"
158- if [ ! -e " $conf " ]; then
159- echo ' location ~ "^/\.well-known/acme-challenge/(.*)$" {' \
160- > $conf
161- echo ' default_type text/plain;' >> $conf
162- echo ' return 200 "$1.' $THUMB ' ";' >> $conf
163- echo ' }' >> $conf
164- fi
165- if [ ! -e " $sconf " ]; then
166- ln -s " $conf " " $sconf "
168+ if [ -z " $mail " ]; then
169+ if [ " $WEB_SYSTEM " = ' nginx' ] && [ ! -z " $PROXY_SYSTEM " ]; then
170+ if [ ! -z " $mail " ]; then
171+ conf=" $HOMEDIR /$user /conf/mail/$root_domain /$PROXY_SYSTEM .conf_letsencrypt"
172+ sconf=" $HOMEDIR /$user /conf/mail/$root_domain /$PROXY_SYSTEM .ssl.conf_letsencrypt"
173+ else
174+ conf=" $HOMEDIR /$user /conf/web/$domain /$PROXY_SYSTEM .conf_letsencrypt"
175+ sconf=" $HOMEDIR /$user /conf/web/$domain /$PROXY_SYSTEM .ssl.conf_letsencrypt"
176+ fi
177+
178+ if [ ! -e " $conf " ]; then
179+ echo ' location ~ "^/\.well-known/acme-challenge/(.*)$" {' \
180+ > $conf
181+ echo ' default_type text/plain;' >> $conf
182+ echo ' return 200 "$1.' $THUMB ' ";' >> $conf
183+ echo ' }' >> $conf
184+ fi
185+ if [ ! -e " $sconf " ]; then
186+ ln -s " $conf " " $sconf "
187+ fi
188+ $BIN /v-restart-proxy
189+ check_result $? " Proxy restart failed" > /dev/null
190+
191+ else
192+ well_known=" $HOMEDIR /$user /web/$domain /public_html/.well-known"
193+ acme_challenge=" $well_known /acme-challenge"
194+ mkdir -p $acme_challenge
195+ echo " $token .$THUMB " > $acme_challenge /$token
196+ chown -R $user :$user $well_known
167197 fi
168- $BIN /v-restart-proxy
169- check_result $? " Proxy restart failed" > /dev/null
170-
171198 else
172- well_known=" $HOMEDIR / $user /web/ $rdomain /public_html /.well-known"
199+ well_known=" /var/lib/roundcube /.well-known"
173200 acme_challenge=" $well_known /acme-challenge"
174201 mkdir -p $acme_challenge
175202 echo " $token .$THUMB " > $acme_challenge /$token
@@ -242,10 +269,25 @@ if [[ $(head -n 1 $ssl_dir/$domain.ca) = "-----END CERTIFICATE-----" ]]; then
242269 sed -i ' 1,2d' $ssl_dir /$domain .ca
243270fi
244271
272+ # Rename certs for mail
273+ if [ ! -z " $mail " ]; then
274+ mv $ssl_dir /$domain .ca $ssl_dir /$root_domain .ca
275+ mv $ssl_dir /$domain .crt $ssl_dir /$root_domain .crt
276+ mv $ssl_dir /$domain .csr $ssl_dir /$root_domain .csr
277+ mv $ssl_dir /$domain .key $ssl_dir /$root_domain .key
278+ mv $ssl_dir /$domain .pem $ssl_dir /$root_domain .pem
279+ fi
280+
245281# Adding SSL
246- ssl_home= $( search_objects ' web' ' LETSENCRYPT' ' yes' ' SSL_HOME' )
247- $BIN /v-delete-web-domain-ssl $user $domain > /dev/null 2>&1
248- $BIN /v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home
282+ if [ -z " $mail " ]; then
283+ ssl_home=$( search_objects ' web' ' LETSENCRYPT' ' yes' ' SSL_HOME' )
284+ $BIN /v-delete-web-domain-ssl $user $domain > /dev/null 2>&1
285+ $BIN /v-add-web-domain-ssl $user $domain $ssl_dir $ssl_home
286+ else
287+ $BIN /v-delete-mail-domain-ssl $user $root_domain > /dev/null 2>&1
288+ $BIN /v-add-mail-domain-ssl $user $root_domain $ssl_dir
289+ fi
290+
249291if [ " $? " -ne ' 0' ]; then
250292 touch $HESTIA /data/queue/letsencrypt.pipe
251293 sed -i " / $domain /d" $HESTIA /data/queue/letsencrypt.pipe
@@ -262,11 +304,17 @@ if [ -z "$(grep v-update-lets $HESTIA/data/users/admin/cron.conf)" ]; then
262304fi
263305
264306# Updating letsencrypt key
265- if [ -z " $LETSENCRYPT " ]; then
266- add_object_key " web" ' DOMAIN' " $domain " ' LETSENCRYPT' ' FTP_USER'
307+ if [ -z " $mail " ]; then
308+ if [ -z " $LETSENCRYPT " ]; then
309+ add_object_key " web" ' DOMAIN' " $domain " ' LETSENCRYPT' ' FTP_USER'
310+ fi
311+ update_object_value ' web' ' DOMAIN' " $domain " ' $LETSENCRYPT' ' yes'
312+ else
313+ if [ -z " $LETSENCRYPT " ]; then
314+ add_object_key " mail" ' DOMAIN' " $root_domain " ' LETSENCRYPT'
315+ fi
316+ update_object_value ' mail' ' DOMAIN' " $root_domain " ' $LETSENCRYPT' ' yes'
267317fi
268- update_object_value ' web' ' DOMAIN' " $domain " ' $LETSENCRYPT' ' yes'
269-
270318
271319# ----------------------------------------------------------#
272320# Hestia #
0 commit comments