Просмотр исходного кода

Add support for rate limit in user package (#2920)

Jaap Marcus 3 лет назад
Родитель
Сommit
08c3c16e32

+ 2 - 1
bin/v-add-mail-domain

@@ -81,6 +81,7 @@ check_hestia_demo_mode
 #                       Action                             #
 #                       Action                             #
 #----------------------------------------------------------#
 #----------------------------------------------------------#
 
 
+source_conf "$USER_DATA/user.conf"
 # Inherit web domain local ip address
 # Inherit web domain local ip address
 domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
 domain_ip=$(get_object_value 'web' 'DOMAIN' "$domain" '$IP')
 if [ ! -z "$domain_ip" ]; then
 if [ ! -z "$domain_ip" ]; then
@@ -95,7 +96,7 @@ new_timestamp
 
 
 # Adding domain to mail.conf
 # Adding domain to mail.conf
 s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' REJECT='$reject' DKIM='$dkim' WEBMAIL=''"
 s="DOMAIN='$domain' ANTIVIRUS='$antivirus' ANTISPAM='$antispam' REJECT='$reject' DKIM='$dkim' WEBMAIL=''"
-s="$s SSL='no' LETSENCRYPT='no' CATCHALL='' ACCOUNTS='0' U_DISK='0' SUSPENDED='no' TIME='$time'"
+s="$s SSL='no' LETSENCRYPT='no' CATCHALL='' ACCOUNTS='0' RATE_LIMIT='$RATE_LIMIT' U_DISK='0' SUSPENDED='no' TIME='$time'"
 s="$s DATE='$date'"
 s="$s DATE='$date'"
 echo $s >> $USER_DATA/mail.conf
 echo $s >> $USER_DATA/mail.conf
 touch $USER_DATA/mail/$domain.conf
 touch $USER_DATA/mail/$domain.conf

+ 3 - 0
bin/v-add-user-package

@@ -49,6 +49,9 @@ is_package_consistent() {
     if [ "$CRON_JOBS" != 'unlimited' ]; then
     if [ "$CRON_JOBS" != 'unlimited' ]; then
         is_int_format_valid "$CRON_JOBS" 'CRON_JOBS'
         is_int_format_valid "$CRON_JOBS" 'CRON_JOBS'
     fi
     fi
+    
+    is_int_format_valid "$RATE_LIMIT" 'RATE_LIMIT'
+
     if [ "$DISK_QUOTA" != 'unlimited' ]; then
     if [ "$DISK_QUOTA" != 'unlimited' ]; then
         is_int_format_valid "$DISK_QUOTA" 'DISK_QUOTA'
         is_int_format_valid "$DISK_QUOTA" 'DISK_QUOTA'
     fi
     fi

+ 1 - 0
bin/v-change-user-package

@@ -92,6 +92,7 @@ DNS_DOMAINS='$DNS_DOMAINS'
 DNS_RECORDS='$DNS_RECORDS'
 DNS_RECORDS='$DNS_RECORDS'
 MAIL_DOMAINS='$MAIL_DOMAINS'
 MAIL_DOMAINS='$MAIL_DOMAINS'
 MAIL_ACCOUNTS='$MAIL_ACCOUNTS'
 MAIL_ACCOUNTS='$MAIL_ACCOUNTS'
+RATE_LIMIT='$RATE_LIMIT'
 DATABASES='$DATABASES'
 DATABASES='$DATABASES'
 CRON_JOBS='$CRON_JOBS'
 CRON_JOBS='$CRON_JOBS'
 DISK_QUOTA='$DISK_QUOTA'
 DISK_QUOTA='$DISK_QUOTA'

+ 5 - 3
bin/v-list-user-package

@@ -34,6 +34,7 @@ json_list() {
         "DNS_RECORDS": "'$DNS_RECORDS'",
         "DNS_RECORDS": "'$DNS_RECORDS'",
         "MAIL_DOMAINS": "'$MAIL_DOMAINS'",
         "MAIL_DOMAINS": "'$MAIL_DOMAINS'",
         "MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
         "MAIL_ACCOUNTS": "'$MAIL_ACCOUNTS'",
+        "RATE_LIMIT": "'$RATE_LIMIT'",
         "DATABASES": "'$DATABASES'",
         "DATABASES": "'$DATABASES'",
         "CRON_JOBS": "'$CRON_JOBS'",
         "CRON_JOBS": "'$CRON_JOBS'",
         "DISK_QUOTA": "'$DISK_QUOTA'",
         "DISK_QUOTA": "'$DISK_QUOTA'",
@@ -60,6 +61,7 @@ shell_list() {
     echo "DNS RECORDS:      $DNS_RECORDS"
     echo "DNS RECORDS:      $DNS_RECORDS"
     echo "MAIL DOMAINS:     $MAIL_DOMAINS"
     echo "MAIL DOMAINS:     $MAIL_DOMAINS"
     echo "MAIL ACCOUNTS:    $MAIL_ACCOUNTS"
     echo "MAIL ACCOUNTS:    $MAIL_ACCOUNTS"
+    echo "RATE_LIMIT:       $RATE_LIMIT"
     echo "DATABASES:        $DATABASES"
     echo "DATABASES:        $DATABASES"
     echo "CRON JOBS:        $CRON_JOBS"
     echo "CRON JOBS:        $CRON_JOBS"
     echo "DISK QUOTA:       $DISK_QUOTA"
     echo "DISK QUOTA:       $DISK_QUOTA"
@@ -75,7 +77,7 @@ shell_list() {
 plain_list() {
 plain_list() {
     echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
     echo -ne "$PACKAGE\t$WEB_TEMPLATE\t$BACKEND_TEMPLATE\t$PROXY_TEMPLATE\t$DNS_TEMPLATE\t"
     echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
     echo -ne "$WEB_DOMAINS\t$WEB_ALIASES\t$DNS_DOMAINS\t$DNS_RECORDS\t"
-    echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$DATABASES\t$CRON_JOBS\t"
+    echo -ne "$MAIL_DOMAINS\t$MAIL_ACCOUNTS\t$RATE_LIMIT\t$DATABASES\t$CRON_JOBS\t"
     echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE"
     echo -e "$DISK_QUOTA\t$BANDWIDTH\t$NS\t$SHELL\t$BACKUPS\t$TIME\t$DATE"
 }
 }
 
 
@@ -83,11 +85,11 @@ plain_list() {
 csv_list() {
 csv_list() {
     echo -n "PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE,"
     echo -n "PACKAGE,WEB_TEMPLATE,BACKEND_TEMPLATE,PROXY_TEMPLATE,DNS_TEMPLATE,"
     echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS,"
     echo -n "WEB_DOMAINS,WEB_ALIASES,DNS_DOMAINS,DNS_RECORDS,"
-    echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,DATABASES,CRON_JOBS,"
+    echo -n "MAIL_DOMAINS,MAIL_ACCOUNTS,RATE_LIMIT,DATABASES,CRON_JOBS,"
     echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE"
     echo "DISK_QUOTA,BANDWIDTH,NS,SHELL,BACKUPS,TIME,DATE"
     echo -n "$PACKAGE,$WEB_TEMPLATE,$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,"
     echo -n "$PACKAGE,$WEB_TEMPLATE,$BACKEND_TEMPLATE,$PROXY_TEMPLATE,$DNS_TEMPLATE,"
     echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,"
     echo -n "$WEB_DOMAINS,$WEB_ALIASES,$DNS_DOMAINS,$DNS_RECORDS,"
-    echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$DATABASES,$CRON_JOBS,"
+    echo -n "$MAIL_DOMAINS,$MAIL_ACCOUNTS,$RATE_LIMIT,$DATABASES,$CRON_JOBS,"
     echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE"
     echo "$DISK_QUOTA,$BANDWIDTH,\"$NS\",$SHELL,$BACKUPS,$TIME,$DATE"
 }
 }
 
 

+ 3 - 1
func/rebuild.sh

@@ -59,7 +59,9 @@ rebuild_user_conf() {
     if [ -z "${LOGIN_ALLOW_IPS+x}" ]; then 
     if [ -z "${LOGIN_ALLOW_IPS+x}" ]; then 
         sed -i "/LOGIN_USE_IPLIST/a LOGIN_ALLOW_IPS=''" $USER_DATA/user.conf 
         sed -i "/LOGIN_USE_IPLIST/a LOGIN_ALLOW_IPS=''" $USER_DATA/user.conf 
     fi
     fi
-
+    if [ -z "${RATE_LIMIT+x}" ]; then 
+        sed -i "/MAIL_ACCOUNTS/a RATE_LIMIT='200'" $USER_DATA/user.conf 
+    fi
     # Run template trigger
     # Run template trigger
     if [ -x "$HESTIA/data/packages/$PACKAGE.sh" ]; then
     if [ -x "$HESTIA/data/packages/$PACKAGE.sh" ]; then
         $HESTIA/data/packages/$PACKAGE.sh "$user" "$CONTACT" "$NAME"
         $HESTIA/data/packages/$PACKAGE.sh "$user" "$CONTACT" "$NAME"

+ 1 - 0
install/common/packages/default.pkg

@@ -8,6 +8,7 @@ DNS_DOMAINS='unlimited'
 DNS_RECORDS='unlimited'
 DNS_RECORDS='unlimited'
 MAIL_DOMAINS='unlimited'
 MAIL_DOMAINS='unlimited'
 MAIL_ACCOUNTS='unlimited'
 MAIL_ACCOUNTS='unlimited'
+RATE_LIMIT='200'
 DATABASES='unlimited'
 DATABASES='unlimited'
 CRON_JOBS='unlimited'
 CRON_JOBS='unlimited'
 DISK_QUOTA='unlimited'
 DISK_QUOTA='unlimited'

+ 1 - 0
install/common/packages/system.pkg

@@ -8,6 +8,7 @@ DNS_DOMAINS='1'
 DNS_RECORDS='unlimited'
 DNS_RECORDS='unlimited'
 MAIL_DOMAINS='1'
 MAIL_DOMAINS='1'
 MAIL_ACCOUNTS='1'
 MAIL_ACCOUNTS='1'
+RATE_LIMIT='200'
 DATABASES='0'
 DATABASES='0'
 CRON_JOBS='unlimited'
 CRON_JOBS='unlimited'
 DISK_QUOTA='unlimited'
 DISK_QUOTA='unlimited'

+ 8 - 1
install/upgrade/versions/1.7.0.sh

@@ -25,4 +25,11 @@ upgrade_config_set_value 'UPGRADE_UPDATE_FILEMANAGER_CONFIG' 'false'
 if [ "$FILE_MANAGER" = "true" ]; then 
 if [ "$FILE_MANAGER" = "true" ]; then 
     $HESTIA/bin/v-delete-sys-filemanager quiet
     $HESTIA/bin/v-delete-sys-filemanager quiet
     $HESTIA/bin/v-add-sys-filemanager quiet  
     $HESTIA/bin/v-add-sys-filemanager quiet  
-fi
+fi
+
+packages=$(ls --sort=time $HESTIA/data/packages |grep .pkg)
+for package in $packages; do
+    if [ -z "$(grep -e 'RATE_LIMIT' $HESTIA/data/packages/$package)" ]; then
+       echo "RATE_LIMIT='200'" >> $HESTIA/data/packages/$package
+    fi
+done

+ 14 - 1
web/add/package/index.php

@@ -30,11 +30,17 @@ if (!empty($_POST['ok'])) {
         if (empty($_POST['v_backend_template'])) {
         if (empty($_POST['v_backend_template'])) {
             $errors[] = _('backend template');
             $errors[] = _('backend template');
         }
         }
+    }else{
+        # When modphp is enabled
+        $_POST['v_backend_template'] = '';
     }
     }
     if (!empty($_SESSION['PROXY_SYSTEM'])) {
     if (!empty($_SESSION['PROXY_SYSTEM'])) {
         if (empty($_POST['v_proxy_template'])) {
         if (empty($_POST['v_proxy_template'])) {
             $errors[] = _('proxy template');
             $errors[] = _('proxy template');
         }
         }
+    }else{
+        # when nginx only is enabled
+        $_POST['v_proxy_template'] = 'default';
     }
     }
     if (empty($_POST['v_dns_template'])) {
     if (empty($_POST['v_dns_template'])) {
         $errors[] = _('dns template');
         $errors[] = _('dns template');
@@ -75,7 +81,9 @@ if (!empty($_POST['ok'])) {
     if (!isset($_POST['v_bandwidth'])) {
     if (!isset($_POST['v_bandwidth'])) {
         $errors[] = _('bandwidth');
         $errors[] = _('bandwidth');
     }
     }
-
+    if (!isset($_POST['v_ratelimit'])) {
+        $errors[] = _('rate limit');
+    }
     // Check if name server entries are blank if DNS server is installed
     // Check if name server entries are blank if DNS server is installed
     if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {
     if ((isset($_SESSION['DNS_SYSTEM'])) && (!empty($_SESSION['DNS_SYSTEM']))) {
         if (empty($_POST['v_ns1'])) {
         if (empty($_POST['v_ns1'])) {
@@ -114,6 +122,7 @@ if (!empty($_POST['ok'])) {
     $v_backups = quoteshellarg($_POST['v_backups']);
     $v_backups = quoteshellarg($_POST['v_backups']);
     $v_disk_quota = quoteshellarg($_POST['v_disk_quota']);
     $v_disk_quota = quoteshellarg($_POST['v_disk_quota']);
     $v_bandwidth = quoteshellarg($_POST['v_bandwidth']);
     $v_bandwidth = quoteshellarg($_POST['v_bandwidth']);
+    $v_ratelimit = quoteshellarg($_POST['v_ratelimit']);
     $v_ns1 = trim($_POST['v_ns1'], '.');
     $v_ns1 = trim($_POST['v_ns1'], '.');
     $v_ns2 = trim($_POST['v_ns2'], '.');
     $v_ns2 = trim($_POST['v_ns2'], '.');
     $v_ns3 = trim($_POST['v_ns3'], '.');
     $v_ns3 = trim($_POST['v_ns3'], '.');
@@ -165,6 +174,7 @@ if (!empty($_POST['ok'])) {
         $pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
         $pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
         $pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
         $pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
         $pkg .= "BANDWIDTH=".$v_bandwidth."\n";
         $pkg .= "BANDWIDTH=".$v_bandwidth."\n";
+        $pkg .= "RATE_LIMIT=".$v_ratelimit."\n";
         $pkg .= "NS=".$v_ns."\n";
         $pkg .= "NS=".$v_ns."\n";
         $pkg .= "SHELL=".$v_shell."\n";
         $pkg .= "SHELL=".$v_shell."\n";
         $pkg .= "BACKUPS=".$v_backups."\n";
         $pkg .= "BACKUPS=".$v_backups."\n";
@@ -271,6 +281,9 @@ if (empty($v_disk_quota)) {
 if (empty($v_bandwidth)) {
 if (empty($v_bandwidth)) {
     $v_bandwidth = "'1000'";
     $v_bandwidth = "'1000'";
 }
 }
+if (empty($v_ratelimit)) {
+    $v_ratelimit = "'200'";
+}
 if (empty($v_ns1)) {
 if (empty($v_ns1)) {
     $v_ns1 = 'ns1.example.ltd';
     $v_ns1 = 'ns1.example.ltd';
 }
 }

+ 6 - 0
web/edit/package/index.php

@@ -46,6 +46,7 @@ $v_dns_domains = $data[$v_package]['DNS_DOMAINS'];
 $v_dns_records = $data[$v_package]['DNS_RECORDS'];
 $v_dns_records = $data[$v_package]['DNS_RECORDS'];
 $v_mail_domains = $data[$v_package]['MAIL_DOMAINS'];
 $v_mail_domains = $data[$v_package]['MAIL_DOMAINS'];
 $v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS'];
 $v_mail_accounts = $data[$v_package]['MAIL_ACCOUNTS'];
+$v_ratelimit = $data[$v_package]['RATE_LIMIT'];
 $v_databases = $data[$v_package]['DATABASES'];
 $v_databases = $data[$v_package]['DATABASES'];
 $v_cron_jobs = $data[$v_package]['CRON_JOBS'];
 $v_cron_jobs = $data[$v_package]['CRON_JOBS'];
 $v_disk_quota = $data[$v_package]['DISK_QUOTA'];
 $v_disk_quota = $data[$v_package]['DISK_QUOTA'];
@@ -175,6 +176,9 @@ if (!empty($_POST['save'])) {
     if (!isset($_POST['v_mail_accounts'])) {
     if (!isset($_POST['v_mail_accounts'])) {
         $errors[] = _('mail accounts');
         $errors[] = _('mail accounts');
     }
     }
+    if (!isset($_POST['v_ratelimit'])) {
+        $errors[] = _('rate limit');
+    }
     if (!isset($_POST['v_databases'])) {
     if (!isset($_POST['v_databases'])) {
         $errors[] = _('databases');
         $errors[] = _('databases');
     }
     }
@@ -230,6 +234,7 @@ if (!empty($_POST['save'])) {
     $v_dns_records = quoteshellarg($_POST['v_dns_records']);
     $v_dns_records = quoteshellarg($_POST['v_dns_records']);
     $v_mail_domains = quoteshellarg($_POST['v_mail_domains']);
     $v_mail_domains = quoteshellarg($_POST['v_mail_domains']);
     $v_mail_accounts = quoteshellarg($_POST['v_mail_accounts']);
     $v_mail_accounts = quoteshellarg($_POST['v_mail_accounts']);
+    $v_ratelimit = quoteshellarg($_POST['v_ratelimit']);
     $v_databases = quoteshellarg($_POST['v_databases']);
     $v_databases = quoteshellarg($_POST['v_databases']);
     $v_cron_jobs = quoteshellarg($_POST['v_cron_jobs']);
     $v_cron_jobs = quoteshellarg($_POST['v_cron_jobs']);
     $v_backups = quoteshellarg($_POST['v_backups']);
     $v_backups = quoteshellarg($_POST['v_backups']);
@@ -277,6 +282,7 @@ if (!empty($_POST['save'])) {
     $pkg .= "DNS_RECORDS=".$v_dns_records."\n";
     $pkg .= "DNS_RECORDS=".$v_dns_records."\n";
     $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
     $pkg .= "MAIL_DOMAINS=".$v_mail_domains."\n";
     $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
     $pkg .= "MAIL_ACCOUNTS=".$v_mail_accounts."\n";
+    $pkg .= "RATE_LIMIT=".$v_ratelimit."\n";
     $pkg .= "DATABASES=".$v_databases."\n";
     $pkg .= "DATABASES=".$v_databases."\n";
     $pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
     $pkg .= "CRON_JOBS=".$v_cron_jobs."\n";
     $pkg .= "DISK_QUOTA=".$v_disk_quota."\n";
     $pkg .= "DISK_QUOTA=".$v_disk_quota."\n";

+ 10 - 0
web/templates/pages/add_package.html

@@ -332,6 +332,16 @@
 											<i class="unlim-trigger fas fa-infinity" title="<?=_('Unlimited');?>" id="unlim-mail-accounts"></i>
 											<i class="unlim-trigger fas fa-infinity" title="<?=_('Unlimited');?>" id="unlim-mail-accounts"></i>
 										<td>
 										<td>
 									</tr>
 									</tr>
+									<tr>
+										<td class="vst-text input-label">
+											<?=_('Rate limit');?> <span class="optional">(<?=_('per account / hour');?>)</span>
+										</td>
+									</tr>
+									<tr>
+										<td>
+											<input type="text" size="20" class="vst-input" name="v_ratelimit" value="<?=htmlentities(trim($v_ratelimit, "'"))?>">
+										<td>
+									</tr>
 								</table>
 								</table>
 							</td>
 							</td>
 						</tr>
 						</tr>

+ 10 - 0
web/templates/pages/edit_package.html

@@ -337,6 +337,16 @@
 											<i class="unlim-trigger fas fa-infinity" title="<?=_('Unlimited');?>" id="unlim-mail-accounts"></i>
 											<i class="unlim-trigger fas fa-infinity" title="<?=_('Unlimited');?>" id="unlim-mail-accounts"></i>
 										<td>
 										<td>
 									</tr>
 									</tr>
+									<tr>
+										<td class="vst-text input-label">
+											<?=_('Rate limit');?> <span class="optional">(<?=_('per account / hour');?>)</span>
+										</td>
+									</tr>
+									<tr>
+										<td>
+											<input type="text" size="20" class="vst-input" name="v_ratelimit" value="<?=htmlentities(trim($v_ratelimit, "'"))?>">
+										<td>
+									</tr>
 								</table>
 								</table>
 							</td>
 							</td>
 						</tr>
 						</tr>