You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					175 lines
				
				5.0 KiB
			
		
		
			
		
	
	
					175 lines
				
				5.0 KiB
			| 
								 
											2 years ago
										 
									 | 
							
								#!/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"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								WWW_USER="www-data"
							 | 
						||
| 
								 | 
							
								if [ -f /etc/redhat-release ]; then
							 | 
						||
| 
								 | 
							
								    WWW_USER="apache"
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#----------------------------------------------------------#
							 | 
						||
| 
								 | 
							
								#                    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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ -z "$(echo "$DB_SYSTEM" | grep -w 'mysql')" ]; then
							 | 
						||
| 
								 | 
							
									echo "ERROR: Mysql not available. 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" == "$sm_v" ]; then
							 | 
						||
| 
								 | 
							
										echo "Error: Installed version ($version) is equal to the available version ($sm_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 "${SM_INSTALL_DIR}/${SM_FILE}" ] && wget "$SM_URL" --retry-connrefused --quiet -O "${SM_INSTALL_DIR}/${SM_FILE}"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if [ ! -f "${SM_INSTALL_DIR}/${SM_FILE}" ]; then
							 | 
						||
| 
								 | 
							
										echo "ERROR: Download failed, installation aborted."
							 | 
						||
| 
								 | 
							
										exit 2
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Get current version
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									key=$(openssl rand -hex 4)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									admin_account="admin_$key"
							 | 
						||
| 
								 | 
							
									admin_password=$(generate_password)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									echo "Username: admin_$key" > ~/.snappymail
							 | 
						||
| 
								 | 
							
									echo "Password: $admin_password" >> ~/.snappymail
							 | 
						||
| 
								 | 
							
									echo "Secret key: admin_$key" >> ~/.snappymail
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tar -xzf ${SM_INSTALL_DIR}/${SM_FILE}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									mv ./data $SM_CONFIG_DIR/
							 | 
						||
| 
								 | 
							
									ln -s $SM_CONFIG_DIR/data/ ./data
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if [ -f '/usr/bin/mariadb' ]; then
							 | 
						||
| 
								 | 
							
										mariadb -e "CREATE DATABASE snappymail" 2>&1
							 | 
						||
| 
								 | 
							
										r=$(generate_password)
							 | 
						||
| 
								 | 
							
										mariadb -e "GRANT ALL ON snappymail.*
							 | 
						||
| 
								 | 
							
										 TO snappymail@localhost IDENTIFIED BY '$r'"
							 | 
						||
| 
								 | 
							
									else
							 | 
						||
| 
								 | 
							
										mysql -e "CREATE DATABASE snappymail" 2>&1
							 | 
						||
| 
								 | 
							
										r=$(generate_password)
							 | 
						||
| 
								 | 
							
										mysql -e "GRANT ALL ON snappymail.*
							 | 
						||
| 
								 | 
							
										 TO snappymail@localhost IDENTIFIED BY '$r'"
							 | 
						||
| 
								 | 
							
									fi
							 | 
						||
| 
								 | 
							
									php -f $HESTIA_COMMON_DIR/snappymail/install.php "admin_$key" "$admin_password" "$r" "$BACKEND_PORT"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									chown -R $WWW_USER:$WWW_USER ./data
							 | 
						||
| 
								 | 
							
									chown -R $WWW_USER:$WWW_USER $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 "${SM_INSTALL_DIR}/${SM_FILE}" ] && wget "$SM_URL" --quiet -O "${SM_INSTALL_DIR}/${SM_FILE}"
							 | 
						||
| 
								 | 
							
									version=$(cat $SM_INSTALL_DIR/data/VERSION)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									tar -xzf snappymail-latest.tar.gz "data/VERSION" $SM_INSTALL_DIR/
							 | 
						||
| 
								 | 
							
									version_source=$(cat $SM_INSTALL_DIR/VERSION)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									# Check version inside .tar.gz file in case hestia didn't update yet
							 | 
						||
| 
								 | 
							
									if [ "$version" != "$version_source" ]; then
							 | 
						||
| 
								 | 
							
										tar -xzf ${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"
							 |