Skip to content

Commit 970dc0e

Browse files
authored
[Feature] Rainloop + Flexible Webmail client support (hestiacp#1548)
* Add rainloop support to Hestia Default activated plugins: - add-x-originating-ip-header (from rainloop github) -hestia-change-password (from local source) Changes made: - Change default admin username - Change default admin password - Change default admin key - Enabled contacts / adressbook via mysql on default - Enabled the plugins listed + set up default settings File get created in ~/.rainloop with the default login data! * Update readme + hide output message * Add upgrade routine rainloop + fix for roundcube * Add webinterface for switching CLI for switching Minor bug fixes * Add “Webmail” template to v-rebuild-mail-domain
1 parent b680e51 commit 970dc0e

33 files changed

+912
-34
lines changed

bin/v-add-mail-domain

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ fi
7272
new_timestamp
7373

7474
# Adding domain to mail.conf
75-
s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' DKIM='$dkim'"
75+
s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' DKIM='$dkim' WEBMAIL=''"
7676
s="$s SSL='no' LETSENCRYPT='no' CATCHALL='' ACCOUNTS='0' U_DISK='0' SUSPENDED='no' TIME='$time'"
7777
s="$s DATE='$date'"
7878
echo $s >> $USER_DATA/mail.conf
@@ -169,7 +169,7 @@ fi
169169
# Add webmail configuration to mail domain
170170
if [ ! -z "$WEB_SYSTEM" ] || [ ! -z "$PROXY_SYSTEM" ]; then
171171
if [ ! -z "$IMAP_SYSTEM" ]; then
172-
$BIN/v-add-sys-webmail $user $domain ''
172+
$BIN/v-add-sys-webmail $user $domain '' ''
173173
fi
174174
fi
175175

bin/v-add-sys-rainloop

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
#!/bin/bash
2+
# info: Install Rainloop in HestiaCP
3+
# options: [MODE]
4+
# labels: hestia
5+
#
6+
# The function installs Rainloop
7+
8+
#----------------------------------------------------------#
9+
# Variable&Function #
10+
#----------------------------------------------------------#
11+
12+
# Includes
13+
source $HESTIA/func/main.sh
14+
source $HESTIA/conf/hestia.conf
15+
source $HESTIA/install/upgrade/upgrade.conf
16+
17+
MODE=$2
18+
UPDATE="no"
19+
# Version and Download paths
20+
# Version to be moved to upgrade script
21+
RL_FILE="rainloop-community-latest.zip"
22+
# For removal of folder
23+
RL_EXTRACT_MAIN="rainloop"
24+
25+
# Downloading full version
26+
RL_URL="https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip"
27+
28+
# Folder paths
29+
RL_INSTALL_DIR="/var/lib/rainloop"
30+
RL_CONFIG_DIR="/etc/rainloop"
31+
RL_LOG="/var/log/rainloop"
32+
33+
#----------------------------------------------------------#
34+
# Verifications #
35+
#----------------------------------------------------------#
36+
37+
# Checking root permissions
38+
if [ "x$(id -u)" != 'x0' ]; then
39+
echo "ERROR: v-add-sys-rainloop can be run executed only by root user"
40+
exit 10
41+
fi
42+
43+
# Ensure that $HESTIA (/usr/local/hestia/) and other variables are valid.
44+
if [ -z "$HESTIA" ]; then
45+
HESTIA="/usr/local/hestia"
46+
fi
47+
48+
if [ -z "$HOMEDIR" ] || [ -z "$HESTIA_INSTALL_DIR" ]; then
49+
echo "ERROR: Environment variables not present, installation aborted."
50+
exit 2
51+
fi
52+
53+
# Get current version
54+
if [ -f "/var/lib/rainloop/data/VERSION" ]; then
55+
version=$(cat $RL_INSTALL_DIR/data/VERSION);
56+
if [ "$version" == "$rl_v" ]; then
57+
echo "Error: Installed version ($version) is equal as the availble version ($rc_v)"
58+
exit 2;
59+
else
60+
UPDATE="yes"
61+
fi
62+
fi
63+
64+
# Perform verification if read-only mode is enabled
65+
check_hestia_demo_mode
66+
67+
#----------------------------------------------------------#
68+
# Action #
69+
#----------------------------------------------------------#
70+
71+
if [ "$UPDATE" == "no" ]; then
72+
rm -f -r $RL_INSTALL_DIR
73+
rm -f -r $RL_CONFIG_DIR
74+
75+
mkdir $RL_INSTALL_DIR
76+
mkdir $RL_CONFIG_DIR
77+
78+
cd "$RL_INSTALL_DIR"
79+
[ ! -f "${RC_INSTALL_DIR}/${RC_FILE}" ] && wget "$RL_URL" --quiet -O "${RL_INSTALL_DIR}/${RL_FILE}"
80+
81+
key=$(openssl rand -hex 4);
82+
83+
admin_account="admin_$key"
84+
admin_password=$(generate_password)
85+
r=$(generate_password)
86+
87+
echo "Username: admin_$key" > ~/.rainloop
88+
echo "Password: $admin_password" >> ~/.rainloop
89+
echo "Secret key: admin_$key" >> ~/.rainloop
90+
91+
unzip -q $RL_FILE
92+
93+
mv ./data $RL_CONFIG_DIR/
94+
ln -s $RL_CONFIG_DIR/data/ ./data
95+
96+
SALT=$(openssl rand -base64 64)
97+
cp ./data/VERSION ./data/INSTALLED
98+
echo "<?php //$SALT" > ./data/SALT.php
99+
echo "Forbidden" > ./data/index.php
100+
echo "Forbidden" > ./data/index.html
101+
102+
# Create database
103+
mysql -e "DROP DATABASE rainloop"
104+
mysql -e "DROP USER rainloop@localhost"
105+
mysql -e "CREATE DATABASE rainloop"
106+
# Mysql available on system
107+
r=$(generate_password)
108+
mysql -e "GRANT ALL ON rainloop.*
109+
TO rainloop@localhost IDENTIFIED BY '$r'"
110+
111+
mkdir -p $RL_CONFIG_DIR/data/_data_/_default_/configs
112+
php -f $HESTIA_INSTALL_DIR/rainloop/change_password.php "admin_$key" "$admin_password" "$r"
113+
mkdir -p $RL_CONFIG_DIR/data/_data_/_default_/domains
114+
cp -f $HESTIA_INSTALL_DIR/rainloop/default.ini $RL_CONFIG_DIR/data/_data_/_default_/domains
115+
mkdir -p $RL_CONFIG_DIR/data/_data_/_default_/plugins
116+
cp -f -r $HESTIA_INSTALL_DIR/rainloop/plugins/hestia-change-password/ $RL_CONFIG_DIR/data/_data_/_default_/plugins
117+
mkdir -p $RL_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header
118+
# Download add-x-originating-ip-header from rainloop github
119+
wget --quiet -O $RL_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header/index.php https://raw.githubusercontent.com/RainLoop/rainloop-webmail/master/plugins/add-x-originating-ip-header/index.php
120+
wget --quiet -O $RL_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header/VERSION https://raw.githubusercontent.com/RainLoop/rainloop-webmail/master/plugins/add-x-originating-ip-header/VERSION
121+
wget --quiet -O $RL_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header/README https://raw.githubusercontent.com/RainLoop/rainloop-webmail/master/plugins/add-x-originating-ip-header/README
122+
wget --quiet -O $RL_CONFIG_DIR/data/_data_/_default_/plugins/add-x-originating-ip-header/LICENSE https://raw.githubusercontent.com/RainLoop/rainloop-webmail/master/plugins/add-x-originating-ip-header/LICENSE
123+
124+
cp -f $HESTIA_INSTALL_DIR/rainloop/plugins/plugin-add-x-originating-ip-header.ini $RL_CONFIG_DIR/data/_data_/_default_/configs/plugin-add-x-originating-ip-header.ini
125+
cp -f $HESTIA_INSTALL_DIR/rainloop/plugins/plugin-hestia-change-password.ini $RL_CONFIG_DIR/data/_data_/_default_/configs/plugin-hestia-change-password.ini
126+
127+
sed -i "s/%hostname%/$(hostname)/g" $RL_CONFIG_DIR/data/_data_/_default_/configs/plugin-hestia-change-password.ini
128+
sed -i "s/%port%/$BACKEND_PORT/g" $RL_CONFIG_DIR/data/_data_/_default_/configs/plugin-hestia-change-password.ini
129+
130+
131+
chown -R www-data:www-data ./data
132+
chown -R www-data:www-data $RL_CONFIG_DIR/
133+
134+
rm ${RL_INSTALL_DIR}/${RL_FILE}
135+
# Add robots.txt
136+
echo "User-agent: *" > $RL_INSTALL_DIR/robots.txt
137+
echo "Disallow: /" >> $RL_INSTALL_DIR/robots.txt
138+
139+
# Updating hestia.conf
140+
if [ -z "$(grep WEBMAIL_SYSTEM $HESTIA/conf/hestia.conf)" ]; then
141+
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' 'rainloop'
142+
else
143+
if [ -z "$(echo "$WEBMAIL_SYSTEM" | grep -w 'rainloop')" ]; then
144+
if [ ! -z "$WEBMAIL_SYSTEM" ]; then
145+
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "rainloop,$WEBMAIL_SYSTEM"
146+
else
147+
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "rainloop"
148+
fi
149+
fi
150+
fi
151+
152+
else
153+
[ ! -f "${RC_INSTALL_DIR}/${RC_FILE}" ] && wget "$RL_URL" --quiet -O "${RL_INSTALL_DIR}/${RL_FILE}"
154+
unzip -q -o $RL_FILE
155+
rm $RL_INSTALL_DIR/$RL_FILE
156+
fi
157+
158+
#----------------------------------------------------------#
159+
# Logging #
160+
#----------------------------------------------------------#
161+
162+
163+
164+
log_history "Rouncube successfuly installed" '' 'admin'
165+
log_event "$OK" "$ARGUMENTS"

bin/v-add-sys-roundcube

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,12 @@ if [ "$UPDATE" == "no" ]; then
152152
if [ -z "$(grep WEBMAIL_SYSTEM $HESTIA/conf/hestia.conf)" ]; then
153153
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' 'roundcube'
154154
else
155-
if [ -z "$(echo "$WEBMAIL_SYSTEM" | grep -w 'roundcube')" ]; then
156-
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "roundcube"
157-
else
158-
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "roundcube,$WEBMAIL_SYSTEM"
155+
if [ -z "$(echo "$WEBMAIL_SYSTEM" | grep -w 'roundcube')" ]; then
156+
if [ ! -z "$WEBMAIL_SYSTEM" ]; then
157+
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "roundcube,$WEBMAIL_SYSTEM"
158+
else
159+
$BIN/v-change-sys-config-value 'WEBMAIL_SYSTEM' "roundcube"
160+
fi
159161
fi
160162
fi
161163

bin/v-add-sys-webmail

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22
# info: add webmail support for a domain
3-
# options: USER DOMAIN [RESTART] [QUIET]
3+
# options: USER DOMAIN WEBMAIL [RESTART] [QUIET]
44
# labels: hestia
55
#
66
# example: v-add-sys-webmail user domain.com
@@ -15,8 +15,9 @@
1515
# Argument definition
1616
user=$1
1717
domain=$2
18-
restart="$3"
19-
quiet=$4
18+
webmail=$3
19+
restart="$4"
20+
quiet=$5
2021

2122
# Additional argument formatting
2223
if [[ "$domain" =~ [[:upper:]] ]]; then
@@ -46,10 +47,17 @@ format_domain_idn
4647
# Verifications #
4748
#----------------------------------------------------------#
4849

49-
check_args '2' "$#" 'USER DOMAIN [RESTART]'
50+
if [ -z "$webmail" ]; then
51+
for client in ${WEBMAIL_SYSTEM//,/ };do
52+
webmail="$client"
53+
done
54+
fi
55+
56+
check_args '3' "$#" 'USER DOMAIN WEBMAIL [RESTART]'
5057
is_format_valid 'user' 'domain'
5158
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
5259
is_system_enabled "$IMAP_SYSTEM" 'IMAP_SYSTEM'
60+
is_type_valid "$WEBMAIL_SYSTEM" "$webmail"
5361
is_object_valid 'user' 'USER' "$user"
5462
is_object_unsuspended 'user' 'USER' "$user"
5563
is_object_valid 'mail' 'DOMAIN' "$domain"
@@ -95,33 +103,52 @@ else
95103
fi
96104
fi
97105
fi
98-
99-
# Add webmail configuration to mail domain
100-
WEBMAIL_TEMPLATE="default"
101-
if [ "$WEB_SYSTEM" = "nginx" ]; then
102-
WEBMAIL_TEMPLATE="web_system"
106+
107+
if [ "$webmail" == "roundcube" ]; then
108+
WEBMAIL_TEMPLATE="default"
109+
if [ ! -z "$PROXY_SYSTEM" ]; then
110+
PROXY_TEMPLATE="default"
111+
fi
112+
# Add webmail configuration to mail domain
113+
WEBMAIL_TEMPLATE="default"
114+
if [ "$WEB_SYSTEM" = "nginx" ]; then
115+
WEBMAIL_TEMPLATE="web_system"
116+
fi
117+
else
118+
WEBMAIL_TEMPLATE="rainloop"
119+
if [ ! -z "$PROXY_SYSTEM" ]; then
120+
PROXY_TEMPLATE="default_rainloop"
121+
fi
103122
fi
123+
104124
add_webmail_config "$WEB_SYSTEM" "${WEBMAIL_TEMPLATE}.tpl"
105125

106126
if [ ! -z "$PROXY_SYSTEM" ]; then
107-
add_webmail_config "$PROXY_SYSTEM" "default.tpl"
127+
add_webmail_config "$PROXY_SYSTEM" "${PROXY_TEMPLATE}.tpl"
108128
fi
109129

110130
# Enable SSL for webmail if available
111131
if [ -f $HOMEDIR/$user/conf/mail/$domain/ssl/$domain.crt ] || [ "$SSL" = 'yes' ]; then
112132
add_webmail_config "$WEB_SYSTEM" "${WEBMAIL_TEMPLATE}.stpl"
113133

114134
if [ ! -z "$PROXY_SYSTEM" ]; then
115-
add_webmail_config "$PROXY_SYSTEM" "default.stpl"
135+
add_webmail_config "$PROXY_SYSTEM" "${PROXY_TEMPLATE}.stpl"
116136
fi
117137
fi
118138
fi
119139

140+
WEBMAIL=$(get_object_value 'web' 'DOMAIN' "$domain" "$WEBMAIL")
141+
if [ -z "$WEBMAIL" ]; then
142+
add_object_key 'mail' 'DOMAIN' "$domain" 'WEBMAIL' 'SSL'
143+
fi
144+
145+
# Set SSL as enabled in configuration
146+
update_object_value 'mail' 'DOMAIN' "$domain" '$WEBMAIL' "$webmail"
120147
#----------------------------------------------------------#
121148
# Hestia #
122149
#----------------------------------------------------------#
123150

124-
if [ "$3" = 'yes' ]; then
151+
if [ "$restart" = 'yes' ]; then
125152
# Restarting web server
126153
$BIN/v-restart-web $restart
127154
check_result $? "Web restart failed" >/dev/null

bin/v-delete-sys-webmail

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ else
6868
echo "Error: WEBMAIL_ALIAS is not defined in hestia.conf."
6969
fi
7070

71+
# Set SSL as enabled in configuration
72+
update_object_value 'mail' 'DOMAIN' "$domain" '$WEBMAIL' ""
7173
#----------------------------------------------------------#
7274
# Hestia #
7375
#----------------------------------------------------------#

bin/v-list-mail-domain

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ json_list() {
3737
"SUSPENDED": "'$SUSPENDED'",
3838
"TIME": "'$TIME'",
3939
"DATE": "'$DATE'",
40-
"WEBMAIL_ALIAS": "'$WEBMAIL_ALIAS.$domain'"
40+
"WEBMAIL_ALIAS": "'$WEBMAIL_ALIAS.$domain'",
41+
"WEBMAIL":"'$WEBMAIL'"
4142
}'
4243
echo '}'
4344
}
@@ -57,20 +58,21 @@ shell_list() {
5758
echo "TIME: $TIME"
5859
echo "DATE: $DATE"
5960
echo "WEBMAIL_ALIAS: $WEBMAIL_ALIAS.$domain"
61+
echo "WEBMAIL: $WEBMAIL"
6062
}
6163

6264
# PLAIN list function
6365
plain_list() {
6466
echo -ne "$DOMAIN\t$ANTIVIRUS\t$ANTISPAM\t$DKIM\t$CATCHALL\t"
65-
echo -e "$ACCOUNTS\t$U_DISK\t$SSL\t$LETSENCRYPT\t$SUSPENDED\t$TIME\t$DATE\t$WEBMAIL_ALIAS.$domain"
67+
echo -e "$ACCOUNTS\t$U_DISK\t$SSL\t$LETSENCRYPT\t$SUSPENDED\t$TIME\t$DATE\t$WEBMAIL_ALIAS.$domain\t$WEBMAIL"
6668
}
6769

6870
# CSV list function
6971
csv_list() {
7072
echo -n "DOMAIN,ANTIVIRUS,ANTISPAM,DKIM,CATCHALL,ACCOUNTS,U_DISK,"
71-
echo "SSL,LETSENCRYPT,SUSPENDED,TIME,DATE"
73+
echo "SSL,LETSENCRYPT,SUSPENDED,TIME,DATE,WEBMAIL_ALIAS,WEBMAIL"
7274
echo -n "$DOMAIN,$ANTIVIRUS,$ANTISPAM,$DKIM,$CATCHALL,$ACCOUNTS,$U_DISK"
73-
echo "$SSL,$LETSENCRYPT,$SUSPENDED,$TIME,$DATE,$WEBMAIL_ALIAS.$domain"
75+
echo "$SSL,$LETSENCRYPT,$SUSPENDED,$TIME,$DATE,$WEBMAIL_ALIAS.$domain,$WEBMAIL"
7476
}
7577

7678

bin/v-list-mail-domains

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ json_list() {
3737
"SSL": "'$SSL'",
3838
"SUSPENDED": "'$SUSPENDED'",
3939
"TIME": "'$TIME'",
40-
"DATE": "'$DATE'"
40+
"DATE": "'$DATE'",
41+
"WEBMAIL_ALIAS": "'$WEBMAIL_ALIAS'",
42+
"WEBMAIL": "'$WEBMAIL'"
4143
}'
4244
if [ "$i" -lt "$objects" ]; then
4345
echo ','
@@ -67,19 +69,19 @@ plain_list() {
6769
while read str; do
6870
parse_object_kv_list "$str"
6971
echo -ne "$DOMAIN\t$ANTIVIRUS\t$ANTISPAM\t$DKIM\t$SSL\$CATCHALL\t"
70-
echo -e "$ACCOUNTS\t$U_DISK\t$SUSPENDED\t$TIME\t$DATE"
72+
echo -e "$ACCOUNTS\t$U_DISK\t$SUSPENDED\t$TIME\t$DATE\t$WEBMAIL_ALIAS\t$WEBMAIL"
7173
done < <(cat $USER_DATA/mail.conf)
7274
}
7375

7476
# CSV list function
7577
csv_list() {
7678
IFS=$'\n'
7779
echo -n "DOMAIN,ANTIVIRUS,ANTISPAM,DKIM,SSL,CATCHALL,ACCOUNTS,U_DISK,"
78-
echo "SUSPENDED,TIME,DATE"
80+
echo "SUSPENDED,TIME,DATE,WEBMAIL_ALIAS,WEBMAIL"
7981
while read str; do
8082
parse_object_kv_list "$str"
8183
echo -n "$DOMAIN,$ANTIVIRUS,$ANTISPAM,$DKIM,$SSL,$CATCHALL,$ACCOUNTS,"
82-
echo "'$U_DISK,$SUSPENDED,$TIME,$DATE"
84+
echo "'$U_DISK,$SUSPENDED,$TIME,$DATE,$WEBMAIL_ALIAS,$WEBMAIL"
8385
echo
8486
done < <(cat $USER_DATA/mail.conf)
8587
}

bin/v-list-sys-config

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ json_list() {
5858
"BACKUP": "'$BACKUP'",
5959
"BACKUP_MODE": "'$BACKUP_MODE'",
6060
"WEBMAIL_ALIAS": "'$WEBMAIL_ALIAS'",
61+
"WEBMAIL_SYSTEM": "'$WEBMAIL_SYSTEM'",
6162
"DB_PMA_ALIAS": "'$DB_PMA_ALIAS'",
6263
"DB_PGA_ALIAS": "'$DB_PGA_ALIAS'",
6364
"LOGIN_STYLE": "'$LOGIN_STYLE'",

0 commit comments

Comments
 (0)