From c068d9ca9c828e612aaa1c40cc00f9fd49065123 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@freedombone.net>
Date: Wed, 3 Oct 2018 10:48:36 +0100
Subject: [PATCH] Add tls to exim config

---
 src/freedombone-base-email | 56 ++++++++++++++++++++++++++++++++++++++
 src/freedombone-upgrade    |  1 +
 2 files changed, 57 insertions(+)

diff --git a/src/freedombone-base-email b/src/freedombone-base-email
index ce43e4fa5..a102e39e5 100755
--- a/src/freedombone-base-email
+++ b/src/freedombone-base-email
@@ -1760,6 +1760,61 @@ function populate_keyservers {
     done
 }
 
+function exim_enable_tls {
+    read_config_param ONION_ONLY
+
+    # TLS only applies on the clearnet
+    if [[ "$ONION_ONLY" != 'no' ]]; then
+        return
+    fi
+
+    # don't conflict with web UI
+    if [[ "$(hostname)" == *'.local' ]]; then
+        return
+    fi
+
+    # check that cert exists
+    if [ ! -f "/etc/letsencrypt/live/$(hostname)/fullchain.pem" ]; then
+        # try to create a letsencrypt cert
+        if [ ! -d "/var/www/$(hostname)/htdocs" ]; then
+            mkdir "/var/www/$(hostname)/htdocs"
+        fi
+        DH_KEYLENGTH=2048
+        LETSENCRYPT_SERVER='https://acme-v01.api.letsencrypt.org/directory'
+        "${PROJECT_NAME}-addcert" -e "$(hostname)" -s "$LETSENCRYPT_SERVER" --dhkey "$DH_KEYLENGTH"
+        # does the cert exist ?
+        if [ ! -f "/etc/letsencrypt/live/$(hostname)/fullchain.pem" ]; then
+            return
+        fi
+    fi
+    if [ ! -f "/etc/letsencrypt/live/$(hostname)/privkey.pem" ]; then
+        return
+    fi
+
+    exim_tls_config_file=/etc/exim4/conf.d/main/03_exim4-config_tlsoptions
+
+    # enable TLS in exim
+    if ! grep -q "MAIN_TLS_ENABLE =" $exim_tls_config_file; then
+        sed -i '/.ifdef MAIN_TLS_ENABLE/i MAIN_TLS_ENABLE = yes' $exim_tls_config_file
+    else
+        sed -i 's|MAIN_TLS_ENABLE =.*|MAIN_TLS_ENABLE = yes|g' $exim_tls_config_file
+    fi
+
+    # add TLS private key in exim
+    if ! grep -q 'MAIN_TLS_PRIVATEKEY = /etc/letsencrypt' $exim_tls_config_file; then
+        sed -i "/MAIN_TLS_ENABLE =/a MAIN_TLS_PRIVATEKEY = /etc/letsencrypt/live/$(hostname)/privkey.pem" $exim_tls_config_file
+    else
+        sed -i "s|MAIN_TLS_PRIVATEKEY = /etc/letsencrypt.*|MAIN_TLS_PRIVATEKEY = /etc/letsencrypt/live/$(hostname)/privkey.pem|g" $exim_tls_config_file
+    fi
+
+    # add TLS public key in exim
+    if ! grep -q 'MAIN_TLS_CERTIFICATE = /etc/letsencrypt' $exim_tls_config_file; then
+        sed -i "/MAIN_TLS_ENABLE =/a MAIN_TLS_CERTIFICATE = /etc/letsencrypt/live/$(hostname)/fullchain.pem" $exim_tls_config_file
+    else
+        sed -i "s|MAIN_TLS_CERTIFICATE = /etc/letsencrypt.*|MAIN_TLS_CERTIFICATE = /etc/letsencrypt/live/$(hostname)/fullchain.pem|g" $exim_tls_config_file
+    fi
+}
+
 function install_email {
     if [[ $SYSTEM_TYPE == "mesh"* ]]; then
         return
@@ -1773,6 +1828,7 @@ function install_email {
     install_email_basic
     configure_email_onion
     prevent_mail_process_overrun
+    exim_enable_tls
 
     mark_completed "${FUNCNAME[0]}"
 }
diff --git a/src/freedombone-upgrade b/src/freedombone-upgrade
index dfd4f0b15..af9fd05e8 100755
--- a/src/freedombone-upgrade
+++ b/src/freedombone-upgrade
@@ -139,6 +139,7 @@ if [ -d "$PROJECT_DIR" ]; then
         #rebuild_exim_with_socks
         install_dynamicdns
         torrc_migrate
+        exim_enable_tls
         add_xmpp_onion_to_email
         nodejs_upgrade
         $INSTALL_PACKAGES_BACKPORTS certbot
-- 
GitLab