From 3ee1bd488a589aa88f20db1fef3b122bad6c3b6c Mon Sep 17 00:00:00 2001 From: the-djmaze <> Date: Wed, 9 Nov 2022 15:57:06 +0100 Subject: [PATCH] https://github.com/hestiacp/hestiacp/issues/2620 --- integrations/hestiacp/v-add-sys-snappymail | 176 +++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 integrations/hestiacp/v-add-sys-snappymail diff --git a/integrations/hestiacp/v-add-sys-snappymail b/integrations/hestiacp/v-add-sys-snappymail new file mode 100644 index 000000000..195ecaa9f --- /dev/null +++ b/integrations/hestiacp/v-add-sys-snappymail @@ -0,0 +1,176 @@ +#!/bin/bash +# info: Install SnappyMail webmail client +# options: [MODE] +# +# This function installs the SnappyMail webmail client. + +#----------------------------------------------------------# +# Variables & Functions # +#----------------------------------------------------------# + +# Includes +# shellcheck source=/etc/hestiacp/hestia.conf +source /etc/hestiacp/hestia.conf +# shellcheck source=/usr/local/hestia/func/main.sh +source $HESTIA/func/main.sh +# load config file +source_conf "$HESTIA/conf/hestia.conf" +# upgrade config file +source "$HESTIA/install/upgrade/upgrade.conf" + +MODE=$1 +UPDATE="no" +# Version and Download paths +# Version to be moved to upgrade script +SM_FILE="snappymail-latest.tar.gz" +# For removal of folder +SM_EXTRACT_MAIN="snappymail" + +# Downloading full version +SM_URL="https://snappymail.eu/repository/latest.tar.gz" + +# Folder paths +SM_INSTALL_DIR="/var/lib/snappymail" +SM_CONFIG_DIR="/etc/snappymail" +SM_LOG="/var/log/snappymail" + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +# Checking root permissions +if [ "x$(id -u)" != 'x0' ]; then + echo "ERROR: v-add-sys-snappymail can only be executed by the root user" + exit 10 +fi + +# Ensure that $HESTIA (/usr/local/hestia/) and other variables are valid. +if [ -z "$HESTIA" ]; then + HESTIA="/usr/local/hestia" +fi + +if [ -z "$HOMEDIR" ] || [ -z "$HESTIA_INSTALL_DIR" ]; then + echo "ERROR: Environment variables not present, installation aborted." + exit 2 +fi + +# Get current version +if [ -f "/var/lib/snappymail/data/VERSION" ]; then + version=$(cat $SM_INSTALL_DIR/data/VERSION); + if [ "$version" == "$rl_v" ]; then + echo "Error: Installed version ($version) is equal to the available version ($rl_v)" + exit 2; + else + UPDATE="yes" + fi +fi + +# Perform verification if read-only mode is enabled +check_hestia_demo_mode + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +if [ "$UPDATE" == "no" ]; then + rm -f -r $SM_INSTALL_DIR + rm -f -r $SM_CONFIG_DIR + + mkdir $SM_INSTALL_DIR + mkdir $SM_CONFIG_DIR + + cd "$SM_INSTALL_DIR" + [ ! -f "${RC_INSTALL_DIR}/${RC_FILE}" ] && wget "$SM_URL" --retry-connrefused --quiet -O "${SM_INSTALL_DIR}/${SM_FILE}" + + key=$(openssl rand -hex 4); + + admin_account="admin_$key" + admin_password=$(generate_password) + r=$(generate_password) + + echo "Username: admin_$key" > ~/.snappymail + echo "Password: $admin_password" >> ~/.snappymail + echo "Secret key: admin_$key" >> ~/.snappymail + + unzip -q ${SM_INSTALL_DIR}/${SM_FILE} + + mv ./data $SM_CONFIG_DIR/ + ln -s $SM_CONFIG_DIR/data/ ./data + + SALT=$(openssl rand -base64 64) + cp ./data/VERSION ./data/INSTALLED + echo " ./data/SALT.php + echo "Forbidden" > ./data/index.php + echo "Forbidden" > ./data/index.html + + # Create database + mysql -e "CREATE DATABASE snappymail" + # Mysql available on system + r=$(generate_password) + mysql -e "GRANT ALL ON snappymail.* + TO snappymail@localhost IDENTIFIED BY '$r'" + + mkdir -p $SM_CONFIG_DIR/data/_data_/_default_/configs + php -f $HESTIA_INSTALL_DIR/snappymail/change_password.php "admin_$key" "$admin_password" "$r" + mkdir -p $SM_CONFIG_DIR/data/_data_/_default_/domains + cp -f $HESTIA_INSTALL_DIR/snappymail/default.ini $SM_CONFIG_DIR/data/_data_/_default_/domains + mkdir -p $SM_CONFIG_DIR/data/_data_/_default_/plugins + cp -f -r $HESTIA_INSTALL_DIR/snappymail/plugins/hestia-change-password/ $SM_CONFIG_DIR/data/_data_/_default_/plugins + mkdir -p $SM_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header + # Download add-x-originating-ip-header from snappymail github + wget --quiet -O $SM_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header/index.php https://raw.githubusercontent.com/the-djmaze/snappymail/master/plugins/add-x-originating-ip-header/index.php + wget --quiet -O $SM_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header/LICENSE https://raw.githubusercontent.com/the-djmaze/snappymail/master/plugins/add-x-originating-ip-header/LICENSE + + cp -f $HESTIA_INSTALL_DIR/snappymail/plugins/plugin-add-x-originating-ip-header.ini $SM_CONFIG_DIR/data/_data_/_default_/configs/plugin-add-x-originating-ip-header.ini + cp -f $HESTIA_INSTALL_DIR/snappymail/plugins/plugin-hestia-change-password.ini $SM_CONFIG_DIR/data/_data_/_default_/configs/plugin-hestia-change-password.ini + + sed -i "s/%hostname%/$(hostname)/g" $SM_CONFIG_DIR/data/_data_/_default_/configs/plugin-hestia-change-password.ini + sed -i "s/%port%/$BACKEND_PORT/g" $SM_CONFIG_DIR/data/_data_/_default_/configs/plugin-hestia-change-password.ini + + + chown -R www-data:www-data ./data + chown -R www-data:www-data $SM_CONFIG_DIR/ + + rm ${SM_INSTALL_DIR}/${SM_FILE} + # Add robots.txt + echo "User-agent: *" > $SM_INSTALL_DIR/robots.txt + echo "Disallow: /" >> $SM_INSTALL_DIR/robots.txt + + # Updating hestia.conf + if [ -z "$(grep WEBMAIL_SYSTEM $HESTIA/conf/hestia.conf)" ]; then + $BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' 'snappymail' + else + if [ -z "$(echo "$WEBMAIL_SYSTEM" | grep -w 'snappymail')" ]; then + if [ -n "$WEBMAIL_SYSTEM" ]; then + $BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "snappymail,$WEBMAIL_SYSTEM" + else + $BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "snappymail" + fi + fi + fi + +else + [ ! -f "${RC_INSTALL_DIR}/${RC_FILE}" ] && wget "$SM_URL" --quiet -O "${SM_INSTALL_DIR}/${SM_FILE}" + version=$(cat $SM_INSTALL_DIR/data/VERSION); + + unzip -q -j snappymail-latest.zip "data/VERSION" -d $SM_INSTALL_DIR/ + version_source=$(cat $SM_INSTALL_DIR/VERSION); + + # Check version inside .zip file in case hestia didn't update yet + if [ "$version" != "$version_source" ]; then + unzip -q ${SM_INSTALL_DIR}/${SM_FILE} + rm $SM_INSTALL_DIR/$SM_FILE + fi + rm ${SM_INSTALL_DIR}/VERSION +fi + +#----------------------------------------------------------# +# Hestia # +#----------------------------------------------------------# + +if [ "$UPDATE" = "yes" ]; then + $BIN/v-log-action "system" "Info" "Plugins" "SnappyMail updated (Version: $version)." +else + $BIN/v-log-action "system" "Info" "Plugins" "SnappyMail enabled (Version: $version)." +fi +log_event "$OK" "$ARGUMENTS"