Skip to content

Commit 08c3c16

Browse files
authored
Add support for rate limit in user package (hestiacp#2920)
1 parent 54704ee commit 08c3c16

File tree

12 files changed

+64
-7
lines changed

12 files changed

+64
-7
lines changed

bin/v-add-mail-domain

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ check_hestia_demo_mode
8181
# Action #
8282
#----------------------------------------------------------#
8383

84+
source_conf "$USER_DATA/user.conf"
8485
# Inherit web domain local ip address
8586
domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
8687
if [ ! -z "$domain_ip" ]; then
@@ -95,7 +96,7 @@ new_timestamp
9596

9697
# Adding domain to mail.conf
9798
s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' REJECT='$reject' DKIM='$dkim' WEBMAIL=''"
98-
s="$s SSL='no' LETSENCRYPT='no' CATCHALL='' ACCOUNTS='0' U_DISK='0' SUSPENDED='no' TIME='$time'"
99+
s="$s SSL='no' LETSENCRYPT='no' CATCHALL='' ACCOUNTS='0' RATE_LIMIT='$RATE_LIMIT' U_DISK='0' SUSPENDED='no' TIME='$time'"
99100
s="$s DATE='$date'"
100101
echo $s >> $USER_DATA/mail.conf
101102
touch $USER_DATA/mail/$domain.conf

bin/v-add-user-package

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ is_package_consistent() {
4949
if [ "$CRON_JOBS" != 'unlimited' ]; then
5050
is_int_format_valid "$CRON_JOBS" 'CRON_JOBS'
5151
fi
52+
53+
is_int_format_valid "$RATE_LIMIT" 'RATE_LIMIT'
54+
5255
if [ "$DISK_QUOTA" != 'unlimited' ]; then
5356
is_int_format_valid "$DISK_QUOTA" 'DISK_QUOTA'
5457
fi

bin/v-change-user-package

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ DNS_DOMAINS='$DNS_DOMAINS'
9292
DNS_RECORDS='$DNS_RECORDS'
9393
MAIL_DOMAINS='$MAIL_DOMAINS'
9494
MAIL_ACCOUNTS='$MAIL_ACCOUNTS'
95+
RATE_LIMIT='$RATE_LIMIT'
9596
DATABASES='$DATABASES'
9697
CRON_JOBS='$CRON_JOBS'
9798
DISK_QUOTA='$DISK_QUOTA'

bin/v-list-user-package

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ json_list() {
3434
"DNS_RECORDS": "'$DNS_RECORDS'",
3535
"MAIL_DOMAINS": "'$MAIL_DOMAINS'",
3636
"MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
37+
"RATE_LIMIT": "'$RATE_LIMIT'",
3738
"DATABASES": "'$DATABASES'",
3839
"CRON_JOBS": "'$CRON_JOBS'",
3940
"DISK_QUOTA": "'$DISK_QUOTA'",
@@ -60,6 +61,7 @@ shell_list() {
6061
echo "DNS RECORDS: $DNS_RECORDS"
6162
echo "MAIL DOMAINS: $MAIL_DOMAINS"
6263
echo "MAIL ACCOUNTS: $MAIL_ACCOUNTS"
64+
echo "RATE_LIMIT: $RATE_LIMIT"
6365
echo "DATABASES: $DATABASES"
6466
echo "CRON JOBS: $CRON_JOBS"
6567
echo "DISK QUOTA: $DISK_QUOTA"
@@ -75,19 +77,19 @@ shell_list() {
7577
plain_list() {
7678
echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
7779
echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
78-
echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t"
80+
echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$RATE_LIMIT\t$DATABASES\t$CRON_JOBS\t"
7981
echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE"
8082
}
8183

8284
# CSV list function
8385
csv_list() {
8486
echo -n "PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE,"
8587
echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS,"
86-
echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,DATABASES,CRON_JOBS,"
88+
echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,RATE_LIMIT,DATABASES,CRON_JOBS,"
8789
echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE"
8890
echo -n "$PACKAGE,$WEB_TEMPLATE,$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,"
8991
echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,"
90-
echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS,"
92+
echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$RATE_LIMIT,$DATABASES,$CRON_JOBS,"
9193
echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE"
9294
}
9395

func/rebuild.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ rebuild_user_conf() {
5959
if [ -z "${LOGIN_ALLOW_IPS+x}" ]; then
6060
sed -i "/LOGIN_USE_IPLIST/a LOGIN_ALLOW_IPS=''" $USER_DATA/user.conf
6161
fi
62-
62+
if [ -z "${RATE_LIMIT+x}" ]; then
63+
sed -i "/MAIL_ACCOUNTS/a RATE_LIMIT='200'" $USER_DATA/user.conf
64+
fi
6365
# Run template trigger
6466
if [ -x "$HESTIA/data/packages/$PACKAGE.sh" ]; then
6567
$HESTIA/data/packages/$PACKAGE.sh "$user" "$CONTACT" "$NAME"

install/common/packages/default.pkg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ DNS_DOMAINS='unlimited'
88
DNS_RECORDS='unlimited'
99
MAIL_DOMAINS='unlimited'
1010
MAIL_ACCOUNTS='unlimited'
11+
RATE_LIMIT='200'
1112
DATABASES='unlimited'
1213
CRON_JOBS='unlimited'
1314
DISK_QUOTA='unlimited'

install/common/packages/system.pkg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ DNS_DOMAINS='1'
88
DNS_RECORDS='unlimited'
99
MAIL_DOMAINS='1'
1010
MAIL_ACCOUNTS='1'
11+
RATE_LIMIT='200'
1112
DATABASES='0'
1213
CRON_JOBS='unlimited'
1314
DISK_QUOTA='unlimited'

install/upgrade/versions/1.7.0.sh

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,11 @@ upgrade_config_set_value 'UPGRADE_UPDATE_FILEMANAGER_CONFIG' 'false'
2525
if [ "$FILE_MANAGER" = "true" ]; then
2626
$HESTIA/bin/v-delete-sys-filemanager quiet
2727
$HESTIA/bin/v-add-sys-filemanager quiet
28-
fi
28+
fi
29+
30+
packages=$(ls --sort=time $HESTIA/data/packages |grep .pkg)
31+
for package in $packages; do
32+
if [ -z "$(grep -e 'RATE_LIMIT' $HESTIA/data/packages/$package)" ]; then
33+
echo "RATE_LIMIT='200'" >> $HESTIA/data/packages/$package
34+
fi
35+
done

web/add/package/index.php

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,17 @@
3030
if (empty($_POST['v_backend_template'])) {
3131
$errors[] = _('backend template');
3232
}
33+
}else{
34+
# When modphp is enabled
35+
$_POST['v_backend_template'] = '';
3336
}
3437
if (!empty($_SESSION['PROXY_SYSTEM'])) {
3538
if (empty($_POST['v_proxy_template'])) {
3639
$errors[] = _('proxy template');
3740
}
41+
}else{
42+
# when nginx only is enabled
43+
$_POST['v_proxy_template'] = 'default';
3844
}
3945
if (empty($_POST['v_dns_template'])) {
4046
$errors[] = _('dns template');
@@ -75,7 +81,9 @@
7581
if (!isset($_POST['v_bandwidth'])) {
7682
$errors[] = _('bandwidth');
7783
}
78-
84+
if (!isset($_POST['v_ratelimit'])) {
85+
$errors[] = _('rate limit');
86+
}
7987
// Check if name server entries are blank if DNS server is installed
8088
if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {
8189
if (empty($_POST['v_ns1'])) {
@@ -114,6 +122,7 @@
114122
$v_backups = quoteshellarg($_POST['v_backups']);
115123
$v_disk_quota = quoteshellarg($_POST['v_disk_quota']);
116124
$v_bandwidth = quoteshellarg($_POST['v_bandwidth']);
125+
$v_ratelimit = quoteshellarg($_POST['v_ratelimit']);
117126
$v_ns1 = trim($_POST['v_ns1'], '.');
118127
$v_ns2 = trim($_POST['v_ns2'], '.');
119128
$v_ns3 = trim($_POST['v_ns3'], '.');
@@ -165,6 +174,7 @@
165174
$pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
166175
$pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
167176
$pkg .= "BANDWIDTH=".$v_bandwidth."\n";
177+
$pkg .= "RATE_LIMIT=".$v_ratelimit."\n";
168178
$pkg .= "NS=".$v_ns."\n";
169179
$pkg .= "SHELL=".$v_shell."\n";
170180
$pkg .= "BACKUPS=".$v_backups."\n";
@@ -271,6 +281,9 @@
271281
if (empty($v_bandwidth)) {
272282
$v_bandwidth = "'1000'";
273283
}
284+
if (empty($v_ratelimit)) {
285+
$v_ratelimit = "'200'";
286+
}
274287
if (empty($v_ns1)) {
275288
$v_ns1 = 'ns1.example.ltd';
276289
}

web/edit/package/index.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
$v_dns_records = $data[$v_package]['DNS_RECORDS'];
4747
$v_mail_domains = $data[$v_package]['MAIL_DOMAINS'];
4848
$v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS'];
49+
$v_ratelimit = $data[$v_package]['RATE_LIMIT'];
4950
$v_databases = $data[$v_package]['DATABASES'];
5051
$v_cron_jobs = $data[$v_package]['CRON_JOBS'];
5152
$v_disk_quota = $data[$v_package]['DISK_QUOTA'];
@@ -175,6 +176,9 @@
175176
if (!isset($_POST['v_mail_accounts'])) {
176177
$errors[] = _('mail accounts');
177178
}
179+
if (!isset($_POST['v_ratelimit'])) {
180+
$errors[] = _('rate limit');
181+
}
178182
if (!isset($_POST['v_databases'])) {
179183
$errors[] = _('databases');
180184
}
@@ -230,6 +234,7 @@
230234
$v_dns_records = quoteshellarg($_POST['v_dns_records']);
231235
$v_mail_domains = quoteshellarg($_POST['v_mail_domains']);
232236
$v_mail_accounts = quoteshellarg($_POST['v_mail_accounts']);
237+
$v_ratelimit = quoteshellarg($_POST['v_ratelimit']);
233238
$v_databases = quoteshellarg($_POST['v_databases']);
234239
$v_cron_jobs = quoteshellarg($_POST['v_cron_jobs']);
235240
$v_backups = quoteshellarg($_POST['v_backups']);
@@ -277,6 +282,7 @@
277282
$pkg .= "DNS_RECORDS=".$v_dns_records."\n";
278283
$pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
279284
$pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
285+
$pkg .= "RATE_LIMIT=".$v_ratelimit."\n";
280286
$pkg .= "DATABASES=".$v_databases."\n";
281287
$pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
282288
$pkg .= "DISK_QUOTA=".$v_disk_quota."\n";

0 commit comments

Comments
 (0)