From 0f86941e8e507e072a9396fa136770c0403a5e7b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 4 Jun 2022 19:06:23 +0200 Subject: [PATCH 001/583] Fix for Sed Injection Vulnerability --- bin/v-change-sys-config-value | 1 + func/main.sh | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/bin/v-change-sys-config-value b/bin/v-change-sys-config-value index 10657656..3681075c 100755 --- a/bin/v-change-sys-config-value +++ b/bin/v-change-sys-config-value @@ -28,6 +28,7 @@ PATH="$PATH:/usr/local/sbin:/sbin:/usr/sbin:/root/bin" check_args '2' "$#" 'KEY VALUE' is_format_valid 'key' +format_no_quotes "$value" 'value' #----------------------------------------------------------# # Action # diff --git a/func/main.sh b/func/main.sh index 9346e918..c4169b01 100644 --- a/func/main.sh +++ b/func/main.sh @@ -838,6 +838,22 @@ is_format_valid_shell() { exit $E_INVALID fi } + +format_no_quotes() { + exclude="['|\"]" + if [[ "$1" =~ $exclude ]]; then + check_result "$E_INVALID" "Invalid $2 contains qoutes (\" or ') :: $1" + fi + is_no_new_line_format "$1" +} + +is_no_new_line_format() { + test=$(echo "$1" | head -n1 ); + if [[ "$test" != "$1" ]]; then + check_result "$E_INVALID" "invalid value :: $1" + fi +} + # Format validation controller is_format_valid() { for arg_name in $*; do @@ -846,6 +862,7 @@ is_format_valid() { case $arg_name in account) is_user_format_valid "$arg" "$arg_name";; action) is_fw_action_format_valid "$arg";; + alias) is_alias_format_valid "$arg" ;; aliases) is_alias_format_valid "$arg" ;; antispam) is_boolean_format_valid "$arg" 'antispam' ;; antivirus) is_boolean_format_valid "$arg" 'antivirus' ;; From c7aa6ec7494bc3b7ac4885182383c1bf88692c1b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 6 Jul 2022 12:48:09 +0200 Subject: [PATCH 002/583] Fix for Exim4 fastopen with Gmail services (Debian11) --- install/debian/11/exim/exim4.conf.template | 1 + 1 file changed, 1 insertion(+) diff --git a/install/debian/11/exim/exim4.conf.template b/install/debian/11/exim/exim4.conf.template index a041b329..4b3c0dd9 100644 --- a/install/debian/11/exim/exim4.conf.template +++ b/install/debian/11/exim/exim4.conf.template @@ -319,6 +319,7 @@ remote_smtp: dkim_private_key = DKIM_PRIVATE_KEY dkim_canon = relaxed dkim_strict = 0 + hosts_try_fastopen = !*.l.google.com hosts_try_chunking = !93.188.3.0/24 procmail: From 2598785a755bc59d2691fc17c6bce400ae188641 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 6 Jul 2022 13:25:34 +0200 Subject: [PATCH 003/583] Fix for Exim4 fastopen with Gmail services (Debian11) --- install/debian/11/exim/exim4.conf.template-RC | 1 + 1 file changed, 1 insertion(+) diff --git a/install/debian/11/exim/exim4.conf.template-RC b/install/debian/11/exim/exim4.conf.template-RC index 9c5fc671..605d848a 100644 --- a/install/debian/11/exim/exim4.conf.template-RC +++ b/install/debian/11/exim/exim4.conf.template-RC @@ -345,6 +345,7 @@ remote_smtp: dkim_private_key = DKIM_PRIVATE_KEY dkim_canon = relaxed dkim_strict = 0 + hosts_try_fastopen = !*.l.google.com hosts_try_chunking = !93.188.3.0/24 procmail: From cf8a49f7394e91f4d8ee22040695f7ef0d914122 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 6 Jul 2022 14:38:58 +0200 Subject: [PATCH 004/583] Patch for GMail SMTP timeouts --- src/deb/vesta/postinst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/deb/vesta/postinst b/src/deb/vesta/postinst index 8bda7d8d..cc798224 100755 --- a/src/deb/vesta/postinst +++ b/src/deb/vesta/postinst @@ -31,6 +31,24 @@ if [ "$release" -eq 11 ]; then sed -i "s/yescrypt/sha512/g" /etc/pam.d/common-password fi +# Fixing Gmail hosts_try_fastopen in Exim4 +if [ "$release" -eq 11 ]; then + if [ -f "/etc/exim4/exim4.conf.template" ]; then + check_grep=$(grep -c 'hosts_try_fastopen' /etc/exim4/exim4.conf.template) + if [ "$check_grep" -eq 0 ]; then + echo "=== Fixing Gmail hosts_try_fastopen in Exim4" + FIND="dkim_strict = 0" + ADD=" hosts_try_fastopen = \!\*.l.google.com" + sed -i "s#$FIND#$FIND\n$ADD#g" /etc/exim4/exim4.conf.template + systemctl restart exim4 + + sed -i "s/net.ipv4.tcp_window_scaling/#net.ipv4.tcp_window_scaling/g" /etc/sysctl.conf + echo 1 > /proc/sys/net/ipv4/tcp_window_scaling + fi + fi +fi + + # Adding Barracuda RBL to SpamAssassin if [ ! -f "/usr/local/vesta/data/upgrades/barracuda_rbl" ]; then spamassassin_installed=$(/usr/local/vesta/bin/v-list-sys-services | grep -c 'spamassassin') From 7f1de189dd0181fde52a7db560122f844e2d344e Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 6 Jul 2022 15:08:12 +0200 Subject: [PATCH 005/583] Update Changelog.md --- Changelog.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 002cd045..17494c79 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,8 @@ +Version 0.9.8-26-57 [06-Jul-2022] +================================================== +* Fix for GMail SMTP timeouts on Debian11 +* [Security] Fix for Local Sed Injection Vulnerability ( credits to @cleemy-desu-wayo ) + Version 0.9.8-26-56 [28-May-2022] ================================================== * Adding Barracuda RBL to SpamAssassin @@ -7,7 +12,7 @@ Version 0.9.8-26-56 [28-May-2022] Version 0.9.8-26-55 [26-Apr-2022] ================================================== * Support for MySQL 8 -* Preventing brute-force resetting password (thanks to HestiaCP @hestiacp for fix) +* [Security] Preventing brute-force resetting password (thanks to HestiaCP @hestiacp for fix) * Many minor bugfixes Version 0.9.8-26-54 [17-Dec-2021] From 16f18bd8b3d007018c18843a7dea1e8d1c9d7da8 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 6 Jul 2022 15:09:22 +0200 Subject: [PATCH 006/583] Version 0.9.8-26-57 --- src/deb/latest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/latest.txt b/src/deb/latest.txt index 2a785f14..162eec34 100644 --- a/src/deb/latest.txt +++ b/src/deb/latest.txt @@ -1 +1 @@ -vesta-0.9.8-26-56 +vesta-0.9.8-26-57 From d3bde491c73460edf0d2e0feff7ca55f8a7920c6 Mon Sep 17 00:00:00 2001 From: Umut Korkmaz Date: Wed, 6 Jul 2022 19:43:11 +0300 Subject: [PATCH 007/583] fix typo --- bin/v-copy-fs-file | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-copy-fs-file b/bin/v-copy-fs-file index 792956ec..87447b40 100755 --- a/bin/v-copy-fs-file +++ b/bin/v-copy-fs-file @@ -43,7 +43,7 @@ fi # Checking destination path rpath=$(readlink -f "$dst_file") if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then - echo "Error: ivalid destination path $dst_file" + echo "Error: invalid destination path $dst_file" exit 2 fi From b13b82112a0b26ec0db5f56f34de75b786ff0da9 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Sat, 9 Jul 2022 11:16:02 +0200 Subject: [PATCH 008/583] avoid out-of-memory serving large logfiles large logfiles previously resulted in out-of-memory errors, see https://github.com/hestiacp/hestiacp/issues/2736 hestacp PR: https://github.com/hestiacp/hestiacp/pull/2741 and no, removing the php end tag was not an accident, it was intentional. end tags, ideally, should only be used when they're absolutely required, because they can easily introduce bugs like printing a newline after the end tag. --- web/download/web-log/index.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/web/download/web-log/index.php b/web/download/web-log/index.php index 35ebc335..9078d20c 100644 --- a/web/download/web-log/index.php +++ b/web/download/web-log/index.php @@ -25,11 +25,18 @@ $v_domain = escapeshellarg($_GET['domain']); if ($_GET['type'] == 'access') $type = 'access'; if ($_GET['type'] == 'error') $type = 'error'; -exec (VESTA_CMD."v-list-web-domain-".$type."log $user ".$v_domain." 5000", $output, $return_var); -if ($return_var == 0 ) { - foreach($output as $file) { - echo $file . "\n"; - } + + +$cmd = implode(" ", array( + escapeshellarg(HESTIA_CMD . "v-list-web-domain-" . $type . "log"), + escapeshellarg($user), + escapeshellarg($v_domain), + "5000", +)); +passthru($cmd, $return_var); +if ($return_var != 0) { + $errstr = "Internal server error: command returned non-zero: {$return_var}: {$cmd}"; + echo $errstr; + throw new Exception($errstr); // make sure it ends up in an errorlog somewhere } -?> From b09d244af7ab6dd93f07e63331b483c5f8d10dd7 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Sat, 9 Jul 2022 11:18:30 +0200 Subject: [PATCH 009/583] code-breaking-typo from copypasta --- web/download/web-log/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/download/web-log/index.php b/web/download/web-log/index.php index 9078d20c..e9c63a8d 100644 --- a/web/download/web-log/index.php +++ b/web/download/web-log/index.php @@ -28,7 +28,7 @@ if ($_GET['type'] == 'error') $type = 'error'; $cmd = implode(" ", array( - escapeshellarg(HESTIA_CMD . "v-list-web-domain-" . $type . "log"), + escapeshellarg(VESTA_CMD . "v-list-web-domain-" . $type . "log"), escapeshellarg($user), escapeshellarg($v_domain), "5000", From e65af22a54337f96e2abe2b612efc2b1533c3775 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 18:10:31 +0200 Subject: [PATCH 010/583] hash_equals() in /reset/mail/ Thanks to @divinity76 --- web/reset/mail/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/reset/mail/index.php b/web/reset/mail/index.php index 5419d8ea..c0524ebb 100644 --- a/web/reset/mail/index.php +++ b/web/reset/mail/index.php @@ -149,7 +149,7 @@ if ((!empty($_POST['email'])) && (!empty($_POST['password'])) && (!empty($_POST[ $n_hash = '{MD5}'.$n_hash; // Change password - if ( $v_hash == $n_hash ) { + if ( hash_equals($v_hash, $n_hash ) ) { $v_new_password = tempnam("/tmp","vst"); $fp = fopen($v_new_password, "w"); fwrite($fp, $_POST['new']."\n"); From 1a081dfdbe72eac0aeaf3a27a52f1ff3df8e4555 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Tue, 12 Jul 2022 19:14:55 +0200 Subject: [PATCH 011/583] workaround for passthru() being disabled --- web/download/web-log/index.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/web/download/web-log/index.php b/web/download/web-log/index.php index e9c63a8d..4bef3528 100644 --- a/web/download/web-log/index.php +++ b/web/download/web-log/index.php @@ -26,14 +26,24 @@ if ($_GET['type'] == 'access') $type = 'access'; if ($_GET['type'] == 'error') $type = 'error'; - $cmd = implode(" ", array( escapeshellarg(VESTA_CMD . "v-list-web-domain-" . $type . "log"), escapeshellarg($user), escapeshellarg($v_domain), "5000", )); -passthru($cmd, $return_var); + +if(is_callable("passthru")){ + passthru($cmd, $return_var); +} else{ + // passthru is disabled, workaround it by writing the output to a file then reading the file. + // this is slower than passthru, but avoids running out of RAM... + $passthru_is_disabled_workaround_handle = tmpfile(); + $passthru_is_disabled_workaround_file = stream_get_meta_data($passthru_is_disabled_workaround_handle)['uri']; + exec ($cmd . " > " . escapeshellarg($passthru_is_disabled_workaround_file), $output, $return_var); + readfile($passthru_is_disabled_workaround_file); + fclose($passthru_is_disabled_workaround_handle); // fclose(tmpfile()) automatically deletes the file, unlink is not required :) +} if ($return_var != 0) { $errstr = "Internal server error: command returned non-zero: {$return_var}: {$cmd}"; echo $errstr; From 5aebfde6cf471fc69d46f2287c6a285d16f96013 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Tue, 12 Jul 2022 19:17:01 +0200 Subject: [PATCH 012/583] avoid double-quoting v_domain --- web/download/web-log/index.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/web/download/web-log/index.php b/web/download/web-log/index.php index 4bef3528..5e882c89 100644 --- a/web/download/web-log/index.php +++ b/web/download/web-log/index.php @@ -10,8 +10,6 @@ if ((!isset($_GET['token'])) || ($_SESSION['token'] != $_GET['token'])) { exit(); } -$v_domain = $_GET['domain']; -$v_domain = escapeshellarg($_GET['domain']); if ($_GET['type'] == 'access') $type = 'access'; if ($_GET['type'] == 'error') $type = 'error'; @@ -21,7 +19,7 @@ header("Content-Disposition: attachment; filename=".$_GET['domain'].".".$type."- header("Content-Type: application/octet-stream; "); header("Content-Transfer-Encoding: binary"); -$v_domain = escapeshellarg($_GET['domain']); +$v_domain = $_GET['domain']; if ($_GET['type'] == 'access') $type = 'access'; if ($_GET['type'] == 'error') $type = 'error'; From 15c5bdac5134f398288f6c81f30aa9b3f51744a5 Mon Sep 17 00:00:00 2001 From: divinity76 Date: Tue, 12 Jul 2022 20:07:55 +0200 Subject: [PATCH 013/583] turns out VESTA_CMD is 2 commands --- web/download/web-log/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/download/web-log/index.php b/web/download/web-log/index.php index 5e882c89..b9859c6f 100644 --- a/web/download/web-log/index.php +++ b/web/download/web-log/index.php @@ -25,7 +25,7 @@ if ($_GET['type'] == 'error') $type = 'error'; $cmd = implode(" ", array( - escapeshellarg(VESTA_CMD . "v-list-web-domain-" . $type . "log"), + VESTA_CMD . "v-list-web-domain-" . $type . "log", escapeshellarg($user), escapeshellarg($v_domain), "5000", From b2d7c5a1fd6525a91c4e1227ee16797a1f0e1f37 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 20:40:20 +0200 Subject: [PATCH 014/583] Fix for PHP Notice in vesta-php --- web/inc/secure_login.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/inc/secure_login.php b/web/inc/secure_login.php index b9e2115c..3ae149d5 100644 --- a/web/inc/secure_login.php +++ b/web/inc/secure_login.php @@ -91,7 +91,8 @@ function prevent_get_csrf () { if (isset($_SERVER['SERVER_PORT']) == false) return; if (isset($_SERVER['HTTP_REFERER']) == false) return; $_SERVER['HTTP_HOST'] = strtolower($_SERVER['HTTP_HOST']); - $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); + if (isset($_SERVER['HTTP_ORIGIN'])) $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); + else $_SERVER['HTTP_ORIGIN']=''; if (substr($_SERVER['HTTP_REFERER'], 0, 8) != "file:///" && substr($_SERVER['HTTP_REFERER'], 0, 7) != "http://" && substr($_SERVER['HTTP_REFERER'], 0, 8) != "https://") return; $host_arr = explode(":", $_SERVER['HTTP_HOST']); $hostname = $host_arr[0]; From 94d7c20a3bba372159b4f576a0cc525c318fce93 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 20:42:10 +0200 Subject: [PATCH 015/583] Version 0.9.8-26-58 --- src/deb/latest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/latest.txt b/src/deb/latest.txt index 162eec34..5a056019 100644 --- a/src/deb/latest.txt +++ b/src/deb/latest.txt @@ -1 +1 @@ -vesta-0.9.8-26-57 +vesta-0.9.8-26-58 From 8b1c8b658da9302b39fdb9d0b88f3d089522fc9d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 20:47:56 +0200 Subject: [PATCH 016/583] Update Changelog.md --- Changelog.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Changelog.md b/Changelog.md index 17494c79..c0dcbd49 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,8 @@ +Version 0.9.8-26-58 [12-Jul-2022] +================================================== +* [Security] hash_equals() in /reset/mail/ (credits to @divinity76 ) +* Fix for an boring PHP Notice in vesta-php + Version 0.9.8-26-57 [06-Jul-2022] ================================================== * Fix for GMail SMTP timeouts on Debian11 From 6d365026236d98a425dfd4183eb4b60c6c2d54e2 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 20:52:41 +0200 Subject: [PATCH 017/583] Update Changelog.md --- Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Changelog.md b/Changelog.md index c0dcbd49..b7e52d49 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,7 @@ Version 0.9.8-26-58 [12-Jul-2022] ================================================== * [Security] hash_equals() in /reset/mail/ (credits to @divinity76 ) +* Avoid out-of-memory while downloading large log files from panel (credits to @divinity76 ) * Fix for an boring PHP Notice in vesta-php Version 0.9.8-26-57 [06-Jul-2022] From d625c9722ac512f873b3dcb8182e5ffaddc36c3c Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 21:00:33 +0200 Subject: [PATCH 018/583] Fix for an boring PHP Notice in vesta-php --- web/inc/secure_login.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/inc/secure_login.php b/web/inc/secure_login.php index 3ae149d5..7f8c8d15 100644 --- a/web/inc/secure_login.php +++ b/web/inc/secure_login.php @@ -63,7 +63,8 @@ function prevent_post_csrf ($hard_check=false) { if (isset($_SERVER['HTTP_ORIGIN']) == false) $_SERVER['HTTP_ORIGIN'] = ''; } $_SERVER['HTTP_HOST'] = strtolower($_SERVER['HTTP_HOST']); - $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); + if (isset($_SERVER['HTTP_ORIGIN'])) $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); + else $_SERVER['HTTP_ORIGIN']=''; if ($hard_check == false) { if (substr($_SERVER['HTTP_ORIGIN'], 0, 8) != "file:///" && substr($_SERVER['HTTP_ORIGIN'], 0, 7) != "http://" && substr($_SERVER['HTTP_ORIGIN'], 0, 8) != "https://") return; } From bc67f1028a1d6247d5cec6edb35733348d73e46f Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 12 Jul 2022 21:08:30 +0200 Subject: [PATCH 019/583] Fix for an boring PHP Notice in vesta-php --- web/inc/secure_login.php | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/web/inc/secure_login.php b/web/inc/secure_login.php index 7f8c8d15..3dcdb0ae 100644 --- a/web/inc/secure_login.php +++ b/web/inc/secure_login.php @@ -63,8 +63,7 @@ function prevent_post_csrf ($hard_check=false) { if (isset($_SERVER['HTTP_ORIGIN']) == false) $_SERVER['HTTP_ORIGIN'] = ''; } $_SERVER['HTTP_HOST'] = strtolower($_SERVER['HTTP_HOST']); - if (isset($_SERVER['HTTP_ORIGIN'])) $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); - else $_SERVER['HTTP_ORIGIN']=''; + $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); if ($hard_check == false) { if (substr($_SERVER['HTTP_ORIGIN'], 0, 8) != "file:///" && substr($_SERVER['HTTP_ORIGIN'], 0, 7) != "http://" && substr($_SERVER['HTTP_ORIGIN'], 0, 8) != "https://") return; } @@ -92,8 +91,6 @@ function prevent_get_csrf () { if (isset($_SERVER['SERVER_PORT']) == false) return; if (isset($_SERVER['HTTP_REFERER']) == false) return; $_SERVER['HTTP_HOST'] = strtolower($_SERVER['HTTP_HOST']); - if (isset($_SERVER['HTTP_ORIGIN'])) $_SERVER['HTTP_ORIGIN'] = strtolower($_SERVER['HTTP_ORIGIN']); - else $_SERVER['HTTP_ORIGIN']=''; if (substr($_SERVER['HTTP_REFERER'], 0, 8) != "file:///" && substr($_SERVER['HTTP_REFERER'], 0, 7) != "http://" && substr($_SERVER['HTTP_REFERER'], 0, 8) != "https://") return; $host_arr = explode(":", $_SERVER['HTTP_HOST']); $hostname = $host_arr[0]; From d48f6cc4281bd3620f8ed8f7d9ab1dbdb105be7d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 29 Jul 2022 00:34:52 +0200 Subject: [PATCH 020/583] typo fix --- bin/v-install-wordpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index 95f6f353..bdf56f72 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -51,7 +51,7 @@ if [ -z "$database" ]; then database="wp" fi -if [ -z "$emil" ]; then +if [ -z "$email" ]; then email="info@$domain"; fi From 44cf0b53063145c88a2b8b809c109582364ec6c1 Mon Sep 17 00:00:00 2001 From: Umut Korkmaz Date: Tue, 2 Aug 2022 17:24:55 +0300 Subject: [PATCH 021/583] Fixed #142 --- web/templates/admin/list_firewall.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/templates/admin/list_firewall.html b/web/templates/admin/list_firewall.html index 889de6a2..a12c9daf 100644 --- a/web/templates/admin/list_firewall.html +++ b/web/templates/admin/list_firewall.html @@ -120,7 +120,7 @@ sort-ip="" sort-comment="
-
+
From 5518e0e0598661a286fbb17bc0b05cec0a3df29e Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 24 Sep 2022 11:55:07 +0200 Subject: [PATCH 022/583] Update v-clean-garbage --- bin/v-clean-garbage | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index 067ecd58..62bb39c8 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -29,6 +29,7 @@ find /home/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".h find /home/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find /home/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find /home/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete +find /home/*/web/*/public_html/ -type f -name "*.wpress" -delete find /home/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; find /home/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; find /home/ -type f -name "*.log" -exec truncate -s 0 {} \; From e5a03804aa8f8f5f1906778b94b9dc6f89c46578 Mon Sep 17 00:00:00 2001 From: N1ebieski Date: Sun, 25 Sep 2022 14:47:31 +0200 Subject: [PATCH 023/583] Include "hidden" files to backup Files like .htaccess, .env, .git etc --- bin/v-backup-user | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-backup-user b/bin/v-backup-user index e2d7cac9..8bd0bb25 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -265,7 +265,7 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB" != '*' ]; then set +f # Backup files - tar --anchored -cpf- ${fargs[@]} * |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz + tar --anchored -cpf- ${fargs[@]} --exclude={'./','../'} . |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz done # Print total From 25d3fef4aa6f53b09249fae8001e4357f8215b70 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Mon, 26 Sep 2022 14:27:39 +0200 Subject: [PATCH 024/583] Create v-fix-user-permissions --- bin/v-fix-user-permissions | 55 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 bin/v-fix-user-permissions diff --git a/bin/v-fix-user-permissions b/bin/v-fix-user-permissions new file mode 100644 index 00000000..fa902ec3 --- /dev/null +++ b/bin/v-fix-user-permissions @@ -0,0 +1,55 @@ +#!/bin/bash + +# info: +# This script will fix files permissions for desired user (if ownership is lost or files have wrong chmod) + +# options: user + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ] && [ "$whoami" != "admin" ] ; then + echo "You must be root or admin to execute this script"; + exit 1; +fi + +# Argument definition +user=$1 + +# Includes +source $VESTA/func/main.sh + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '1' "$#" 'USER' +is_format_valid 'user' +is_object_valid 'user' 'USER' "$user" + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +find /home/$user/conf/mail/ -type d -exec chown Debian-exim:mail {} \; +find /home/$user/conf/mail/*/ -type f -exec chown Debian-exim:mail {} \; +find /home/$user/conf/mail/*/ -name "passwd" -type f -exec chown dovecot:mail {} \; +find /home/$user/mail/ -type d -exec chown $user:mail {} \; +find /home/$user/mail/*/ -type d -exec chown $user:mail {} \; +find /home/$user/mail/*/ -type f -exec chown $user:mail {} \; + +find /home/$user/conf/dns/ -type f -exec chown root:bind {} \; +find /home/$user/conf/ -type d -exec chown root:root {} \; + +find /home/$user/web/*/public_html/ -type d -exec chmod 755 {} + +find /home/$user/web/*/public_html/ -type f -exec chmod 644 {} + +find /home/$user/web/*/public_html/ -exec chown $user:$user {} \; + +echo "Done, permissions fixed for user: $user" + +# Logging +log_event "$OK" "$ARGUMENTS" + +exit From 7f38c8ceafd9abc8c11224902ee3cfbbb837177b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 14 Oct 2022 16:00:02 +0200 Subject: [PATCH 025/583] Restart DNS after adding acme_challenge TXT record --- bin/v-add-letsencrypt-domain | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 0cea207c..2940bbb6 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -200,6 +200,7 @@ for auth in $authz; do echo "[$(date)] : EXIT=DNS _acme-challenge record wasn't created" >> /usr/local/vesta/log/letsencrypt.log fi check_result $exitstatus "DNS _acme-challenge record wasn't created" + $BIN/v-restart-dns else if [ "$WEB_SYSTEM" = 'nginx' ] || [ ! -z "$PROXY_SYSTEM" ]; then if [ -f "/usr/local/vesta/web/inc/nginx_proxy" ]; then From 93c1414217ea13ca8b3edcb54ad2f0a73039b325 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 14 Oct 2022 18:38:39 +0200 Subject: [PATCH 026/583] systemctl instead of service in v-restart-dns --- bin/v-restart-dns | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/v-restart-dns b/bin/v-restart-dns index 4e7712a7..f96937a1 100755 --- a/bin/v-restart-dns +++ b/bin/v-restart-dns @@ -55,9 +55,10 @@ if [ -z "$DNS_SYSTEM" ] || [ "$DNS_SYSTEM" = 'remote' ] ; then fi # Restart system -service $DNS_SYSTEM reload >/dev/null 2>&1 +systemctl reset-failed $DNS_SYSTEM +systemctl reload $DNS_SYSTEM >/dev/null 2>&1 if [ $? -ne 0 ]; then - service $DNS_SYSTEM restart >/dev/null 2>&1 + systemctl restart $DNS_SYSTEM >/dev/null 2>&1 if [ $? -ne 0 ]; then send_email_report check_result $E_RESTART "$DNS_SYSTEM restart failed" From 374b4da5bc6f440c09eaa2937e631fbbd09df6e5 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 2 Nov 2022 19:57:48 +0100 Subject: [PATCH 027/583] Update W3TC.json --- src/deb/for-download/tools/W3TC.json | 36 ++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/src/deb/for-download/tools/W3TC.json b/src/deb/for-download/tools/W3TC.json index d42973d0..0ca4cf8d 100644 --- a/src/deb/for-download/tools/W3TC.json +++ b/src/deb/for-download/tools/W3TC.json @@ -1,5 +1,5 @@ { - "version": "2.1.8", + "version": "2.2.7", "cluster.messagebus.debug": false, "cluster.messagebus.enabled": false, "cluster.messagebus.sns.region": "", @@ -26,8 +26,12 @@ "dbcache.redis.servers": [ "127.0.0.1:6379" ], + "dbcache.redis.verify_tls_certificates": true, "dbcache.redis.password": "", "dbcache.redis.dbid": 0, + "dbcache.redis.timeout": 0, + "dbcache.redis.retry_interval": 0, + "dbcache.redis.read_timeout": 0, "dbcache.use_filters": false, "dbcache.reject.constants": [ "APP_REQUEST", @@ -114,8 +118,12 @@ "objectcache.redis.servers": [ "127.0.0.1:6379" ], + "objectcache.redis.verify_tls_certificates": true, "objectcache.redis.password": "", "objectcache.redis.dbid": 0, + "objectcache.redis.timeout": 0, + "objectcache.redis.retry_interval": 0, + "objectcache.redis.read_timeout": 0, "objectcache.groups.global": [ "users", "userlogins", @@ -140,7 +148,7 @@ "pgcache.comment_cookie_ttl": 86400, "pgcache.debug": false, "pgcache.debug_purge": false, - "pgcache.engine": "memcached", + "pgcache.engine": "file_generic", "pgcache.file.gc": 3600, "pgcache.file.nfs": false, "pgcache.file.locking": false, @@ -157,8 +165,12 @@ "pgcache.redis.servers": [ "127.0.0.1:6379" ], + "pgcache.redis.verify_tls_certificates": true, "pgcache.redis.password": "", "pgcache.redis.dbid": 0, + "pgcache.redis.timeout": 0, + "pgcache.redis.retry_interval": 0, + "pgcache.redis.read_timeout": 0, "pgcache.cache.query": false, "pgcache.cache.home": true, "pgcache.cache.feed": false, @@ -304,8 +316,12 @@ "minify.redis.servers": [ "127.0.0.1:6379" ], + "minify.redis.verify_tls_certificates": true, "minify.redis.password": "", "minify.redis.dbid": 0, + "minify.redis.timeout": 0, + "minify.redis.retry_interval": 0, + "minify.redis.read_timeout": 0, "minify.rewrite": true, "minify.options": [], "minify.symlinks": [], @@ -446,6 +462,7 @@ "cdn.s3.bucket.location": "us-east-1", "cdn.s3.cname": [], "cdn.s3.ssl": "auto", + "cdn.s3.public_objects": "enabled", "cdn.s3_compatible.api_host": "auto", "cdn.cf.key": "", "cdn.cf.secret": "", @@ -454,6 +471,7 @@ "cdn.cf.id": "", "cdn.cf.cname": [], "cdn.cf.ssl": "auto", + "cdn.cf.public_objects": "enabled", "cdn.cf2.key": "", "cdn.cf2.secret": "", "cdn.cf2.id": "", @@ -887,8 +905,7 @@ ] } }, - "robots_block.enable": false, - "common.track_usage": false, + "common.track_usage": true, "common.tweeted": false, "config.check": true, "config.path": "", @@ -919,7 +936,18 @@ "plugin.license_key": "", "plugin.type": "", "jquerymigrate.disabled": false, + "imageservice": { + "compression": "lossy", + "auto": "enabled", + "visibility": "never" + }, + "imageservice.configuration_overloaded": true, + "robots_block.enable": false, "fragmentcache": { "engine": "memcached" + }, + "pgcache.bad_behavior_path": "", + "newrelic": { + "monitoring_type": "apm" } } From c6d226023e4427223a691ea0b4b00f20b2a9f244 Mon Sep 17 00:00:00 2001 From: Jaap Marcus <9754650+jaapmarcus@users.noreply.github.com> Date: Thu, 3 Nov 2022 07:14:43 +0100 Subject: [PATCH 028/583] Unsuspend database does not restore permissions remote users See https://github.com/hestiacp/hestiacp/issues/3011 and https://github.com/hestiacp/hestiacp/issues/3014 --- func/db.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/func/db.sh b/func/db.sh index deb9e5b8..20230fec 100644 --- a/func/db.sh +++ b/func/db.sh @@ -468,7 +468,7 @@ suspend_pgsql_database() { # Unsuspend MySQL database unsuspend_mysql_database() { mysql_connect $HOST - query="GRANT ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`" + query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`" mysql_query "$query" > /dev/null query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost" mysql_query "$query" > /dev/null From c182d7f0a701c7deb455bf49879340cf6b0bb164 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 3 Nov 2022 15:19:08 +0100 Subject: [PATCH 029/583] Create fix-fpm-poold.sh --- .../tools/patches/fix-fpm-poold.sh | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/deb/for-download/tools/patches/fix-fpm-poold.sh diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh new file mode 100644 index 00000000..6c7443b1 --- /dev/null +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +if [ -d "/etc/php" ]; then + OLDVAL='php_admin_value\[upload_max_filesize\] = 80M' + NEWVAL='php_admin_value\[upload_max_filesize\] = 800M' + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + + OLDVAL='php_admin_value\[post_max_size\] = 80M' + NEWVAL='php_admin_value\[post_max_size\] = 800M' + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + + OLDVAL='php_admin_value\[memory_limit\] = 256M' + NEWVAL='php_admin_value\[memory_limit\] = 512M' + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + + OLDVAL='pm.max_children = 8' + NEWVAL='pm.max_children = 3' + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + + OLDVAL='request_terminate_timeout = 90s' + NEWVAL='request_terminate_timeout = 360s' + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + + OLDVAL='php_admin_value\[max_execution_time\] = 30' + NEWVAL='php_admin_value\[max_execution_time\] = 300' + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + + systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | xargs systemctl restart +fi + +if [ -f "/etc/apache2/mods-enabled/mpm_event.conf"]; then + sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 600#g" /etc/apache2/mods-enabled/mpm_event.conf + systemctl restart apache2 +fi From 039dca41c395ae2de9332da083299f82e01e3e87 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 3 Nov 2022 15:23:15 +0100 Subject: [PATCH 030/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index 6c7443b1..20879cb7 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -34,7 +34,7 @@ if [ -d "/etc/php" ]; then systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | xargs systemctl restart fi -if [ -f "/etc/apache2/mods-enabled/mpm_event.conf"]; then +if [ -f "/etc/apache2/mods-enabled/mpm_event.conf" ]; then sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 600#g" /etc/apache2/mods-enabled/mpm_event.conf systemctl restart apache2 fi From 402a4286d3ff95994de80eaa29481c666f9a6153 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 3 Nov 2022 15:37:43 +0100 Subject: [PATCH 031/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index 20879cb7..e83c11a5 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -28,7 +28,7 @@ if [ -d "/etc/php" ]; then OLDVAL='php_admin_value\[max_execution_time\] = 30' NEWVAL='php_admin_value\[max_execution_time\] = 300' - find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL$|$NEWVAL|g" find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | xargs systemctl restart From af11a4cbf2afb438f31bd77bd1fcb408d62da581 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 4 Nov 2022 20:09:50 +0100 Subject: [PATCH 032/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index e83c11a5..f9b562a9 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -21,15 +21,15 @@ if [ -d "/etc/php" ]; then find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" - OLDVAL='request_terminate_timeout = 90s' + OLDVAL='request_terminate_timeout = ' NEWVAL='request_terminate_timeout = 360s' - find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" - find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL.*|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL.*|$NEWVAL|g" - OLDVAL='php_admin_value\[max_execution_time\] = 30' + OLDVAL='php_admin_value\[max_execution_time\] = ' NEWVAL='php_admin_value\[max_execution_time\] = 300' - find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL$|$NEWVAL|g" - find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL|$NEWVAL|g" + find /etc/php/*/fpm/pool.d/ -name "*.conf" -type f -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL.*|$NEWVAL|g" + find /usr/local/vesta/data/templates/web/apache2/ -type f -name "*.sh" -exec grep -l "$OLDVAL" {} \; | xargs sed -i "s|$OLDVAL.*|$NEWVAL|g" systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | xargs systemctl restart fi From f89065a80a8095baed2d4f3b0178db59c942e088 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 10:35:38 +0100 Subject: [PATCH 033/583] Create create-mail-sync.sh --- .../for-download/tools/create-mail-sync.sh | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/deb/for-download/tools/create-mail-sync.sh diff --git a/src/deb/for-download/tools/create-mail-sync.sh b/src/deb/for-download/tools/create-mail-sync.sh new file mode 100644 index 00000000..e325754e --- /dev/null +++ b/src/deb/for-download/tools/create-mail-sync.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +################################## +# usage: ./create-mail-sync.sh SRCHOST EMAIL PASSWORD-ON-REMOTE-SERVER [PASSWORD-ON-THIS-SERVER] [TEST] +################################## + +if [ $# -lt 3 ]; then + echo "usage: ./create-mail-sync.sh SRCHOST EMAIL PASSWORD-ON-REMOTE-SERVER [PASSWORD-ON-THIS-SERVER] [TEST]" + exit 1 +fi + +if [ $# -eq 3 ]; then +SRCHOST=$1 +EMAIL=$2 +PASS=$3 +PASS2=$3 +TEST=1 +fi + +if [ $# -eq 4 ]; then +SRCHOST=$1 +EMAIL=$2 +PASS=$3 +PASS2=$4 +TEST=1 +fi + +if [ $# -eq 5 ]; then +SRCHOST=$1 +EMAIL=$2 +PASS=$3 +PASS2=$4 +TEST=$5 +fi + +TESTOPT="" +if [[ $TEST -eq 1 ]]; then + TESTOPT="--justlogin" +fi + +if [ ! -d "accounts" ]; then + mkdir accounts +fi +if [ -f "accounts/$EMAIL" ]; then + echo "********* $EMAIL ALREADY EXISTS !!! ************" + exit 1; + exit +fi + +echo "Writing to: accounts/$EMAIL" +echo "#!/bin/bash + +# --- +# SRCHOST = $SRCHOST +# email = $EMAIL +# pass = $PASS +# pass2 = $PASS2 +# test = $TEST +# --- + +/root/imapsync/imapsync --host1 $SRCHOST --user1 $EMAIL --password1 '$PASS' --ssl1 --host2 localhost --user2 $EMAIL --password2 '$PASS2' $TESTOPT --addheader --automap \"\$@\" + +exit; +# --- +" > accounts/$EMAIL + +chmod a=rwx accounts/$EMAIL + +if [[ $TEST -eq 0 ]]; then + exit 0; +fi + +accounts/$EMAIL +RET=$? + +if [ $RET -eq 0 ]; then + # echo "./create-mail-sync.sh $EMAIL $PASS $PASS2 $TEST" + sed -i "s/--justlogin//g" accounts/$EMAIL + echo "--- OK! ---" + echo "./create-mail-sync.sh '$SRCHOST' '$EMAIL' '$PASS' '$PASS2' $TEST" >> accounts.log +else + echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" + echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" + echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" + rm accounts/$EMAIL +fi +exit $RET; From 8d4eee37d03c4884ef1aabc5bd58581f6617dcbc Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 15:36:57 +0100 Subject: [PATCH 034/583] Create scanps.sh --- src/deb/for-download/tools/scanps/scanps.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/deb/for-download/tools/scanps/scanps.sh diff --git a/src/deb/for-download/tools/scanps/scanps.sh b/src/deb/for-download/tools/scanps/scanps.sh new file mode 100644 index 00000000..fa9129f3 --- /dev/null +++ b/src/deb/for-download/tools/scanps/scanps.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# run 'crontab -e' and add the following: +# 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/scanps.sh > /dev/null 2>&1 + +cd /home +php scanps.php From aa493287f3b77aba380e3cd9cf0d8cc39a9fb0da Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 16:15:48 +0100 Subject: [PATCH 035/583] Create scanps.php --- src/deb/for-download/tools/scanps/scanps.php | 58 ++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/deb/for-download/tools/scanps/scanps.php diff --git a/src/deb/for-download/tools/scanps/scanps.php b/src/deb/for-download/tools/scanps/scanps.php new file mode 100644 index 00000000..7b52064d --- /dev/null +++ b/src/deb/for-download/tools/scanps/scanps.php @@ -0,0 +1,58 @@ + ")!==FALSE) $command.=" 2> /dev/null"; + else { + if (strpos($command, " 2>&1")===FALSE) $command.=" 2>&1"; + } + $ret = exec($command, $out, $ret_no); + return implode("\n", $out); +} + +function is_there($list, $what) { + $arr=explode("\n", $list); + $c=count($arr); + for ($i=1; $i<$c; $i++) if (strpos($arr[$i], $what)!==false) return true; + return false; +} + +$list=my_exec("ps -Af"); +if (is_there($list, "apt")) exit; // the server is in upgrading proccess + +$search_for1="mysqld"; +$search_for2="mariadbd"; +$v1=is_there($list, $search_for1); +$v2=is_there($list, $search_for2); +$sufix=""; + +if ($v1==false && $v2==false) { + echo "- reboot\n"; + $buffer="- reboot\n".$list; + $sufix="_".time(); + $fp = fopen('/home/cron'.$sufix.'.log', 'w'); + fwrite($fp, $buffer); + fclose($fp); + $out=array(); + $ret_no=0; + $uname_arr=posix_uname(); + $hostname=$uname_arr['nodename']; + $email=my_exec("/usr/local/vesta/bin/v-list-user 'admin' | grep 'EMAIL' | awk '{print $2}'"); + mail($email, 'VPS reboot - '.$hostname, $buffer, "From: ".$hostname." "); + sleep(10); + $ret = exec("sudo reboot", $out, $ret_no); + exit; +} else { + echo "- mysql ok\n"; + $fp = fopen('/home/cron.log', 'w'); + fwrite($fp, "- mysql ok"); + fclose($fp); + exit; +} From 7e37ed471112acd4ac8a5bb654921b19303622f7 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 17:04:10 +0100 Subject: [PATCH 036/583] scanps fixes --- src/deb/for-download/tools/scanps/scanps.php | 18 ++++++++++-------- src/deb/for-download/tools/scanps/scanps.sh | 4 ++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/deb/for-download/tools/scanps/scanps.php b/src/deb/for-download/tools/scanps/scanps.php index 7b52064d..d2dbd2b3 100644 --- a/src/deb/for-download/tools/scanps/scanps.php +++ b/src/deb/for-download/tools/scanps/scanps.php @@ -1,10 +1,12 @@ /dev/null 2>&1 function my_exec($command) { $out=array(); @@ -37,21 +39,21 @@ if ($v1==false && $v2==false) { echo "- reboot\n"; $buffer="- reboot\n".$list; $sufix="_".time(); - $fp = fopen('/home/cron'.$sufix.'.log', 'w'); + $fp = fopen('/var/log/scanps_cron'.$sufix.'.log', 'w'); fwrite($fp, $buffer); fclose($fp); $out=array(); $ret_no=0; $uname_arr=posix_uname(); $hostname=$uname_arr['nodename']; - $email=my_exec("/usr/local/vesta/bin/v-list-user 'admin' | grep 'EMAIL' | awk '{print $2}'"); + $email=my_exec("export VESTA=/usr/local/vesta && /usr/local/vesta/bin/v-list-user 'admin' | grep 'EMAIL' | awk '{print $2}'"); mail($email, 'VPS reboot - '.$hostname, $buffer, "From: ".$hostname." "); sleep(10); $ret = exec("sudo reboot", $out, $ret_no); exit; } else { echo "- mysql ok\n"; - $fp = fopen('/home/cron.log', 'w'); + $fp = fopen('/var/log/scanps_cron.log', 'w'); fwrite($fp, "- mysql ok"); fclose($fp); exit; diff --git a/src/deb/for-download/tools/scanps/scanps.sh b/src/deb/for-download/tools/scanps/scanps.sh index fa9129f3..b693d21a 100644 --- a/src/deb/for-download/tools/scanps/scanps.sh +++ b/src/deb/for-download/tools/scanps/scanps.sh @@ -1,7 +1,7 @@ #!/bin/bash # run 'crontab -e' and add the following: -# 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/scanps.sh > /dev/null 2>&1 +# */5 * * * * /home/scanps.sh > /dev/null 2>&1 cd /home -php scanps.php +php scanps.php \ No newline at end of file From 595dd5dffd5b90adde74e55f477170d903d2ac3d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:00:15 +0100 Subject: [PATCH 037/583] Delete create-mail-sync.sh --- .../for-download/tools/create-mail-sync.sh | 87 ------------------- 1 file changed, 87 deletions(-) delete mode 100644 src/deb/for-download/tools/create-mail-sync.sh diff --git a/src/deb/for-download/tools/create-mail-sync.sh b/src/deb/for-download/tools/create-mail-sync.sh deleted file mode 100644 index e325754e..00000000 --- a/src/deb/for-download/tools/create-mail-sync.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash - -################################## -# usage: ./create-mail-sync.sh SRCHOST EMAIL PASSWORD-ON-REMOTE-SERVER [PASSWORD-ON-THIS-SERVER] [TEST] -################################## - -if [ $# -lt 3 ]; then - echo "usage: ./create-mail-sync.sh SRCHOST EMAIL PASSWORD-ON-REMOTE-SERVER [PASSWORD-ON-THIS-SERVER] [TEST]" - exit 1 -fi - -if [ $# -eq 3 ]; then -SRCHOST=$1 -EMAIL=$2 -PASS=$3 -PASS2=$3 -TEST=1 -fi - -if [ $# -eq 4 ]; then -SRCHOST=$1 -EMAIL=$2 -PASS=$3 -PASS2=$4 -TEST=1 -fi - -if [ $# -eq 5 ]; then -SRCHOST=$1 -EMAIL=$2 -PASS=$3 -PASS2=$4 -TEST=$5 -fi - -TESTOPT="" -if [[ $TEST -eq 1 ]]; then - TESTOPT="--justlogin" -fi - -if [ ! -d "accounts" ]; then - mkdir accounts -fi -if [ -f "accounts/$EMAIL" ]; then - echo "********* $EMAIL ALREADY EXISTS !!! ************" - exit 1; - exit -fi - -echo "Writing to: accounts/$EMAIL" -echo "#!/bin/bash - -# --- -# SRCHOST = $SRCHOST -# email = $EMAIL -# pass = $PASS -# pass2 = $PASS2 -# test = $TEST -# --- - -/root/imapsync/imapsync --host1 $SRCHOST --user1 $EMAIL --password1 '$PASS' --ssl1 --host2 localhost --user2 $EMAIL --password2 '$PASS2' $TESTOPT --addheader --automap \"\$@\" - -exit; -# --- -" > accounts/$EMAIL - -chmod a=rwx accounts/$EMAIL - -if [[ $TEST -eq 0 ]]; then - exit 0; -fi - -accounts/$EMAIL -RET=$? - -if [ $RET -eq 0 ]; then - # echo "./create-mail-sync.sh $EMAIL $PASS $PASS2 $TEST" - sed -i "s/--justlogin//g" accounts/$EMAIL - echo "--- OK! ---" - echo "./create-mail-sync.sh '$SRCHOST' '$EMAIL' '$PASS' '$PASS2' $TEST" >> accounts.log -else - echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" - echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" - echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" - rm accounts/$EMAIL -fi -exit $RET; From 56484d4b01561ff79c30556f881bad65c006547c Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:01:02 +0100 Subject: [PATCH 038/583] Create run-all.sh --- src/deb/for-download/tools/imapsync/run-all.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/deb/for-download/tools/imapsync/run-all.sh diff --git a/src/deb/for-download/tools/imapsync/run-all.sh b/src/deb/for-download/tools/imapsync/run-all.sh new file mode 100644 index 00000000..fa535927 --- /dev/null +++ b/src/deb/for-download/tools/imapsync/run-all.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +cd accounts + +for name in * +do + if [ -f "$name" ]; then + ./$name + fi +done From f5d3d97dfbf0a52647ebd4470df905950f65d9e1 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 9 Nov 2022 19:01:33 +0100 Subject: [PATCH 039/583] Add files via upload --- .../tools/imapsync/create-mail-sync.sh | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/deb/for-download/tools/imapsync/create-mail-sync.sh diff --git a/src/deb/for-download/tools/imapsync/create-mail-sync.sh b/src/deb/for-download/tools/imapsync/create-mail-sync.sh new file mode 100644 index 00000000..e325754e --- /dev/null +++ b/src/deb/for-download/tools/imapsync/create-mail-sync.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +################################## +# usage: ./create-mail-sync.sh SRCHOST EMAIL PASSWORD-ON-REMOTE-SERVER [PASSWORD-ON-THIS-SERVER] [TEST] +################################## + +if [ $# -lt 3 ]; then + echo "usage: ./create-mail-sync.sh SRCHOST EMAIL PASSWORD-ON-REMOTE-SERVER [PASSWORD-ON-THIS-SERVER] [TEST]" + exit 1 +fi + +if [ $# -eq 3 ]; then +SRCHOST=$1 +EMAIL=$2 +PASS=$3 +PASS2=$3 +TEST=1 +fi + +if [ $# -eq 4 ]; then +SRCHOST=$1 +EMAIL=$2 +PASS=$3 +PASS2=$4 +TEST=1 +fi + +if [ $# -eq 5 ]; then +SRCHOST=$1 +EMAIL=$2 +PASS=$3 +PASS2=$4 +TEST=$5 +fi + +TESTOPT="" +if [[ $TEST -eq 1 ]]; then + TESTOPT="--justlogin" +fi + +if [ ! -d "accounts" ]; then + mkdir accounts +fi +if [ -f "accounts/$EMAIL" ]; then + echo "********* $EMAIL ALREADY EXISTS !!! ************" + exit 1; + exit +fi + +echo "Writing to: accounts/$EMAIL" +echo "#!/bin/bash + +# --- +# SRCHOST = $SRCHOST +# email = $EMAIL +# pass = $PASS +# pass2 = $PASS2 +# test = $TEST +# --- + +/root/imapsync/imapsync --host1 $SRCHOST --user1 $EMAIL --password1 '$PASS' --ssl1 --host2 localhost --user2 $EMAIL --password2 '$PASS2' $TESTOPT --addheader --automap \"\$@\" + +exit; +# --- +" > accounts/$EMAIL + +chmod a=rwx accounts/$EMAIL + +if [[ $TEST -eq 0 ]]; then + exit 0; +fi + +accounts/$EMAIL +RET=$? + +if [ $RET -eq 0 ]; then + # echo "./create-mail-sync.sh $EMAIL $PASS $PASS2 $TEST" + sed -i "s/--justlogin//g" accounts/$EMAIL + echo "--- OK! ---" + echo "./create-mail-sync.sh '$SRCHOST' '$EMAIL' '$PASS' '$PASS2' $TEST" >> accounts.log +else + echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" + echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" + echo "********* $EMAIL ERROR !!! [ret: $RET ] ************" + rm accounts/$EMAIL +fi +exit $RET; From 06ebea1a8b7c79f68a3fe228a4d77782d2da9a33 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Mon, 14 Nov 2022 14:45:59 +0100 Subject: [PATCH 040/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index f9b562a9..d853114a 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -35,6 +35,6 @@ if [ -d "/etc/php" ]; then fi if [ -f "/etc/apache2/mods-enabled/mpm_event.conf" ]; then - sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 600#g" /etc/apache2/mods-enabled/mpm_event.conf + sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 400#g" /etc/apache2/mods-enabled/mpm_event.conf systemctl restart apache2 fi From e134202224757c32f97fb817ba03ee5105104432 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 22 Nov 2022 09:07:25 +0100 Subject: [PATCH 041/583] Skipping forward proxy while renewing LetsEncrypt --- bin/v-update-letsencrypt-ssl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/v-update-letsencrypt-ssl b/bin/v-update-letsencrypt-ssl index ac3e2eda..eacbfa05 100755 --- a/bin/v-update-letsencrypt-ssl +++ b/bin/v-update-letsencrypt-ssl @@ -36,6 +36,12 @@ for user in $($BIN/v-list-users plain |cut -f 1); do limit_check=1 fail_counter=$(get_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT') + proxy_tpl=$(/usr/local/vesta/bin/v-list-web-domain "$user" "$domain" "shell" | grep 'PROXY:' | cut -d ' ' -f11-) + if [ "$proxy_tpl" = "forward" ]; then + echo "[$(date)] : $domain is using forward proxy, skipping" >> /usr/local/vesta/log/letsencrypt_cron.log + continue; + fi + if [[ "$hostname" = "$domain" ]]; then if [[ "$fail_counter" -eq 7 ]]; then limit_check=0 From 8563303fbef5975ea2ad6242ed005902de44dbbf Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:25:56 +0100 Subject: [PATCH 042/583] Rollback of previous commit --- bin/v-update-letsencrypt-ssl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bin/v-update-letsencrypt-ssl b/bin/v-update-letsencrypt-ssl index eacbfa05..819e9846 100755 --- a/bin/v-update-letsencrypt-ssl +++ b/bin/v-update-letsencrypt-ssl @@ -36,11 +36,11 @@ for user in $($BIN/v-list-users plain |cut -f 1); do limit_check=1 fail_counter=$(get_web_counter "$user" "$domain" 'LETSENCRYPT_FAIL_COUNT') - proxy_tpl=$(/usr/local/vesta/bin/v-list-web-domain "$user" "$domain" "shell" | grep 'PROXY:' | cut -d ' ' -f11-) - if [ "$proxy_tpl" = "forward" ]; then - echo "[$(date)] : $domain is using forward proxy, skipping" >> /usr/local/vesta/log/letsencrypt_cron.log - continue; - fi + # proxy_tpl=$(/usr/local/vesta/bin/v-list-web-domain "$user" "$domain" "shell" | grep 'PROXY:' | cut -d ' ' -f11-) + # if [ "$proxy_tpl" = "forward" ]; then + # echo "[$(date)] : $domain is using forward proxy, skipping" >> /usr/local/vesta/log/letsencrypt_cron.log + # continue; + # fi if [[ "$hostname" = "$domain" ]]; then if [[ "$fail_counter" -eq 7 ]]; then From 8e34db9a712be57fc81d05c9abc2bd137a88faf7 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:28:32 +0100 Subject: [PATCH 043/583] Replacing utf8mb4_0900_ai_ci --- bin/v-import-cpanel-backup | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/v-import-cpanel-backup b/bin/v-import-cpanel-backup index a4d40226..d8fdac11 100644 --- a/bin/v-import-cpanel-backup +++ b/bin/v-import-cpanel-backup @@ -157,6 +157,7 @@ for sk_dbr in $sk_db_list echo " Create and restore ${sk_dbr} " mysql < mysql/${sk_dbr}.create sed -i "s/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g" mysql/${sk_dbr}.sql + sed -i "s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g" mysql/${sk_dbr}.sql mysql ${sk_dbr} < mysql/${sk_dbr}.sql else echo "Error: Cant restore database $sk_dbr alredy exists in mysql server" From 93b4b1e466aac7ad0ebea41b3132279757045049 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 26 Nov 2022 15:37:51 +0100 Subject: [PATCH 044/583] Update v-fix-user-permissions --- bin/v-fix-user-permissions | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bin/v-fix-user-permissions b/bin/v-fix-user-permissions index fa902ec3..ae798992 100644 --- a/bin/v-fix-user-permissions +++ b/bin/v-fix-user-permissions @@ -36,9 +36,15 @@ is_object_valid 'user' 'USER' "$user" find /home/$user/conf/mail/ -type d -exec chown Debian-exim:mail {} \; find /home/$user/conf/mail/*/ -type f -exec chown Debian-exim:mail {} \; find /home/$user/conf/mail/*/ -name "passwd" -type f -exec chown dovecot:mail {} \; + find /home/$user/mail/ -type d -exec chown $user:mail {} \; find /home/$user/mail/*/ -type d -exec chown $user:mail {} \; find /home/$user/mail/*/ -type f -exec chown $user:mail {} \; +find /home/$user/mail/*/ -type d -exec chmod u+rwx {} \; +find /home/$user/mail/*/ -type d -exec chmod g+rwx {} \; +find /home/$user/mail/*/ -type f -exec chmod u+rw {} \; +find /home/$user/mail/*/ -type f -exec chmod g+rw {} \; + find /home/$user/conf/dns/ -type f -exec chown root:bind {} \; find /home/$user/conf/ -type d -exec chown root:root {} \; From 343a4deb73bf1d0d7584e9428495880b695b6cda Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 26 Nov 2022 21:42:09 +0100 Subject: [PATCH 045/583] Additional fix for utf8mb4_0900_ai_ci --- bin/v-import-cpanel-backup | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/v-import-cpanel-backup b/bin/v-import-cpanel-backup index d8fdac11..02383018 100644 --- a/bin/v-import-cpanel-backup +++ b/bin/v-import-cpanel-backup @@ -155,6 +155,8 @@ for sk_dbr in $sk_db_list grep -w $sk_dbr server_dbs if [ $? == "1" ]; then echo " Create and restore ${sk_dbr} " + sed -i "s/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g" mysql/${sk_dbr}.create + sed -i "s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g" mysql/${sk_dbr}.create mysql < mysql/${sk_dbr}.create sed -i "s/utf8mb4_unicode_520_ci/utf8mb4_unicode_ci/g" mysql/${sk_dbr}.sql sed -i "s/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g" mysql/${sk_dbr}.sql From d0f5d1a355f67e3c7c0e772536b3a27ffd3f2f06 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 8 Dec 2022 14:13:42 +0100 Subject: [PATCH 046/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index d853114a..88534bfd 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -35,6 +35,6 @@ if [ -d "/etc/php" ]; then fi if [ -f "/etc/apache2/mods-enabled/mpm_event.conf" ]; then - sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 400#g" /etc/apache2/mods-enabled/mpm_event.conf + sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 200#g" /etc/apache2/mods-enabled/mpm_event.conf systemctl restart apache2 fi From cab6df399a781727f31102fc56729c341248e6a7 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 29 Dec 2022 12:57:17 +0100 Subject: [PATCH 047/583] Create v-move-folder-and-make-symlink --- bin/v-move-folder-and-make-symlink | 85 ++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 bin/v-move-folder-and-make-symlink diff --git a/bin/v-move-folder-and-make-symlink b/bin/v-move-folder-and-make-symlink new file mode 100644 index 00000000..f543ff65 --- /dev/null +++ b/bin/v-move-folder-and-make-symlink @@ -0,0 +1,85 @@ +#!/bin/bash + +# info: +# This script will move a folder to the new destination and make a symlink from the old path to the new destination + +# options: FROMFOLDER TOFOLDER + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ] && [ "$whoami" != "admin" ] ; then + echo "You must be root or admin to execute this script"; + exit 1; +fi + +# Argument definition +FROMFOLDER=$1 +TOFOLDER=$2 + +# Includes +source $VESTA/func/main.sh + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +# Trimming the ending slash, just in case +FROMFOLDER=$(echo "$FROMFOLDER" | sed 's:/*$::') +TOFOLDER=$(echo "$TOFOLDER" | sed 's:/*$::') + +if [ ! -d "$FROMFOLDER" ]; then + echo "Folder $FROMFOLDER does not exists, aborting" + exit 1 +fi + +USER=$(stat -c '%U' "$FROMFOLDER") +GROUP=$(stat -c '%G' "$FROMFOLDER") +PARENTFOLDER=$(dirname "$TOFOLDER") + +if [ ! -d "$PARENTFOLDER" ]; then + PUSER=$(stat -c '%U' "$PARENTFOLDER") + PGROUP=$(stat -c '%G' "$PARENTFOLDER") + echo "= Creating parent folder..." + mkdir -p $PARENTFOLDER + chown $PUSER:$PGROUP $PARENTFOLDER +fi + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +rsync -a "$FROMFOLDER/" "$TOFOLDER/" +# with slashes on the end of the path of both folders +if [ "$?" -ne 0 ]; then + echo "Error happened, aborting" + exit 1 +fi + +if [ "$FROMFOLDER" = "/home/$USER" ] && [ -d "$FROMFOLDER/conf" ]; then + # if we are moving myVesta home folder, we must remove immutable attribute from conf/ files + chattr -R -i "$FROMFOLDER/conf/" > /dev/null 2>&1 + # with slashes on the end of the path of the folder +fi + +rm -rf "$FROMFOLDER" +# without slash on the end of the path of the folder + +ln -s "$TOFOLDER" "$FROMFOLDER" +# without slashes on the end of the path of both folders + +chown -h $USER:$GROUP $FROMFOLDER +# without slash on the end of the path of the folder + +#----------------------------------------------------------# +# Log and print result # +#----------------------------------------------------------# + +echo "Done, folder $FROMFOLDER moved to $TOFOLDER and symlinked" + +# Logging +log_event "$OK" "$ARGUMENTS" + +exit From 5b0056b193a32f312cb3d4c93b8e751a7e4f901c Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 29 Dec 2022 13:18:44 +0100 Subject: [PATCH 048/583] Update v-move-folder-and-make-symlink --- bin/v-move-folder-and-make-symlink | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/v-move-folder-and-make-symlink b/bin/v-move-folder-and-make-symlink index f543ff65..b17f6465 100644 --- a/bin/v-move-folder-and-make-symlink +++ b/bin/v-move-folder-and-make-symlink @@ -43,8 +43,8 @@ if [ ! -d "$PARENTFOLDER" ]; then PUSER=$(stat -c '%U' "$PARENTFOLDER") PGROUP=$(stat -c '%G' "$PARENTFOLDER") echo "= Creating parent folder..." - mkdir -p $PARENTFOLDER - chown $PUSER:$PGROUP $PARENTFOLDER + mkdir -p "$PARENTFOLDER" + chown $PUSER:$PGROUP "$PARENTFOLDER" fi #----------------------------------------------------------# From 75e7d7c5e04feeb40d5ecea15eb26f852215f221 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 29 Dec 2022 13:44:40 +0100 Subject: [PATCH 049/583] Update v-move-folder-and-make-symlink --- bin/v-move-folder-and-make-symlink | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bin/v-move-folder-and-make-symlink b/bin/v-move-folder-and-make-symlink index b17f6465..6cedcbe0 100644 --- a/bin/v-move-folder-and-make-symlink +++ b/bin/v-move-folder-and-make-symlink @@ -35,6 +35,16 @@ if [ ! -d "$FROMFOLDER" ]; then exit 1 fi +if [ -L "$FROMFOLDER" ]; then + echo "Folder $FROMFOLDER is already symlink, aborting" + exit 1 +fi + +if [ -d "$TOFOLDER" ]; then + echo "Folder $TOFOLDER already exists, aborting" + exit 1 +fi + USER=$(stat -c '%U' "$FROMFOLDER") GROUP=$(stat -c '%G' "$FROMFOLDER") PARENTFOLDER=$(dirname "$TOFOLDER") From 0db48dcdaadd2e03469a9b67dea43e65de3bdb31 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 29 Dec 2022 15:12:58 +0100 Subject: [PATCH 050/583] Update v-move-folder-and-make-symlink --- bin/v-move-folder-and-make-symlink | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/v-move-folder-and-make-symlink b/bin/v-move-folder-and-make-symlink index 6cedcbe0..81561a97 100644 --- a/bin/v-move-folder-and-make-symlink +++ b/bin/v-move-folder-and-make-symlink @@ -45,6 +45,11 @@ if [ -d "$TOFOLDER" ]; then exit 1 fi +if [ -L "$TOFOLDER" ]; then + echo "Folder $TOFOLDER already exists (as symlink), aborting" + exit 1 +fi + USER=$(stat -c '%U' "$FROMFOLDER") GROUP=$(stat -c '%G' "$FROMFOLDER") PARENTFOLDER=$(dirname "$TOFOLDER") From fab56e1b708a00bdfa9a1b3d88d8ef1aba3631b3 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 12 Jan 2023 17:59:49 +0100 Subject: [PATCH 051/583] Another attempt to fix wildcard letsencrypt --- bin/v-add-letsencrypt-domain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 2940bbb6..faa51f8c 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -200,7 +200,7 @@ for auth in $authz; do echo "[$(date)] : EXIT=DNS _acme-challenge record wasn't created" >> /usr/local/vesta/log/letsencrypt.log fi check_result $exitstatus "DNS _acme-challenge record wasn't created" - $BIN/v-restart-dns + systemctl restart bind9 else if [ "$WEB_SYSTEM" = 'nginx' ] || [ ! -z "$PROXY_SYSTEM" ]; then if [ -f "/usr/local/vesta/web/inc/nginx_proxy" ]; then From 171a42a65ebfcd4d8055a2686ccd04d8cc9600a3 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 14 Jan 2023 15:49:46 +0100 Subject: [PATCH 052/583] Update vst-install-debian.sh --- install/vst-install-debian.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index aa1d043c..5ca3690e 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -1627,6 +1627,10 @@ echo "== Get main ip" ip=$(ip addr|grep 'inet '|grep global|head -n1|awk '{print $2}'|cut -f1 -d/) local_ip=$ip +echo "== Writing '$ip $servername' to /etc/hosts" +sed -i "/$servername/d" /etc/hosts +echo "$ip $servername" >> /etc/hosts + # Firewall configuration if [ "$iptables" = 'yes' ]; then echo "== Firewall configuration" From d0a77cf3f652a3dc9cb9b11b26b499f9b386f099 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 14 Jan 2023 16:44:27 +0100 Subject: [PATCH 053/583] Writing '$ip $servername' to /etc/hosts --- install/vst-install-debian.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 5ca3690e..ffb036dd 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -524,6 +524,8 @@ if ! [[ "$servername" =~ ^${mask1}${mask2}$ ]]; then fi echo "127.0.0.1 $servername" >> /etc/hosts fi +echo "$servername" > /etc/hostname +hostname $servername # Set email if it wasn't set if [ -z "$email" ]; then @@ -1627,9 +1629,15 @@ echo "== Get main ip" ip=$(ip addr|grep 'inet '|grep global|head -n1|awk '{print $2}'|cut -f1 -d/) local_ip=$ip +# Writing '$ip $servername' to /etc/hosts echo "== Writing '$ip $servername' to /etc/hosts" sed -i "/$servername/d" /etc/hosts -echo "$ip $servername" >> /etc/hosts +subdomain=$(echo "$servername" | cut -d . -f-1) +if [ "servername" != "$subdomain" ]; then + echo "$ip $servername $subdomain" >> /etc/hosts +else + echo "$ip $servername" >> /etc/hosts +fi # Firewall configuration if [ "$iptables" = 'yes' ]; then From ae81474f8e902821ede90216124a8c54a9994d90 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 14 Jan 2023 17:15:36 +0100 Subject: [PATCH 054/583] Update vst-install-debian.sh --- install/vst-install-debian.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index ffb036dd..b5fda479 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -1633,7 +1633,7 @@ local_ip=$ip echo "== Writing '$ip $servername' to /etc/hosts" sed -i "/$servername/d" /etc/hosts subdomain=$(echo "$servername" | cut -d . -f-1) -if [ "servername" != "$subdomain" ]; then +if [ "$servername" != "$subdomain" ]; then echo "$ip $servername $subdomain" >> /etc/hosts else echo "$ip $servername" >> /etc/hosts From 2df6bfbb0bea7fa5ad7871c51da112260d94b55d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 15 Jan 2023 17:37:32 +0100 Subject: [PATCH 055/583] New roundcube version --- src/deb/for-download/tools/install-new-roundcube.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/install-new-roundcube.sh b/src/deb/for-download/tools/install-new-roundcube.sh index a746ff59..6311563e 100644 --- a/src/deb/for-download/tools/install-new-roundcube.sh +++ b/src/deb/for-download/tools/install-new-roundcube.sh @@ -3,7 +3,7 @@ USER='webmail' DOMAIN='' # enter domain or subdomain -VERSION='1.5.2' +VERSION='1.6.0' DOWNLOAD="https://github.com/roundcube/roundcubemail/releases/download/$VERSION/roundcubemail-$VERSION-complete.tar.gz" LOGINMESSAGE1='Click here for NEW Webmail' From 479805c52cedc5e310704bc7e93c98ed5c0e9c60 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 15 Jan 2023 22:01:43 +0100 Subject: [PATCH 056/583] Cleaning fail2ban database --- bin/v-clean-garbage | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index 62bb39c8..15b1a5ae 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -34,4 +34,15 @@ find /home/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} find /home/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; find /home/ -type f -name "*.log" -exec truncate -s 0 {} \; +fail2ban_running=$(/usr/local/vesta/bin/v-list-sys-services | grep 'fail2ban' | grep -c 'running') +if [ $fail2ban_running -eq 1 ]; then + systemctl stop fail2ban +fi +if [ -f "/var/lib/fail2ban/fail2ban.sqlite3" ]; then + rm /var/lib/fail2ban/fail2ban.sqlite3 +fi +if [ $fail2ban_running -eq 1 ]; then + systemctl start fail2ban +fi + echo "=== Garbage cleaned ===" From caee59c0152431ca15b03d6a806ac99877200d5c Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 17:43:42 +0100 Subject: [PATCH 057/583] Update v-install-wordpress --- bin/v-install-wordpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index bdf56f72..ba69c22d 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -1,6 +1,6 @@ #!/bin/bash # info: WordPress installer in one command line -# options: DOMAIN USER +# options: DOMAIN # # Credits to Luka Paunović for wp-cli implememtation From efc2be9f717a049da63527ed5a8994cd8a3b5266 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 17:55:44 +0100 Subject: [PATCH 058/583] Lock WordPress files if they are potentially infected --- bin/v-lock-wordpress | 70 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 bin/v-lock-wordpress diff --git a/bin/v-lock-wordpress b/bin/v-lock-wordpress new file mode 100644 index 00000000..e722abaa --- /dev/null +++ b/bin/v-lock-wordpress @@ -0,0 +1,70 @@ +#!/bin/bash +# info: Lock WordPress files if they are potentially infected (somewhere) by PHP malware, in order to stop further infection +# options: DOMAIN + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ]; then + echo "You must be root to execute this script" + exit 1 +fi + +# Argument definition +domain=$1 + +user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +if [ -z "$user" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '1' "$#" 'DOMAIN' +is_format_valid 'domain' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" + +if [ ! -d "/home/$user" ]; then + echo "User doesn't exist"; + exit 1; +fi + +if [ ! -d "/home/$user/web/$domain/public_html" ]; then + echo "Domain doesn't exist"; + exit 1; +fi + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +cd /home/$user/web/$domain/public_html + +# lock files +chown -R www-data:www-data public_html/ + +# unlock /wp-content/uploads/ for uploading +chown -R $user:$user public_html/wp-content/uploads/ + +# block .php execution inside /wp-content/uploads/ +cat <public_html/wp-content/uploads/.htaccess +RewriteEngine on +RewriteRule ^.*\.(?:php[1-6]?|pht|phtml?)$ - [NC,F] +EOF + +chown root:root public_html/wp-content/uploads/.htaccess + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +echo "v-lock-wordpress: Done." + +log_event "$OK" "$ARGUMENTS" + +exit From c9c29ce7a95cdf3cd73325a446f495db8ed913cb Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:02:56 +0100 Subject: [PATCH 059/583] Create v-unlock-wordpress --- bin/v-unlock-wordpress | 67 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 bin/v-unlock-wordpress diff --git a/bin/v-unlock-wordpress b/bin/v-unlock-wordpress new file mode 100644 index 00000000..faadbdde --- /dev/null +++ b/bin/v-unlock-wordpress @@ -0,0 +1,67 @@ +#!/bin/bash +# info: Unlock previously locked WordPress files if they were potentially infected (somewhere) by PHP malware, in order to stop further infection +# options: DOMAIN + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ]; then + echo "You must be root to execute this script" + exit 1 +fi + +# Importing system environment +source /etc/profile + +# Includes +source /usr/local/vesta/func/main.sh + +# Argument definition +domain=$1 + +user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +if [ -z "$user" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '1' "$#" 'DOMAIN' +is_format_valid 'domain' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" + +if [ ! -d "/home/$user" ]; then + echo "User doesn't exist"; + exit 1; +fi + +if [ ! -d "/home/$user/web/$domain/public_html" ]; then + echo "Domain doesn't exist"; + exit 1; +fi + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +cd /home/$user/web/$domain/public_html + +# lock files +chown -R $user:$user public_html/ + +rm public_html/wp-content/uploads/.htaccess + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +echo "v-unlock-wordpress: Done." + +log_event "$OK" "$ARGUMENTS" + +exit From 8b756993777b792fd83bdaf8b65bebe5051c98a6 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:03:40 +0100 Subject: [PATCH 060/583] Update v-lock-wordpress --- bin/v-lock-wordpress | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/v-lock-wordpress b/bin/v-lock-wordpress index e722abaa..e56f42eb 100644 --- a/bin/v-lock-wordpress +++ b/bin/v-lock-wordpress @@ -12,6 +12,12 @@ if [ "$whoami" != "root" ]; then exit 1 fi +# Importing system environment +source /etc/profile + +# Includes +source /usr/local/vesta/func/main.sh + # Argument definition domain=$1 @@ -43,7 +49,7 @@ fi # Action # #----------------------------------------------------------# -cd /home/$user/web/$domain/public_html +cd /home/$user/web/$domain # lock files chown -R www-data:www-data public_html/ From f397454364a17e7bead2bc1dfd281ac4096e65ce Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:04:45 +0100 Subject: [PATCH 061/583] Update v-install-wordpress --- bin/v-install-wordpress | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index ba69c22d..08abb8a3 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -14,14 +14,6 @@ if [ "$whoami" != "root" ]; then exit 1 fi -# Argument definition -domain=$1 - -user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) -if [ -z "$user" ]; then - check_result $E_NOTEXIST "domain $domain doesn't exist" -fi - # Importing system environment source /etc/profile @@ -29,6 +21,13 @@ source /etc/profile source /usr/local/vesta/func/main.sh source /usr/local/vesta/func/db.sh +# Argument definition +domain=$1 + +user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +if [ -z "$user" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi if [[ $(is_package_full 'DATABASES') = *reached* ]]; then echo "Database limit is reached. Delete database or upgrade user package." From 0fc6fd5fa54f22a504a1dfb06d7646a8bde3de6d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:05:56 +0100 Subject: [PATCH 062/583] Update v-install-wordpress --- bin/v-install-wordpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index 08abb8a3..e0509fed 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -1,6 +1,6 @@ #!/bin/bash # info: WordPress installer in one command line -# options: DOMAIN +# options: DOMAIN [DB_NAME] [EMAIL] # # Credits to Luka Paunović for wp-cli implememtation From a65f008f9a9a5f3c5f66d3f392ad0fec9f570ed6 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:06:44 +0100 Subject: [PATCH 063/583] Update v-unlock-wordpress --- bin/v-unlock-wordpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-unlock-wordpress b/bin/v-unlock-wordpress index faadbdde..f54348a1 100644 --- a/bin/v-unlock-wordpress +++ b/bin/v-unlock-wordpress @@ -1,5 +1,5 @@ #!/bin/bash -# info: Unlock previously locked WordPress files if they were potentially infected (somewhere) by PHP malware, in order to stop further infection +# info: Unlock previously locked WordPress files if they were potentially infected (somewhere) by PHP malware # options: DOMAIN #----------------------------------------------------------# From 0a78d937ddbf8ac03551ee2d5ce2a13bf17b1141 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 19 Jan 2023 18:07:43 +0100 Subject: [PATCH 064/583] Update v-unlock-wordpress --- bin/v-unlock-wordpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-unlock-wordpress b/bin/v-unlock-wordpress index f54348a1..22b891b1 100644 --- a/bin/v-unlock-wordpress +++ b/bin/v-unlock-wordpress @@ -49,7 +49,7 @@ fi # Action # #----------------------------------------------------------# -cd /home/$user/web/$domain/public_html +cd /home/$user/web/$domain # lock files chown -R $user:$user public_html/ From ee5df22828c7acc7614834d1fe588cf887fc2cf5 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 20 Jan 2023 13:06:34 +0100 Subject: [PATCH 065/583] Update v-lock-wordpress --- bin/v-lock-wordpress | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/v-lock-wordpress b/bin/v-lock-wordpress index e56f42eb..156d1a5e 100644 --- a/bin/v-lock-wordpress +++ b/bin/v-lock-wordpress @@ -15,13 +15,15 @@ fi # Importing system environment source /etc/profile -# Includes -source /usr/local/vesta/func/main.sh - # Argument definition domain=$1 user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +USER=$user + +# Includes +source /usr/local/vesta/func/main.sh + if [ -z "$user" ]; then check_result $E_NOTEXIST "domain $domain doesn't exist" fi From bdfe17490feab7b1b78fd98a239fe2ec603a3ae9 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 20 Jan 2023 13:07:16 +0100 Subject: [PATCH 066/583] Update v-unlock-wordpress --- bin/v-unlock-wordpress | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bin/v-unlock-wordpress b/bin/v-unlock-wordpress index 22b891b1..1e2cccc6 100644 --- a/bin/v-unlock-wordpress +++ b/bin/v-unlock-wordpress @@ -15,13 +15,15 @@ fi # Importing system environment source /etc/profile -# Includes -source /usr/local/vesta/func/main.sh - # Argument definition domain=$1 user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +USER=$user + +# Includes +source /usr/local/vesta/func/main.sh + if [ -z "$user" ]; then check_result $E_NOTEXIST "domain $domain doesn't exist" fi From 7cdd65baf2b7ebab874082a5fd2507133d56e6fa Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 20 Jan 2023 13:09:23 +0100 Subject: [PATCH 067/583] Update v-install-wordpress --- bin/v-install-wordpress | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index e0509fed..91bbdf0a 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -17,14 +17,16 @@ fi # Importing system environment source /etc/profile -# Includes -source /usr/local/vesta/func/main.sh -source /usr/local/vesta/func/db.sh - # Argument definition domain=$1 user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +USER=$user + +# Includes +source /usr/local/vesta/func/main.sh +source /usr/local/vesta/func/db.sh + if [ -z "$user" ]; then check_result $E_NOTEXIST "domain $domain doesn't exist" fi From cdbcf84b2cafbb526213fb5b288d1573b6bde9cd Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 22 Jan 2023 16:35:59 +0100 Subject: [PATCH 068/583] unlock /wp-content/cache/ for caching --- bin/v-lock-wordpress | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/bin/v-lock-wordpress b/bin/v-lock-wordpress index 156d1a5e..ea7b2978 100644 --- a/bin/v-lock-wordpress +++ b/bin/v-lock-wordpress @@ -28,6 +28,18 @@ if [ -z "$user" ]; then check_result $E_NOTEXIST "domain $domain doesn't exist" fi +unlock_folder() { + chown -R $user:$user $1/ + + # block .php execution inside folder + cat <$1/.htaccess +RewriteEngine on +RewriteRule ^.*\.(?:php[1-6]?|pht|phtml?)$ - [NC,F] +EOF + + chown root:root $1/.htaccess +} + #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# @@ -57,15 +69,14 @@ cd /home/$user/web/$domain chown -R www-data:www-data public_html/ # unlock /wp-content/uploads/ for uploading -chown -R $user:$user public_html/wp-content/uploads/ +if [ -d "/home/$user/web/$domain/public_html/wp-content/uploads" ]; then + unlock_folder "public_html/wp-content/uploads" +fi -# block .php execution inside /wp-content/uploads/ -cat <public_html/wp-content/uploads/.htaccess -RewriteEngine on -RewriteRule ^.*\.(?:php[1-6]?|pht|phtml?)$ - [NC,F] -EOF - -chown root:root public_html/wp-content/uploads/.htaccess +# unlock /wp-content/cache/ for caching +if [ -d "/home/$user/web/$domain/public_html/wp-content/cache" ]; then + unlock_folder "public_html/wp-content/cache" +fi #----------------------------------------------------------# # Vesta # From a39b192d308a8ea916a1d2ab72409883790ffe27 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Mon, 23 Jan 2023 12:47:49 +0100 Subject: [PATCH 069/583] v-lock-wordpress - set correct chmod just in case --- bin/v-lock-wordpress | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bin/v-lock-wordpress b/bin/v-lock-wordpress index ea7b2978..36852781 100644 --- a/bin/v-lock-wordpress +++ b/bin/v-lock-wordpress @@ -68,6 +68,10 @@ cd /home/$user/web/$domain # lock files chown -R www-data:www-data public_html/ +# set correct chmod just in case +find public_html/ -type d -exec chmod 755 {} + +find public_html/ -type f -exec chmod 644 {} + + # unlock /wp-content/uploads/ for uploading if [ -d "/home/$user/web/$domain/public_html/wp-content/uploads" ]; then unlock_folder "public_html/wp-content/uploads" From 8409e19fac8df17eb719da45aa695181cc808946 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Mon, 30 Jan 2023 13:42:03 +0100 Subject: [PATCH 070/583] Added install-rocket-nginx.sh and the following nginx templates --- .../tools/install-rocket-nginx.sh | 23 +++++++++++ .../wprocket-force-htpps.stpl | 41 +++++++++++++++++++ .../wprocket-force-htpps.tpl | 9 ++++ .../wprocket-hosting.stpl | 39 ++++++++++++++++++ .../wprocket-hosting.tpl | 36 ++++++++++++++++ 5 files changed, 148 insertions(+) create mode 100644 src/deb/for-download/tools/install-rocket-nginx.sh create mode 100644 src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl create mode 100644 src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl create mode 100644 src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl create mode 100644 src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl diff --git a/src/deb/for-download/tools/install-rocket-nginx.sh b/src/deb/for-download/tools/install-rocket-nginx.sh new file mode 100644 index 00000000..0fb5d86d --- /dev/null +++ b/src/deb/for-download/tools/install-rocket-nginx.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +echo "Updating apt, please wait..." +apt-get update > /dev/null 2>&1 + +apt-get -y install git > /dev/null 2>&1 + +if [ ! -d "/etc/nginx/rocket-nginx" ]; then + cd /etc/nginx + git clone https://github.com/satellitewp/rocket-nginx.git +else + cd /etc/nginx/rocket-nginx + git pull + cd .. +fi + +cd rocket-nginx +cp rocket-nginx.ini.disabled rocket-nginx.ini +php rocket-parser.php +wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-htpps.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-htpps.tpl +wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-htpps.stpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-htpps.stpl +wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-hosting.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-hosting.tpl +wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-hosting.stpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-hosting.stpl diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl new file mode 100644 index 00000000..05ba994a --- /dev/null +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl @@ -0,0 +1,41 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; + include rocket-nginx/conf.d/default.conf; +} diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl new file mode 100644 index 00000000..0c877632 --- /dev/null +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl @@ -0,0 +1,9 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://%domain_idn%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +include rocket-nginx/conf.d/default.conf; +} diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl new file mode 100644 index 00000000..2610efc4 --- /dev/null +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/snginx.%domain%.conf*; + include rocket-nginx/conf.d/default.conf; +} diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl new file mode 100644 index 00000000..521348ae --- /dev/null +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl @@ -0,0 +1,36 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass http://%ip%:%web_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %docroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass http://%ip%:%web_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/nginx.%domain%.conf*; + include rocket-nginx/conf.d/default.conf; +} From ed85dfdac71400c848cbf927ec3bd191b0cde3c3 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 15:03:05 +0100 Subject: [PATCH 071/583] Support for PHP 8.2 --- .../for-download/tools/multi-php-install.sh | 51 +++++++++++++++---- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/src/deb/for-download/tools/multi-php-install.sh b/src/deb/for-download/tools/multi-php-install.sh index e847df17..58ec502d 100644 --- a/src/deb/for-download/tools/multi-php-install.sh +++ b/src/deb/for-download/tools/multi-php-install.sh @@ -12,6 +12,7 @@ inst_73=0 inst_74=0 inst_80=0 inst_81=0 +inst_82=0 ####################################################################### @@ -52,8 +53,11 @@ fi if [ $# -gt 8 ]; then inst_81=$9 fi +if [ $# -gt 9 ]; then + inst_82=$10 +fi -if [ $inst_56 -eq 1 ] || [ $inst_70 -eq 1 ] || [ $inst_71 -eq 1 ] || [ $inst_72 -eq 1 ] || [ $inst_73 -eq 1 ] || [ $inst_74 -eq 1 ] || [ $inst_80 -eq 1 ] || [ $inst_81 -eq 1 ]; then +if [ $inst_56 -eq 1 ] || [ $inst_70 -eq 1 ] || [ $inst_71 -eq 1 ] || [ $inst_72 -eq 1 ] || [ $inst_73 -eq 1 ] || [ $inst_74 -eq 1 ] || [ $inst_80 -eq 1 ] || [ $inst_81 -eq 1 ] || [ $inst_82 -eq 1 ]; then inst_repo=1 fi @@ -82,6 +86,7 @@ echo "inst_73=$inst_73" echo "inst_74=$inst_74" echo "inst_80=$inst_80" echo "inst_81=$inst_81" +echo "inst_82=$inst_82" echo "wait_to_press_enter=$wait_to_press_enter" press_enter "=== Press enter to continue ===============================================================================" @@ -115,7 +120,7 @@ service apache2 restart if [ "$inst_56" -eq 1 ]; then press_enter "=== Press enter to install PHP 5.6 ===============================================================================" - apt -y install php5.6-mbstring php5.6-bcmath php5.6-cli php5.6-curl php5.6-fpm php5.6-gd php5.6-intl php5.6-mcrypt php5.6-mysql php5.6-soap php5.6-xml php5.6-zip php5.6-memcache php5.6-memcached + apt -y install php5.6-mbstring php5.6-bcmath php5.6-cli php5.6-curl php5.6-fpm php5.6-gd php5.6-intl php5.6-mcrypt php5.6-mysql php5.6-soap php5.6-xml php5.6-zip php5.6-memcache php5.6-memcached php5.6-imagick update-rc.d php5.6-fpm defaults a2enconf php5.6-fpm systemctl restart apache2 @@ -134,7 +139,7 @@ fi if [ "$inst_70" -eq 1 ]; then press_enter "=== Press enter to install PHP 7.0 ===============================================================================" - apt -y install php7.0-mbstring php7.0-bcmath php7.0-cli php7.0-curl php7.0-fpm php7.0-gd php7.0-intl php7.0-mcrypt php7.0-mysql php7.0-soap php7.0-xml php7.0-zip php7.0-memcache php7.0-memcached + apt -y install php7.0-mbstring php7.0-bcmath php7.0-cli php7.0-curl php7.0-fpm php7.0-gd php7.0-intl php7.0-mcrypt php7.0-mysql php7.0-soap php7.0-xml php7.0-zip php7.0-memcache php7.0-memcached php7.0-imagick update-rc.d php7.0-fpm defaults a2enconf php7.0-fpm systemctl restart apache2 @@ -158,7 +163,7 @@ fi if [ "$inst_71" -eq 1 ]; then press_enter "=== Press enter to install PHP 7.1 ===============================================================================" - apt -y install php7.1-mbstring php7.1-bcmath php7.1-cli php7.1-curl php7.1-fpm php7.1-gd php7.1-intl php7.1-mcrypt php7.1-mysql php7.1-soap php7.1-xml php7.1-zip php7.1-memcache php7.1-memcached + apt -y install php7.1-mbstring php7.1-bcmath php7.1-cli php7.1-curl php7.1-fpm php7.1-gd php7.1-intl php7.1-mcrypt php7.1-mysql php7.1-soap php7.1-xml php7.1-zip php7.1-memcache php7.1-memcached php7.1-imagick update-rc.d php7.1-fpm defaults a2enconf php7.1-fpm systemctl restart apache2 @@ -182,7 +187,7 @@ fi if [ "$inst_72" -eq 1 ]; then press_enter "=== Press enter to install PHP 7.2 ===============================================================================" - apt -y install php7.2-mbstring php7.2-bcmath php7.2-cli php7.2-curl php7.2-fpm php7.2-gd php7.2-intl php7.2-mysql php7.2-soap php7.2-xml php7.2-zip php7.2-memcache php7.2-memcached + apt -y install php7.2-mbstring php7.2-bcmath php7.2-cli php7.2-curl php7.2-fpm php7.2-gd php7.2-intl php7.2-mysql php7.2-soap php7.2-xml php7.2-zip php7.2-memcache php7.2-memcached php7.2-imagick update-rc.d php7.2-fpm defaults a2enconf php7.2-fpm systemctl restart apache2 @@ -206,7 +211,7 @@ fi if [ "$inst_73" -eq 1 ]; then press_enter "=== Press enter to install PHP 7.3 ===============================================================================" - apt -y install php7.3-mbstring php7.3-bcmath php7.3-cli php7.3-curl php7.3-fpm php7.3-gd php7.3-intl php7.3-mysql php7.3-soap php7.3-xml php7.3-zip php7.3-memcache php7.3-memcached + apt -y install php7.3-mbstring php7.3-bcmath php7.3-cli php7.3-curl php7.3-fpm php7.3-gd php7.3-intl php7.3-mysql php7.3-soap php7.3-xml php7.3-zip php7.3-memcache php7.3-memcached php7.3-imagick update-rc.d php7.3-fpm defaults a2enconf php7.3-fpm systemctl restart apache2 @@ -231,7 +236,7 @@ fi if [ "$inst_74" -eq 1 ]; then press_enter "=== Press enter to install PHP 7.4 ===============================================================================" - apt -y install php7.4-mbstring php7.4-bcmath php7.4-cli php7.4-curl php7.4-fpm php7.4-gd php7.4-intl php7.4-mysql php7.4-soap php7.4-xml php7.4-zip php7.4-memcache php7.4-memcached + apt -y install php7.4-mbstring php7.4-bcmath php7.4-cli php7.4-curl php7.4-fpm php7.4-gd php7.4-intl php7.4-mysql php7.4-soap php7.4-xml php7.4-zip php7.4-memcache php7.4-memcached php7.4-imagick update-rc.d php7.4-fpm defaults a2enconf php7.4-fpm apt-get -y remove libapache2-mod-php7.4 @@ -257,7 +262,7 @@ fi if [ "$inst_80" -eq 1 ]; then press_enter "=== Press enter to install PHP 8.0 ===============================================================================" - apt -y install php8.0-mbstring php8.0-bcmath php8.0-cli php8.0-curl php8.0-fpm php8.0-gd php8.0-intl php8.0-mysql php8.0-soap php8.0-xml php8.0-zip php8.0-memcache php8.0-memcached + apt -y install php8.0-mbstring php8.0-bcmath php8.0-cli php8.0-curl php8.0-fpm php8.0-gd php8.0-intl php8.0-mysql php8.0-soap php8.0-xml php8.0-zip php8.0-memcache php8.0-memcached php8.0-imagick update-rc.d php8.0-fpm defaults a2enconf php8.0-fpm a2dismod php8.0 @@ -284,7 +289,7 @@ fi if [ "$inst_81" -eq 1 ]; then press_enter "=== Press enter to install PHP 8.1 ===============================================================================" - apt -y install php8.1-mbstring php8.1-bcmath php8.1-cli php8.1-curl php8.1-fpm php8.1-gd php8.1-intl php8.1-mysql php8.1-soap php8.1-xml php8.1-zip php8.1-memcache php8.1-memcached + apt -y install php8.1-mbstring php8.1-bcmath php8.1-cli php8.1-curl php8.1-fpm php8.1-gd php8.1-intl php8.1-mysql php8.1-soap php8.1-xml php8.1-zip php8.1-memcache php8.1-memcached php8.1-imagick update-rc.d php8.1-fpm defaults a2enconf php8.1-fpm a2dismod php8.1 @@ -309,6 +314,33 @@ if [ "$inst_81" -eq 1 ]; then press_enter "=== PHP 8.1 installed, press enter to continue ===============================================================================" fi +if [ "$inst_82" -eq 1 ]; then + press_enter "=== Press enter to install PHP 8.2 ===============================================================================" + apt -y install php8.2-mbstring php8.2-bcmath php8.2-cli php8.2-curl php8.2-fpm php8.2-gd php8.2-intl php8.2-mysql php8.2-soap php8.2-xml php8.2-zip php8.2-memcache php8.2-memcached php8.2-imagick + update-rc.d php8.2-fpm defaults + a2enconf php8.2-fpm + a2dismod php8.2 + apt-get -y remove libapache2-mod-php8.2 + systemctl restart apache2 + cp -r /etc/php/8.2/ /root/vst_install_backups/php8.2/ + wget -nv https://c.myvestacp.com/tools/apache-fpm-tpl/PHP-FPM-82.stpl -O /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82.stpl + wget -nv https://c.myvestacp.com/tools/apache-fpm-tpl/PHP-FPM-82.tpl -O /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82.tpl + wget -nv https://c.myvestacp.com/tools/apache-fpm-tpl/PHP-FPM-82.sh -O /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82.sh + wget -nv https://c.myvestacp.com/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl -O /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82-public.stpl + wget -nv https://c.myvestacp.com/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl -O /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82-public.tpl + wget -nv https://c.myvestacp.com/tools/apache-fpm-tpl/PHP-FPM-82-public.sh -O /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82-public.sh + chmod a+x /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82.sh + chmod a+x /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82-public.sh + echo "=== Patching php.ini for php8.2" + wget -nv https://c.myvestacp.com/tools/patches/php8.1.patch -O /root/php8.1.patch + patch /etc/php/8.2/fpm/php.ini < /root/php8.1.patch + if [ $memory -gt 9999999 ]; then + sed -i "s|opcache.memory_consumption=512|opcache.memory_consumption=2048|g" /etc/php/8.2/fpm/php.ini + fi + service php8.2-fpm restart + press_enter "=== PHP 8.2 installed, press enter to continue ===============================================================================" +fi + apt update > /dev/null 2>&1 apt upgrade -y > /dev/null 2>&1 @@ -324,6 +356,7 @@ if [ $debian_version -ge 10 ]; then a2dismod php7.4 > /dev/null 2>&1 a2dismod php8.0 > /dev/null 2>&1 a2dismod php8.1 > /dev/null 2>&1 + a2dismod php8.2 > /dev/null 2>&1 a2dismod mpm_prefork > /dev/null 2>&1 a2enmod mpm_event > /dev/null 2>&1 apt-get -y remove libapache2-mod-php* > /dev/null 2>&1 From 2db5a6404a023b2a117831f457ddb9dcaaf40aa3 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 15:20:33 +0100 Subject: [PATCH 072/583] PHP 8.2 apache templates --- .../tools/apache-fpm-tpl/PHP-FPM-82-public.sh | 119 ++++++++++++++++++ .../apache-fpm-tpl/PHP-FPM-82-public.stpl | 36 ++++++ .../apache-fpm-tpl/PHP-FPM-82-public.tpl | 30 +++++ .../tools/apache-fpm-tpl/PHP-FPM-82.sh | 119 ++++++++++++++++++ .../tools/apache-fpm-tpl/PHP-FPM-82.stpl | 36 ++++++ .../tools/apache-fpm-tpl/PHP-FPM-82.tpl | 30 +++++ 6 files changed, 370 insertions(+) create mode 100644 src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.sh create mode 100644 src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl create mode 100644 src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl create mode 100644 src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.sh create mode 100644 src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl create mode 100644 src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.sh new file mode 100644 index 00000000..a4deb752 --- /dev/null +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.sh @@ -0,0 +1,119 @@ +#!/bin/bash +# Adding php pool conf +user="$1" +domain="$2" +ip="$3" +home_dir="$4" +docroot="$5" + +pool_conf="[$2] + +listen = /run/php/php8.2-fpm-$2.sock +listen.owner = $1 +listen.group = $1 +listen.mode = 0666 + +user = $1 +group = $1 + +pm = ondemand +pm.max_children = 8 +request_terminate_timeout = 360s +pm.max_requests = 4000 +pm.process_idle_timeout = 10s +pm.status_path = /status + +php_admin_value[upload_tmp_dir] = /home/$1/tmp +php_admin_value[session.save_path] = /home/$1/tmp +php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M +php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" +php_admin_flag[mysql.allow_persistent] = off +php_admin_flag[safe_mode] = off + +env[PATH] = /usr/local/bin:/usr/bin:/bin +env[TMP] = /home/$1/tmp +env[TMPDIR] = /home/$1/tmp +env[TEMP] = /home/$1/tmp +" + +pool_file_56="/etc/php/5.6/fpm/pool.d/$2.conf" +pool_file_70="/etc/php/7.0/fpm/pool.d/$2.conf" +pool_file_71="/etc/php/7.1/fpm/pool.d/$2.conf" +pool_file_72="/etc/php/7.2/fpm/pool.d/$2.conf" +pool_file_73="/etc/php/7.3/fpm/pool.d/$2.conf" +pool_file_74="/etc/php/7.4/fpm/pool.d/$2.conf" +pool_file_80="/etc/php/8.0/fpm/pool.d/$2.conf" +pool_file_81="/etc/php/8.1/fpm/pool.d/$2.conf" +pool_file_82="/etc/php/8.2/fpm/pool.d/$2.conf" + +if [ -f "$pool_file_56" ]; then + rm $pool_file_56 + systemctl reset-failed php5.6-fpm + systemctl restart php5.6-fpm +fi + +if [ -f "$pool_file_70" ]; then + rm $pool_file_70 + systemctl reset-failed php7.0-fpm + systemctl restart php7.0-fpm +fi + +if [ -f "$pool_file_71" ]; then + rm $pool_file_71 + systemctl reset-failed php7.1-fpm + systemctl restart php7.1-fpm +fi + +if [ -f "$pool_file_72" ]; then + rm $pool_file_72 + systemctl reset-failed php7.2-fpm + systemctl restart php7.2-fpm +fi + +if [ -f "$pool_file_73" ]; then + rm $pool_file_73 + systemctl reset-failed php7.3-fpm + systemctl restart php7.3-fpm +fi + +if [ -f "$pool_file_74" ]; then + rm $pool_file_74 + systemctl reset-failed php7.4-fpm + systemctl restart php7.4-fpm +fi + +if [ -f "$pool_file_80" ]; then + rm $pool_file_80 + systemctl reset-failed php8.0-fpm + systemctl restart php8.0-fpm +fi + +if [ -f "$pool_file_81" ]; then + rm $pool_file_81 + systemctl reset-failed php8.1-fpm + systemctl restart php8.1-fpm +fi + +write_file=0 +if [ ! -f "$pool_file_82" ]; then + write_file=1 +else + user_count=$(grep -c "/home/$1/" $pool_file_82) + if [ $user_count -eq 0 ]; then + write_file=1 + fi +fi +if [ $write_file -eq 1 ]; then + echo "$pool_conf" > $pool_file_82 + systemctl reset-failed php8.2-fpm + systemctl restart php8.2-fpm +fi +if [ -f "/etc/php/8.2/fpm/pool.d/www.conf" ]; then + rm /etc/php/8.2/fpm/pool.d/www.conf +fi + +exit 0 diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl new file mode 100644 index 00000000..6afebb6e --- /dev/null +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl @@ -0,0 +1,36 @@ + + + ServerName %domain_idn% + %alias_string% + ServerAdmin %email% + DocumentRoot %sdocroot%/public + ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ + Alias /vstats/ %home%/%user%/web/%domain%/stats/ + Alias /error/ %home%/%user%/web/%domain%/document_errors/ + #SuexecUserGroup %user% %group% + CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes + CustomLog /var/log/%web_system%/domains/%domain%.log combined + ErrorLog /var/log/%web_system%/domains/%domain%.error.log + + AllowOverride All + + + AllowOverride All + SSLRequireSSL + Options +Includes -Indexes +ExecCGI + + SSLEngine on + SSLVerifyClient none + SSLCertificateFile %ssl_crt% + SSLCertificateKeyFile %ssl_key% + %ssl_ca_str%SSLCertificateChainFile %ssl_ca% + + + SetHandler "proxy:unix:/run/php/php8.2-fpm-%domain%.sock|fcgi://localhost/" + + SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 + + IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* + + + diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl new file mode 100644 index 00000000..03e67a3d --- /dev/null +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl @@ -0,0 +1,30 @@ + + + ServerName %domain_idn% + %alias_string% + ServerAdmin %email% + DocumentRoot %docroot%/public + ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ + Alias /vstats/ %home%/%user%/web/%domain%/stats/ + Alias /error/ %home%/%user%/web/%domain%/document_errors/ + #SuexecUserGroup %user% %group% + CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes + CustomLog /var/log/%web_system%/domains/%domain%.log combined + ErrorLog /var/log/%web_system%/domains/%domain%.error.log + + AllowOverride All + + + AllowOverride All + Options +Includes -Indexes +ExecCGI + + + + SetHandler "proxy:unix:/run/php/php8.2-fpm-%domain%.sock|fcgi://localhost/" + + SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 + + IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* + + + diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.sh new file mode 100644 index 00000000..a4deb752 --- /dev/null +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.sh @@ -0,0 +1,119 @@ +#!/bin/bash +# Adding php pool conf +user="$1" +domain="$2" +ip="$3" +home_dir="$4" +docroot="$5" + +pool_conf="[$2] + +listen = /run/php/php8.2-fpm-$2.sock +listen.owner = $1 +listen.group = $1 +listen.mode = 0666 + +user = $1 +group = $1 + +pm = ondemand +pm.max_children = 8 +request_terminate_timeout = 360s +pm.max_requests = 4000 +pm.process_idle_timeout = 10s +pm.status_path = /status + +php_admin_value[upload_tmp_dir] = /home/$1/tmp +php_admin_value[session.save_path] = /home/$1/tmp +php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M +php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" +php_admin_flag[mysql.allow_persistent] = off +php_admin_flag[safe_mode] = off + +env[PATH] = /usr/local/bin:/usr/bin:/bin +env[TMP] = /home/$1/tmp +env[TMPDIR] = /home/$1/tmp +env[TEMP] = /home/$1/tmp +" + +pool_file_56="/etc/php/5.6/fpm/pool.d/$2.conf" +pool_file_70="/etc/php/7.0/fpm/pool.d/$2.conf" +pool_file_71="/etc/php/7.1/fpm/pool.d/$2.conf" +pool_file_72="/etc/php/7.2/fpm/pool.d/$2.conf" +pool_file_73="/etc/php/7.3/fpm/pool.d/$2.conf" +pool_file_74="/etc/php/7.4/fpm/pool.d/$2.conf" +pool_file_80="/etc/php/8.0/fpm/pool.d/$2.conf" +pool_file_81="/etc/php/8.1/fpm/pool.d/$2.conf" +pool_file_82="/etc/php/8.2/fpm/pool.d/$2.conf" + +if [ -f "$pool_file_56" ]; then + rm $pool_file_56 + systemctl reset-failed php5.6-fpm + systemctl restart php5.6-fpm +fi + +if [ -f "$pool_file_70" ]; then + rm $pool_file_70 + systemctl reset-failed php7.0-fpm + systemctl restart php7.0-fpm +fi + +if [ -f "$pool_file_71" ]; then + rm $pool_file_71 + systemctl reset-failed php7.1-fpm + systemctl restart php7.1-fpm +fi + +if [ -f "$pool_file_72" ]; then + rm $pool_file_72 + systemctl reset-failed php7.2-fpm + systemctl restart php7.2-fpm +fi + +if [ -f "$pool_file_73" ]; then + rm $pool_file_73 + systemctl reset-failed php7.3-fpm + systemctl restart php7.3-fpm +fi + +if [ -f "$pool_file_74" ]; then + rm $pool_file_74 + systemctl reset-failed php7.4-fpm + systemctl restart php7.4-fpm +fi + +if [ -f "$pool_file_80" ]; then + rm $pool_file_80 + systemctl reset-failed php8.0-fpm + systemctl restart php8.0-fpm +fi + +if [ -f "$pool_file_81" ]; then + rm $pool_file_81 + systemctl reset-failed php8.1-fpm + systemctl restart php8.1-fpm +fi + +write_file=0 +if [ ! -f "$pool_file_82" ]; then + write_file=1 +else + user_count=$(grep -c "/home/$1/" $pool_file_82) + if [ $user_count -eq 0 ]; then + write_file=1 + fi +fi +if [ $write_file -eq 1 ]; then + echo "$pool_conf" > $pool_file_82 + systemctl reset-failed php8.2-fpm + systemctl restart php8.2-fpm +fi +if [ -f "/etc/php/8.2/fpm/pool.d/www.conf" ]; then + rm /etc/php/8.2/fpm/pool.d/www.conf +fi + +exit 0 diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl new file mode 100644 index 00000000..ed39fad4 --- /dev/null +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl @@ -0,0 +1,36 @@ + + + ServerName %domain_idn% + %alias_string% + ServerAdmin %email% + DocumentRoot %sdocroot% + ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ + Alias /vstats/ %home%/%user%/web/%domain%/stats/ + Alias /error/ %home%/%user%/web/%domain%/document_errors/ + #SuexecUserGroup %user% %group% + CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes + CustomLog /var/log/%web_system%/domains/%domain%.log combined + ErrorLog /var/log/%web_system%/domains/%domain%.error.log + + AllowOverride All + + + AllowOverride All + SSLRequireSSL + Options +Includes -Indexes +ExecCGI + + SSLEngine on + SSLVerifyClient none + SSLCertificateFile %ssl_crt% + SSLCertificateKeyFile %ssl_key% + %ssl_ca_str%SSLCertificateChainFile %ssl_ca% + + + SetHandler "proxy:unix:/run/php/php8.2-fpm-%domain%.sock|fcgi://localhost/" + + SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 + + IncludeOptional %home%/%user%/conf/web/s%web_system%.%domain%.conf* + + + diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl new file mode 100644 index 00000000..789ee9d3 --- /dev/null +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl @@ -0,0 +1,30 @@ + + + ServerName %domain_idn% + %alias_string% + ServerAdmin %email% + DocumentRoot %docroot% + ScriptAlias /cgi-bin/ %home%/%user%/web/%domain%/cgi-bin/ + Alias /vstats/ %home%/%user%/web/%domain%/stats/ + Alias /error/ %home%/%user%/web/%domain%/document_errors/ + #SuexecUserGroup %user% %group% + CustomLog /var/log/%web_system%/domains/%domain%.bytes bytes + CustomLog /var/log/%web_system%/domains/%domain%.log combined + ErrorLog /var/log/%web_system%/domains/%domain%.error.log + + AllowOverride All + + + AllowOverride All + Options +Includes -Indexes +ExecCGI + + + + SetHandler "proxy:unix:/run/php/php8.2-fpm-%domain%.sock|fcgi://localhost/" + + SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 + + IncludeOptional %home%/%user%/conf/web/%web_system%.%domain%.conf* + + + From 91ac345b3e191739ea9f2f96b24a6356856b0006 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 15:26:38 +0100 Subject: [PATCH 073/583] default php 8.2 www.conf --- .../tools/default-pool.d/8.2/www.conf | 484 ++++++++++++++++++ 1 file changed, 484 insertions(+) create mode 100644 src/deb/for-download/tools/default-pool.d/8.2/www.conf diff --git a/src/deb/for-download/tools/default-pool.d/8.2/www.conf b/src/deb/for-download/tools/default-pool.d/8.2/www.conf new file mode 100644 index 00000000..ffdd57b7 --- /dev/null +++ b/src/deb/for-download/tools/default-pool.d/8.2/www.conf @@ -0,0 +1,484 @@ +; Start a new pool named 'www'. +; the variable $pool can be used in any directive and will be replaced by the +; pool name ('www' here) +[www] + +; Per pool prefix +; It only applies on the following directives: +; - 'access.log' +; - 'slowlog' +; - 'listen' (unixsocket) +; - 'chroot' +; - 'chdir' +; - 'php_values' +; - 'php_admin_values' +; When not set, the global prefix (or /usr) applies instead. +; Note: This directive can also be relative to the global prefix. +; Default Value: none +;prefix = /path/to/pools/$pool + +; Unix user/group of processes +; Note: The user is mandatory. If the group is not set, the default user's group +; will be used. +user = www-data +group = www-data + +; The address on which to accept FastCGI requests. +; Valid syntaxes are: +; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on +; a specific port; +; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on +; a specific port; +; 'port' - to listen on a TCP socket to all addresses +; (IPv6 and IPv4-mapped) on a specific port; +; '/path/to/unix/socket' - to listen on a unix socket. +; Note: This value is mandatory. +listen = /run/php/php8.2-fpm.sock + +; Set listen(2) backlog. +; Default Value: 511 (-1 on Linux, FreeBSD and OpenBSD) +;listen.backlog = 511 + +; Set permissions for unix socket, if one is used. In Linux, read/write +; permissions must be set in order to allow connections from a web server. Many +; BSD-derived systems allow connections regardless of permissions. The owner +; and group can be specified either by name or by their numeric IDs. +; Default Values: user and group are set as the running user +; mode is set to 0660 +listen.owner = www-data +listen.group = www-data +;listen.mode = 0660 +; When POSIX Access Control Lists are supported you can set them using +; these options, value is a comma separated list of user/group names. +; When set, listen.owner and listen.group are ignored +;listen.acl_users = +;listen.acl_groups = + +; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect. +; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original +; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address +; must be separated by a comma. If this value is left blank, connections will be +; accepted from any ip address. +; Default Value: any +;listen.allowed_clients = 127.0.0.1 + +; Set the associated the route table (FIB). FreeBSD only +; Default Value: -1 +;listen.setfib = 1 + +; Specify the nice(2) priority to apply to the pool processes (only if set) +; The value can vary from -19 (highest priority) to 20 (lower priority) +; Note: - It will only work if the FPM master process is launched as root +; - The pool processes will inherit the master process priority +; unless it specified otherwise +; Default Value: no set +; process.priority = -19 + +; Set the process dumpable flag (PR_SET_DUMPABLE prctl for Linux or +; PROC_TRACE_CTL procctl for FreeBSD) even if the process user +; or group is different than the master process user. It allows to create process +; core dump and ptrace the process for the pool user. +; Default Value: no +; process.dumpable = yes + +; Choose how the process manager will control the number of child processes. +; Possible Values: +; static - a fixed number (pm.max_children) of child processes; +; dynamic - the number of child processes are set dynamically based on the +; following directives. With this process management, there will be +; always at least 1 children. +; pm.max_children - the maximum number of children that can +; be alive at the same time. +; pm.start_servers - the number of children created on startup. +; pm.min_spare_servers - the minimum number of children in 'idle' +; state (waiting to process). If the number +; of 'idle' processes is less than this +; number then some children will be created. +; pm.max_spare_servers - the maximum number of children in 'idle' +; state (waiting to process). If the number +; of 'idle' processes is greater than this +; number then some children will be killed. +; pm.max_spawn_rate - the maximum number of rate to spawn child +; processes at once. +; ondemand - no children are created at startup. Children will be forked when +; new requests will connect. The following parameter are used: +; pm.max_children - the maximum number of children that +; can be alive at the same time. +; pm.process_idle_timeout - The number of seconds after which +; an idle process will be killed. +; Note: This value is mandatory. +pm = dynamic + +; The number of child processes to be created when pm is set to 'static' and the +; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'. +; This value sets the limit on the number of simultaneous requests that will be +; served. Equivalent to the ApacheMaxClients directive with mpm_prefork. +; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP +; CGI. The below defaults are based on a server without much resources. Don't +; forget to tweak pm.* to fit your needs. +; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand' +; Note: This value is mandatory. +pm.max_children = 5 + +; The number of child processes created on startup. +; Note: Used only when pm is set to 'dynamic' +; Default Value: (min_spare_servers + max_spare_servers) / 2 +pm.start_servers = 2 + +; The desired minimum number of idle server processes. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +pm.min_spare_servers = 1 + +; The desired maximum number of idle server processes. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +pm.max_spare_servers = 3 + +; The number of rate to spawn child processes at once. +; Note: Used only when pm is set to 'dynamic' +; Note: Mandatory when pm is set to 'dynamic' +; Default Value: 32 +;pm.max_spawn_rate = 32 + +; The number of seconds after which an idle process will be killed. +; Note: Used only when pm is set to 'ondemand' +; Default Value: 10s +;pm.process_idle_timeout = 10s; + +; The number of requests each child process should execute before respawning. +; This can be useful to work around memory leaks in 3rd party libraries. For +; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS. +; Default Value: 0 +;pm.max_requests = 500 + +; The URI to view the FPM status page. If this value is not set, no URI will be +; recognized as a status page. It shows the following information: +; pool - the name of the pool; +; process manager - static, dynamic or ondemand; +; start time - the date and time FPM has started; +; start since - number of seconds since FPM has started; +; accepted conn - the number of request accepted by the pool; +; listen queue - the number of request in the queue of pending +; connections (see backlog in listen(2)); +; max listen queue - the maximum number of requests in the queue +; of pending connections since FPM has started; +; listen queue len - the size of the socket queue of pending connections; +; idle processes - the number of idle processes; +; active processes - the number of active processes; +; total processes - the number of idle + active processes; +; max active processes - the maximum number of active processes since FPM +; has started; +; max children reached - number of times, the process limit has been reached, +; when pm tries to start more children (works only for +; pm 'dynamic' and 'ondemand'); +; Value are updated in real time. +; Example output: +; pool: www +; process manager: static +; start time: 01/Jul/2011:17:53:49 +0200 +; start since: 62636 +; accepted conn: 190460 +; listen queue: 0 +; max listen queue: 1 +; listen queue len: 42 +; idle processes: 4 +; active processes: 11 +; total processes: 15 +; max active processes: 12 +; max children reached: 0 +; +; By default the status page output is formatted as text/plain. Passing either +; 'html', 'xml' or 'json' in the query string will return the corresponding +; output syntax. Example: +; http://www.foo.bar/status +; http://www.foo.bar/status?json +; http://www.foo.bar/status?html +; http://www.foo.bar/status?xml +; +; By default the status page only outputs short status. Passing 'full' in the +; query string will also return status for each pool process. +; Example: +; http://www.foo.bar/status?full +; http://www.foo.bar/status?json&full +; http://www.foo.bar/status?html&full +; http://www.foo.bar/status?xml&full +; The Full status returns for each process: +; pid - the PID of the process; +; state - the state of the process (Idle, Running, ...); +; start time - the date and time the process has started; +; start since - the number of seconds since the process has started; +; requests - the number of requests the process has served; +; request duration - the duration in µs of the requests; +; request method - the request method (GET, POST, ...); +; request URI - the request URI with the query string; +; content length - the content length of the request (only with POST); +; user - the user (PHP_AUTH_USER) (or '-' if not set); +; script - the main script called (or '-' if not set); +; last request cpu - the %cpu the last request consumed +; it's always 0 if the process is not in Idle state +; because CPU calculation is done when the request +; processing has terminated; +; last request memory - the max amount of memory the last request consumed +; it's always 0 if the process is not in Idle state +; because memory calculation is done when the request +; processing has terminated; +; If the process is in Idle state, then informations are related to the +; last request the process has served. Otherwise informations are related to +; the current request being served. +; Example output: +; ************************ +; pid: 31330 +; state: Running +; start time: 01/Jul/2011:17:53:49 +0200 +; start since: 63087 +; requests: 12808 +; request duration: 1250261 +; request method: GET +; request URI: /test_mem.php?N=10000 +; content length: 0 +; user: - +; script: /home/fat/web/docs/php/test_mem.php +; last request cpu: 0.00 +; last request memory: 0 +; +; Note: There is a real-time FPM status monitoring sample web page available +; It's available in: /usr/share/php/8.2/fpm/status.html +; +; Note: The value must start with a leading slash (/). The value can be +; anything, but it may not be a good idea to use the .php extension or it +; may conflict with a real PHP file. +; Default Value: not set +;pm.status_path = /status + +; The address on which to accept FastCGI status request. This creates a new +; invisible pool that can handle requests independently. This is useful +; if the main pool is busy with long running requests because it is still possible +; to get the status before finishing the long running requests. +; +; Valid syntaxes are: +; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific IPv4 address on +; a specific port; +; '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on +; a specific port; +; 'port' - to listen on a TCP socket to all addresses +; (IPv6 and IPv4-mapped) on a specific port; +; '/path/to/unix/socket' - to listen on a unix socket. +; Default Value: value of the listen option +;pm.status_listen = 127.0.0.1:9001 + +; The ping URI to call the monitoring page of FPM. If this value is not set, no +; URI will be recognized as a ping page. This could be used to test from outside +; that FPM is alive and responding, or to +; - create a graph of FPM availability (rrd or such); +; - remove a server from a group if it is not responding (load balancing); +; - trigger alerts for the operating team (24/7). +; Note: The value must start with a leading slash (/). The value can be +; anything, but it may not be a good idea to use the .php extension or it +; may conflict with a real PHP file. +; Default Value: not set +;ping.path = /ping + +; This directive may be used to customize the response of a ping request. The +; response is formatted as text/plain with a 200 response code. +; Default Value: pong +;ping.response = pong + +; The access log file +; Default: not set +;access.log = log/$pool.access.log + +; The access log format. +; The following syntax is allowed +; %%: the '%' character +; %C: %CPU used by the request +; it can accept the following format: +; - %{user}C for user CPU only +; - %{system}C for system CPU only +; - %{total}C for user + system CPU (default) +; %d: time taken to serve the request +; it can accept the following format: +; - %{seconds}d (default) +; - %{milliseconds}d +; - %{milli}d +; - %{microseconds}d +; - %{micro}d +; %e: an environment variable (same as $_ENV or $_SERVER) +; it must be associated with embraces to specify the name of the env +; variable. Some examples: +; - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e +; - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e +; %f: script filename +; %l: content-length of the request (for POST request only) +; %m: request method +; %M: peak of memory allocated by PHP +; it can accept the following format: +; - %{bytes}M (default) +; - %{kilobytes}M +; - %{kilo}M +; - %{megabytes}M +; - %{mega}M +; %n: pool name +; %o: output header +; it must be associated with embraces to specify the name of the header: +; - %{Content-Type}o +; - %{X-Powered-By}o +; - %{Transfert-Encoding}o +; - .... +; %p: PID of the child that serviced the request +; %P: PID of the parent of the child that serviced the request +; %q: the query string +; %Q: the '?' character if query string exists +; %r: the request URI (without the query string, see %q and %Q) +; %R: remote IP address +; %s: status (response code) +; %t: server time the request was received +; it can accept a strftime(3) format: +; %d/%b/%Y:%H:%M:%S %z (default) +; The strftime(3) format must be encapsulated in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t +; %T: time the log has been written (the request has finished) +; it can accept a strftime(3) format: +; %d/%b/%Y:%H:%M:%S %z (default) +; The strftime(3) format must be encapsulated in a %{}t tag +; e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t +; %u: remote user +; +; Default: "%R - %u %t \"%m %r\" %s" +;access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{milli}d %{kilo}M %C%%" + +; A list of request_uri values which should be filtered from the access log. +; +; As a security precuation, this setting will be ignored if: +; - the request method is not GET or HEAD; or +; - there is a request body; or +; - there are query parameters; or +; - the response code is outwith the successful range of 200 to 299 +; +; Note: The paths are matched against the output of the access.format tag "%r". +; On common configurations, this may look more like SCRIPT_NAME than the +; expected pre-rewrite URI. +; +; Default Value: not set +;access.suppress_path[] = /ping +;access.suppress_path[] = /health_check.php + +; The log file for slow requests +; Default Value: not set +; Note: slowlog is mandatory if request_slowlog_timeout is set +;slowlog = log/$pool.log.slow + +; The timeout for serving a single request after which a PHP backtrace will be +; dumped to the 'slowlog' file. A value of '0s' means 'off'. +; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) +; Default Value: 0 +;request_slowlog_timeout = 0 + +; Depth of slow log stack trace. +; Default Value: 20 +;request_slowlog_trace_depth = 20 + +; The timeout for serving a single request after which the worker process will +; be killed. This option should be used when the 'max_execution_time' ini option +; does not stop script execution for some reason. A value of '0' means 'off'. +; Available units: s(econds)(default), m(inutes), h(ours), or d(ays) +; Default Value: 0 +;request_terminate_timeout = 0 + +; The timeout set by 'request_terminate_timeout' ini option is not engaged after +; application calls 'fastcgi_finish_request' or when application has finished and +; shutdown functions are being called (registered via register_shutdown_function). +; This option will enable timeout limit to be applied unconditionally +; even in such cases. +; Default Value: no +;request_terminate_timeout_track_finished = no + +; Set open file descriptor rlimit. +; Default Value: system defined value +;rlimit_files = 1024 + +; Set max core size rlimit. +; Possible Values: 'unlimited' or an integer greater or equal to 0 +; Default Value: system defined value +;rlimit_core = 0 + +; Chroot to this directory at the start. This value must be defined as an +; absolute path. When this value is not set, chroot is not used. +; Note: you can prefix with '$prefix' to chroot to the pool prefix or one +; of its subdirectories. If the pool prefix is not set, the global prefix +; will be used instead. +; Note: chrooting is a great security feature and should be used whenever +; possible. However, all PHP paths will be relative to the chroot +; (error_log, sessions.save_path, ...). +; Default Value: not set +;chroot = + +; Chdir to this directory at the start. +; Note: relative path can be used. +; Default Value: current directory or / when chroot +;chdir = /var/www + +; Redirect worker stdout and stderr into main error log. If not set, stdout and +; stderr will be redirected to /dev/null according to FastCGI specs. +; Note: on highloaded environment, this can cause some delay in the page +; process time (several ms). +; Default Value: no +;catch_workers_output = yes + +; Decorate worker output with prefix and suffix containing information about +; the child that writes to the log and if stdout or stderr is used as well as +; log level and time. This options is used only if catch_workers_output is yes. +; Settings to "no" will output data as written to the stdout or stderr. +; Default value: yes +;decorate_workers_output = no + +; Clear environment in FPM workers +; Prevents arbitrary environment variables from reaching FPM worker processes +; by clearing the environment in workers before env vars specified in this +; pool configuration are added. +; Setting to "no" will make all environment variables available to PHP code +; via getenv(), $_ENV and $_SERVER. +; Default Value: yes +;clear_env = no + +; Limits the extensions of the main script FPM will allow to parse. This can +; prevent configuration mistakes on the web server side. You should only limit +; FPM to .php extensions to prevent malicious users to use other extensions to +; execute php code. +; Note: set an empty value to allow all extensions. +; Default Value: .php +;security.limit_extensions = .php .php3 .php4 .php5 .php7 + +; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from +; the current environment. +; Default Value: clean env +;env[HOSTNAME] = $HOSTNAME +;env[PATH] = /usr/local/bin:/usr/bin:/bin +;env[TMP] = /tmp +;env[TMPDIR] = /tmp +;env[TEMP] = /tmp + +; Additional php.ini defines, specific to this pool of workers. These settings +; overwrite the values previously defined in the php.ini. The directives are the +; same as the PHP SAPI: +; php_value/php_flag - you can set classic ini defines which can +; be overwritten from PHP call 'ini_set'. +; php_admin_value/php_admin_flag - these directives won't be overwritten by +; PHP call 'ini_set' +; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no. + +; Defining 'extension' will load the corresponding shared extension from +; extension_dir. Defining 'disable_functions' or 'disable_classes' will not +; overwrite previously defined php.ini values, but will append the new value +; instead. + +; Note: path INI options can be relative and will be expanded with the prefix +; (pool, global or /usr) + +; Default Value: nothing is defined by default except the values in php.ini and +; specified at startup with the -d argument +;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com +;php_flag[display_errors] = off +;php_admin_value[error_log] = /var/log/fpm-php.www.log +;php_admin_flag[log_errors] = on +;php_admin_value[memory_limit] = 32M From 66162375fd1b6b84864a4b6744babd8c4d05ad43 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Tue, 31 Jan 2023 16:23:15 +0100 Subject: [PATCH 074/583] Minor fix for install-rocket-nginx.sh --- .../tools/rocket-nginx-templates/wprocket-force-htpps.stpl | 5 +++-- .../tools/rocket-nginx-templates/wprocket-force-htpps.tpl | 1 - .../tools/rocket-nginx-templates/wprocket-hosting.stpl | 5 ++++- .../tools/rocket-nginx-templates/wprocket-hosting.tpl | 6 ++++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl index 05ba994a..f82368cb 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl @@ -6,11 +6,13 @@ server { ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; + root %sdocroot%; + # Rocket-Nginx configuration + include rocket-nginx/conf.d/default.conf; location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; @@ -37,5 +39,4 @@ server { include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; - include rocket-nginx/conf.d/default.conf; } diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl index 0c877632..851ac0dc 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl @@ -5,5 +5,4 @@ server { rewrite ^(.*) https://%domain_idn%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; -include rocket-nginx/conf.d/default.conf; } diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl index 2610efc4..51c4fffc 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl @@ -6,10 +6,13 @@ server { ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; + root %sdocroot%; + # Rocket-Nginx configuration + include rocket-nginx/conf.d/default.conf; + location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl index 521348ae..8840c051 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl @@ -3,10 +3,13 @@ server { server_name %domain_idn% %alias_idn%; error_log /var/log/%web_system%/domains/%domain%.error.log error; + root %docroot%; + # Rocket-Nginx configuration + include rocket-nginx/conf.d/default.conf; + location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { - root %docroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; @@ -32,5 +35,4 @@ server { disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/nginx.%domain%.conf*; - include rocket-nginx/conf.d/default.conf; } From 290600dfcd3bef1aa9edfb5ec8e9f4d9337073ec Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Tue, 31 Jan 2023 16:27:52 +0100 Subject: [PATCH 075/583] Minor fix for install-rocket-nginx.sh --- .../tools/rocket-nginx-templates/wprocket-force-htpps.stpl | 1 + .../tools/rocket-nginx-templates/wprocket-hosting.stpl | 1 + 2 files changed, 2 insertions(+) diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl index f82368cb..6e1be1fd 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl @@ -13,6 +13,7 @@ server { location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl index 51c4fffc..c216d6d8 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl @@ -13,6 +13,7 @@ server { location / { proxy_pass https://%ip%:%web_ssl_port%; location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; From 1d67c6ae542de4680f545c1a1abbbc7c1019e80d Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Tue, 31 Jan 2023 16:31:02 +0100 Subject: [PATCH 076/583] Update wprocket-hosting.tpl --- .../tools/rocket-nginx-templates/wprocket-hosting.tpl | 1 + 1 file changed, 1 insertion(+) diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl index 8840c051..3b162038 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.tpl @@ -10,6 +10,7 @@ server { location / { proxy_pass http://%ip%:%web_port%; location ~* ^.+\.(%proxy_extentions%)$ { + root %docroot%; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; expires max; From 4bc0ecc46eeeff619cf4075182a511a915e881e1 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Tue, 31 Jan 2023 16:34:10 +0100 Subject: [PATCH 077/583] Update wprocket-hosting.stpl --- .../tools/rocket-nginx-templates/wprocket-hosting.stpl | 1 - 1 file changed, 1 deletion(-) diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl index c216d6d8..d7d6905f 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl @@ -39,5 +39,4 @@ server { disable_symlinks if_not_owner from=%docroot%; include %home%/%user%/conf/web/snginx.%domain%.conf*; - include rocket-nginx/conf.d/default.conf; } From ac96d9f9b376fe3309e7c17b60c4e8601d5cecee Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Tue, 31 Jan 2023 17:48:45 +0100 Subject: [PATCH 078/583] Fix filename --- .../{wprocket-force-htpps.stpl => wprocket-force-https.stpl} | 0 .../{wprocket-force-htpps.tpl => wprocket-force-https.tpl} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/deb/for-download/tools/rocket-nginx-templates/{wprocket-force-htpps.stpl => wprocket-force-https.stpl} (100%) rename src/deb/for-download/tools/rocket-nginx-templates/{wprocket-force-htpps.tpl => wprocket-force-https.tpl} (100%) diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.stpl similarity index 100% rename from src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.stpl rename to src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.stpl diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.tpl similarity index 100% rename from src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-htpps.tpl rename to src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.tpl From e7543afbd329bd16c3c787037b7fab569d846043 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 17:54:25 +0100 Subject: [PATCH 079/583] Update install-rocket-nginx.sh --- src/deb/for-download/tools/install-rocket-nginx.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deb/for-download/tools/install-rocket-nginx.sh b/src/deb/for-download/tools/install-rocket-nginx.sh index 0fb5d86d..3e298c7d 100644 --- a/src/deb/for-download/tools/install-rocket-nginx.sh +++ b/src/deb/for-download/tools/install-rocket-nginx.sh @@ -17,7 +17,7 @@ fi cd rocket-nginx cp rocket-nginx.ini.disabled rocket-nginx.ini php rocket-parser.php -wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-htpps.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-htpps.tpl -wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-htpps.stpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-htpps.stpl +wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-https.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-https.tpl +wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-https.stpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-https.stpl wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-hosting.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-hosting.tpl wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-hosting.stpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-hosting.stpl From 08146520a0d43c44b863dacdb27a4295bac3d487 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 18:01:56 +0100 Subject: [PATCH 080/583] default user/pass for private-hosting.tpl --- install/vst-install-debian.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index b5fda479..650fa241 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -1071,6 +1071,10 @@ if [ "$nginx" = 'yes' ]; then cp -f $vestacp/nginx/phppgadmin.inc /etc/nginx/conf.d/ cp -f $vestacp/nginx/webmail.inc /etc/nginx/conf.d/ cp -f $vestacp/logrotate/nginx /etc/logrotate.d/ + + # default user/pass for private-hosting.tpl: private / folder + echo 'private:$apr1$0MYnchM5$yVi/OTfp7o3lGNst/a8.90' > /etc/nginx/.htpasswd + echo > /etc/nginx/conf.d/vesta.conf mkdir -p /var/log/nginx/domains #update-rc.d nginx defaults From f5cc5d75c288b6455e9b1e69769f449484d4b844 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:10:19 +0100 Subject: [PATCH 081/583] Update PHP-FPM-74.sh --- install/debian/11/templates/web/apache2/PHP-FPM-74.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/debian/11/templates/web/apache2/PHP-FPM-74.sh b/install/debian/11/templates/web/apache2/PHP-FPM-74.sh index 0ff7b21b..e72bb003 100755 --- a/install/debian/11/templates/web/apache2/PHP-FPM-74.sh +++ b/install/debian/11/templates/web/apache2/PHP-FPM-74.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off From 13b310d115fa570ed039203b9dc5ca89a7ca68aa Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:11:12 +0100 Subject: [PATCH 082/583] Update PHP-FPM-74-public.sh --- .../11/templates/web/apache2/PHP-FPM-74-public.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/debian/11/templates/web/apache2/PHP-FPM-74-public.sh b/install/debian/11/templates/web/apache2/PHP-FPM-74-public.sh index 0ff7b21b..e72bb003 100755 --- a/install/debian/11/templates/web/apache2/PHP-FPM-74-public.sh +++ b/install/debian/11/templates/web/apache2/PHP-FPM-74-public.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off From 60dbae21b15a216e7feecaf634fca83c0fa7e512 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:12:40 +0100 Subject: [PATCH 083/583] Update PHP-FPM-73.sh --- install/debian/10/templates/web/apache2/PHP-FPM-73.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/debian/10/templates/web/apache2/PHP-FPM-73.sh b/install/debian/10/templates/web/apache2/PHP-FPM-73.sh index 57b10863..a2fea927 100755 --- a/install/debian/10/templates/web/apache2/PHP-FPM-73.sh +++ b/install/debian/10/templates/web/apache2/PHP-FPM-73.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off From 780f63732517846b4575b9bfdfe79c399b224e89 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:13:31 +0100 Subject: [PATCH 084/583] Update PHP-FPM-73-public.sh --- .../10/templates/web/apache2/PHP-FPM-73-public.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/install/debian/10/templates/web/apache2/PHP-FPM-73-public.sh b/install/debian/10/templates/web/apache2/PHP-FPM-73-public.sh index 57b10863..a2fea927 100755 --- a/install/debian/10/templates/web/apache2/PHP-FPM-73-public.sh +++ b/install/debian/10/templates/web/apache2/PHP-FPM-73-public.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off From bfd822092c00efe3bed25028cad32bdcf51b0e21 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 20:22:44 +0100 Subject: [PATCH 085/583] Creating /etc/nginx/.htpasswd if it does not exist --- src/deb/vesta/postinst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/deb/vesta/postinst b/src/deb/vesta/postinst index cc798224..975d12cd 100755 --- a/src/deb/vesta/postinst +++ b/src/deb/vesta/postinst @@ -31,6 +31,11 @@ if [ "$release" -eq 11 ]; then sed -i "s/yescrypt/sha512/g" /etc/pam.d/common-password fi +# Creating /etc/nginx/.htpasswd if it does not exist +if [ ! -f "/etc/nginx/.htpasswd" ]; then + echo 'private:$apr1$0MYnchM5$yVi/OTfp7o3lGNst/a8.90' > /etc/nginx/.htpasswd +fi + # Fixing Gmail hosts_try_fastopen in Exim4 if [ "$release" -eq 11 ]; then if [ -f "/etc/exim4/exim4.conf.template" ]; then From 151159f9d307d16e66183704e67339e76a2665c1 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:51:19 +0100 Subject: [PATCH 086/583] fpm pool.d conf tweak --- .../for-download/tools/apache-fpm-tpl/PHP-FPM-56.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-70.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-71.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-72.sh | 10 +++++----- .../tools/apache-fpm-tpl/PHP-FPM-73-public.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-73.sh | 10 +++++----- .../tools/apache-fpm-tpl/PHP-FPM-74-public.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-74.sh | 10 +++++----- .../tools/apache-fpm-tpl/PHP-FPM-80-public.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-80.sh | 10 +++++----- .../tools/apache-fpm-tpl/PHP-FPM-81-public.sh | 10 +++++----- .../for-download/tools/apache-fpm-tpl/PHP-FPM-81.sh | 10 +++++----- 12 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.sh index b9137821..081aaf19 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.sh index 0e742ad8..10c58c57 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.sh index 6110e898..90230674 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.sh index 6541a0dc..cc76256e 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.sh index 57b10863..a2fea927 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.sh index 57b10863..a2fea927 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.sh index 0ff7b21b..e72bb003 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.sh index 0ff7b21b..e72bb003 100755 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.sh index 343392c2..a4842ac9 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.sh index 343392c2..a4842ac9 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.sh index 67c8ccfb..4b4f9d78 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.sh b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.sh index 67c8ccfb..4b4f9d78 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.sh +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.sh @@ -18,7 +18,7 @@ group = $1 pm = ondemand pm.max_children = 8 -request_terminate_timeout = 90s +request_terminate_timeout = 360s pm.max_requests = 4000 pm.process_idle_timeout = 10s pm.status_path = /status @@ -26,10 +26,10 @@ pm.status_path = /status php_admin_value[upload_tmp_dir] = /home/$1/tmp php_admin_value[session.save_path] = /home/$1/tmp php_admin_value[open_basedir] = $5:/home/$1/tmp:/bin:/usr/bin:/usr/local/bin:/var/www/html:/tmp:/usr/share:/etc/phpmyadmin:/var/lib/phpmyadmin:/etc/roundcube:/var/log/roundcube:/var/lib/roundcube -php_admin_value[upload_max_filesize] = 80M -php_admin_value[max_execution_time] = 30 -php_admin_value[post_max_size] = 80M -php_admin_value[memory_limit] = 256M +php_admin_value[upload_max_filesize] = 800M +php_admin_value[max_execution_time] = 300 +php_admin_value[post_max_size] = 800M +php_admin_value[memory_limit] = 512M php_admin_value[sendmail_path] = \"/usr/sbin/sendmail -t -i -f info@$2\" php_admin_flag[mysql.allow_persistent] = off php_admin_flag[safe_mode] = off From e8b9545a9d439682a7730eb50f2ce42e025a49fc Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:56:18 +0100 Subject: [PATCH 087/583] CRLF to LF EOL --- .../wprocket-force-https.stpl | 86 +++++++++---------- .../wprocket-hosting.stpl | 84 +++++++++--------- 2 files changed, 85 insertions(+), 85 deletions(-) diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.stpl index 6e1be1fd..58f1e9fa 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.stpl @@ -1,43 +1,43 @@ -server { - listen %ip%:%proxy_ssl_port% ssl http2; - server_name %domain_idn% %alias_idn%; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - root %sdocroot%; - # Rocket-Nginx configuration - include rocket-nginx/conf.d/default.conf; - - location / { - proxy_pass https://%ip%:%web_ssl_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - # try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass https://%ip%:%web_ssl_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.env {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - disable_symlinks if_not_owner from=%docroot%; - - include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; - include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; -} +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + root %sdocroot%; + # Rocket-Nginx configuration + include rocket-nginx/conf.d/default.conf; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl index d7d6905f..d4eaeed8 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-hosting.stpl @@ -1,42 +1,42 @@ -server { - listen %ip%:%proxy_ssl_port% ssl http2; - server_name %domain_idn% %alias_idn%; - - ssl_certificate %ssl_pem%; - ssl_certificate_key %ssl_key%; - error_log /var/log/%web_system%/domains/%domain%.error.log error; - - root %sdocroot%; - # Rocket-Nginx configuration - include rocket-nginx/conf.d/default.conf; - - location / { - proxy_pass https://%ip%:%web_ssl_port%; - location ~* ^.+\.(%proxy_extentions%)$ { - root %sdocroot%; - access_log /var/log/%web_system%/domains/%domain%.log combined; - access_log /var/log/%web_system%/domains/%domain%.bytes bytes; - expires max; - # try_files $uri @fallback; - } - } - - location /error/ { - alias %home%/%user%/web/%domain%/document_errors/; - } - - location @fallback { - proxy_pass https://%ip%:%web_ssl_port%; - } - - location ~ /\.ht {return 404;} - location ~ /\.env {return 404;} - location ~ /\.svn/ {return 404;} - location ~ /\.git/ {return 404;} - location ~ /\.hg/ {return 404;} - location ~ /\.bzr/ {return 404;} - - disable_symlinks if_not_owner from=%docroot%; - - include %home%/%user%/conf/web/snginx.%domain%.conf*; -} +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + root %sdocroot%; + # Rocket-Nginx configuration + include rocket-nginx/conf.d/default.conf; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/snginx.%domain%.conf*; +} From fa94c7a2104e0fde015c4764c75ccc818419b491 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 23:24:37 +0100 Subject: [PATCH 088/583] Update Changelog.md --- Changelog.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Changelog.md b/Changelog.md index b7e52d49..887ec04f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,10 @@ +Version 0.9.8-26-59 [01-Feb-2023] +================================================== +* Support for PHP 8.2 +* New script: v-move-folder-and-make-symlink +* New script: v-lock-wordpress (to prevent PHP malware) and v-unlock-wordpress +* Many minor bugfixes + Version 0.9.8-26-58 [12-Jul-2022] ================================================== * [Security] hash_equals() in /reset/mail/ (credits to @divinity76 ) From 0e9a5304a5a1be6ce7f3befc43980830e5598ffd Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 23:34:10 +0100 Subject: [PATCH 089/583] Installing WordPress to user_domain_com database --- bin/v-install-wordpress | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index 91bbdf0a..0e24f847 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -49,7 +49,7 @@ is_object_unsuspended 'user' 'USER' "$user" source /usr/local/vesta/func/handle_parameters.sh if [ -z "$database" ]; then - database="wp" + database=$(echo "$domain" | sed 's#\.#_#g') fi if [ -z "$email" ]; then From 1325a73661b12a2fd2cb1572de6b10efdfd8e1a9 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 23:43:47 +0100 Subject: [PATCH 090/583] Update Changelog.md --- Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Changelog.md b/Changelog.md index 887ec04f..f49b75e4 100644 --- a/Changelog.md +++ b/Changelog.md @@ -3,6 +3,7 @@ Version 0.9.8-26-59 [01-Feb-2023] * Support for PHP 8.2 * New script: v-move-folder-and-make-symlink * New script: v-lock-wordpress (to prevent PHP malware) and v-unlock-wordpress +* v-install-wordpress: Installing WordPress to user_domain_com database instead of installing to user_wp database * Many minor bugfixes Version 0.9.8-26-58 [12-Jul-2022] From 0a17e3759b5d4cc77d2b71e92374eb65300308d2 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 31 Jan 2023 23:49:12 +0100 Subject: [PATCH 091/583] Version 0.9.8-26-59 --- src/deb/latest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/latest.txt b/src/deb/latest.txt index 5a056019..44148247 100644 --- a/src/deb/latest.txt +++ b/src/deb/latest.txt @@ -1 +1 @@ -vesta-0.9.8-26-58 +vesta-0.9.8-26-59 From 8eb0b19a0bf78c5e2b0d0c4eb2fe1843c573267a Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Wed, 1 Feb 2023 19:37:14 +0100 Subject: [PATCH 092/583] Automatic installation of rocket-nginx for a given domain --- bin/v-activate-rocket-nginx.sh | 116 +++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 bin/v-activate-rocket-nginx.sh diff --git a/bin/v-activate-rocket-nginx.sh b/bin/v-activate-rocket-nginx.sh new file mode 100644 index 00000000..36c6d768 --- /dev/null +++ b/bin/v-activate-rocket-nginx.sh @@ -0,0 +1,116 @@ +#!/bin/bash +# info: Install rocket-nginx extension for certain domain +# options: DOMAIN + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ]; then + echo "You must be root to execute this script" + exit 1 +fi + +# Importing system environment +source /etc/profile + +# Argument definition +domain=$1 + +user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +USER=$user + +# Includes +source /usr/local/vesta/func/main.sh +source /usr/local/vesta/func/domain.sh + +if [ -z "$user" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '1' "$#" 'DOMAIN' +is_format_valid 'domain' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" + +if [ ! -d "/home/$user" ]; then + echo "User doesn't exist"; + exit 1; +fi + +if [ ! -d "/home/$user/web/$domain/public_html" ]; then + echo "Domain doesn't exist"; + exit 1; +fi + +if [ ! -d "/etc/nginx/rocket-nginx" ]; then + echo "rocket-nginx is not installed"; + echo "Do you want to install it now (y/n)?" + read answer + if [ "$answer" == "y" ]; then + echo "Installing rocket-nginx..." + curl -sL https://c.myvestacp.com/tools/install-rocket-nginx.sh | bash - + else + echo "Exiting script" + exit 1; + fi +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +# Chaning Proxy Template +echo "Do you want to force-https in your Proxy Template or not (y/n):" +read answer +if [ "$answer" == "y" ]; then + /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$user" "$domain" "wprocket-force-https" +else + /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$user" "$domain" "wprocket-hosting" +fi +echo "Proxy Template is ready" + +# Checking if the website is WordPress +if [ ! -f "/home/$user/web/$domain/public_html/wp-config.php" ]; then + echo 'Please install WordPress first.' + exit 1; +fi + +# Disabling wp-cron in wp-config.php +echo "Disabling WP-Cron in your wp-config.php..." +string="define( 'DISABLE_WP_CRON', true );" +line="define( 'DB_COLLATE', '' );" +file="/home/$user/web/$domain/public_html/wp-config.php" +sed -i "/$line/a $string" $file + +# Adding cron job +echo "Adding cron job..." + +TPL=$(/usr/local/vesta/bin/v-list-web-domain $user $domain shell | grep 'TEMPLATE:' | awk '{print $2}') +if [[ $TPL == "PHP-FPM-"* ]]; then + fpm_tpl_ver=${TPL:8:2} + fpm_ver="${TPL:8:1}.${TPL:9:1}" +fi + +touch /home/$user/web/$domain/cron.log +chown $user:$user /home/$user/web/$domain/cron.log + +case $fpm_ver in + 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2) + /usr/local/vesta/bin/v-add-cron-job "$user" "*/15" "*" "*" "*" "*" "cd /home/$user/web/$domain/public_html; /usr/bin/php$fpm_ver wp-cron.php >/home/$user/web/$domain/cron.log 2>&1" + ;; +esac + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# +echo "Installation is completed." + +exit From c263c3322c5cf0c493bbfedd6361243b06975948 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Wed, 1 Feb 2023 19:40:01 +0100 Subject: [PATCH 093/583] Update v-activate-rocket-nginx.sh --- bin/v-activate-rocket-nginx.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-activate-rocket-nginx.sh b/bin/v-activate-rocket-nginx.sh index 36c6d768..93deab0a 100644 --- a/bin/v-activate-rocket-nginx.sh +++ b/bin/v-activate-rocket-nginx.sh @@ -67,7 +67,7 @@ fi # Action # #----------------------------------------------------------# -# Chaning Proxy Template +# Changing Proxy Template echo "Do you want to force-https in your Proxy Template or not (y/n):" read answer if [ "$answer" == "y" ]; then From 2d8fc21ba7565b8e6fe4834cbace520be6e82c9c Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Wed, 1 Feb 2023 20:07:07 +0100 Subject: [PATCH 094/583] Update v-activate-rocket-nginx.sh --- bin/v-activate-rocket-nginx.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/v-activate-rocket-nginx.sh b/bin/v-activate-rocket-nginx.sh index 93deab0a..b2f7b682 100644 --- a/bin/v-activate-rocket-nginx.sh +++ b/bin/v-activate-rocket-nginx.sh @@ -112,5 +112,7 @@ esac # Vesta # #----------------------------------------------------------# echo "Installation is completed." +echo "Checking RESPONSE HEADERS (You should see x-rocket-nginx-serving-static if the WP Rocket plugin is activated):" +curl -I https://$domain exit From 1c33f9cfd25e2cbf448d0913866200a7ee8f387b Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 2 Feb 2023 11:37:42 +0100 Subject: [PATCH 095/583] Update v-activate-rocket-nginx.sh --- bin/v-activate-rocket-nginx.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bin/v-activate-rocket-nginx.sh b/bin/v-activate-rocket-nginx.sh index b2f7b682..1b8561c3 100644 --- a/bin/v-activate-rocket-nginx.sh +++ b/bin/v-activate-rocket-nginx.sh @@ -49,6 +49,11 @@ if [ ! -d "/home/$user/web/$domain/public_html" ]; then exit 1; fi +if [ ! -f "/home/$user/web/$domain/public_html/wp-config.php" ]; then + echo 'Please install WordPress first.' + exit 1; +fi + if [ ! -d "/etc/nginx/rocket-nginx" ]; then echo "rocket-nginx is not installed"; echo "Do you want to install it now (y/n)?" @@ -77,12 +82,6 @@ else fi echo "Proxy Template is ready" -# Checking if the website is WordPress -if [ ! -f "/home/$user/web/$domain/public_html/wp-config.php" ]; then - echo 'Please install WordPress first.' - exit 1; -fi - # Disabling wp-cron in wp-config.php echo "Disabling WP-Cron in your wp-config.php..." string="define( 'DISABLE_WP_CRON', true );" From d940389c153cb476df3c54ad7bec91a9f215708a Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 2 Feb 2023 13:44:29 +0100 Subject: [PATCH 096/583] Script to determine which PHP version a given domain is using --- bin/v-get-php-version-of-domain.sh | 69 ++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 bin/v-get-php-version-of-domain.sh diff --git a/bin/v-get-php-version-of-domain.sh b/bin/v-get-php-version-of-domain.sh new file mode 100644 index 00000000..bd0e7a51 --- /dev/null +++ b/bin/v-get-php-version-of-domain.sh @@ -0,0 +1,69 @@ +#!/bin/bash +# info: Check PHP version used for certain domain +# options: DOMAIN + +#----------------------------------------------------------# +# Variable&Function # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ]; then + echo "You must be root to execute this script" + exit 1 +fi + +# Importing system environment +source /etc/profile + +# Argument definition +domain=$1 + +user=$(/usr/local/vesta/bin/v-search-domain-owner $domain) +USER=$user + +# Includes +source /usr/local/vesta/func/main.sh +source /usr/local/vesta/func/domain.sh + +if [ -z "$user" ]; then + check_result $E_NOTEXIST "domain $domain doesn't exist" +fi + + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +check_args '1' "$#" 'DOMAIN' +is_format_valid 'domain' +is_object_valid 'user' 'USER' "$user" +is_object_unsuspended 'user' 'USER' "$user" + +if [ ! -d "/home/$user" ]; then + echo "User doesn't exist"; + exit 1; +fi + +if [ ! -d "/home/$user/web/$domain/public_html" ]; then + echo "Domain doesn't exist"; + exit 1; +fi + + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + + +TPL=$(/usr/local/vesta/bin/v-list-web-domain $user $domain shell | grep 'TEMPLATE:' | awk '{print $2}') +if [[ $TPL == "PHP-FPM-"* ]]; then + fpm_tpl_ver=${TPL:8:2} + fpm_ver="${TPL:8:1}.${TPL:9:1}" +fi + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# +echo "PHP-FPM version running on given domain is: $fpm_ver" + +exit From 15e5f3bc81d9e36d8e63c920eb9636d241a7c250 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 2 Feb 2023 13:49:00 +0100 Subject: [PATCH 097/583] Rename v-get-php-version-of-domain.sh to v-get-php-version-of-domain --- ...v-get-php-version-of-domain.sh => v-get-php-version-of-domain} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bin/{v-get-php-version-of-domain.sh => v-get-php-version-of-domain} (100%) diff --git a/bin/v-get-php-version-of-domain.sh b/bin/v-get-php-version-of-domain similarity index 100% rename from bin/v-get-php-version-of-domain.sh rename to bin/v-get-php-version-of-domain From ab0b8c53c4c028a5e76f79d96b47ef761106b6aa Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 2 Feb 2023 14:28:37 +0100 Subject: [PATCH 098/583] Rename v-activate-rocket-nginx.sh to v-activate-rocket-nginx --- bin/{v-activate-rocket-nginx.sh => v-activate-rocket-nginx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bin/{v-activate-rocket-nginx.sh => v-activate-rocket-nginx} (100%) diff --git a/bin/v-activate-rocket-nginx.sh b/bin/v-activate-rocket-nginx similarity index 100% rename from bin/v-activate-rocket-nginx.sh rename to bin/v-activate-rocket-nginx From 1ecd2277851cdf6813658640b08b2ff2466edcce Mon Sep 17 00:00:00 2001 From: Umut Korkmaz Date: Sat, 4 Feb 2023 01:58:49 +0300 Subject: [PATCH 099/583] Untranslated fields translated, typos fixed --- web/inc/i18n/tr.php | 151 ++++++++++++++++++++++---------------------- 1 file changed, 76 insertions(+), 75 deletions(-) diff --git a/web/inc/i18n/tr.php b/web/inc/i18n/tr.php index a7fadc43..7aac0098 100644 --- a/web/inc/i18n/tr.php +++ b/web/inc/i18n/tr.php @@ -3,6 +3,7 @@ * Vesta turkish language file * 2014.11.01 Özgür Bozkurt (info@ozgurbozkurt.com/ozgur@forum.vestacp.com) * 2016.06.27 Selim Can CABA (info@selimcancaba.com) + * 2023.02.04 Umut Korkmaz (umutkorkmaaz@gmail.com) */ $LANG['tr'] = array( @@ -26,22 +27,22 @@ $LANG['tr'] = array( 'CRON' => 'CRON', 'BACKUP' => 'YEDEK', - 'LOGIN' => 'LOGIN', - 'RESET PASSWORD' => 'RESET PASSWORD', - 'SEARCH' => 'SEARCH', - 'PACKAGE' => 'PACKAGE', + 'LOGIN' => 'GİRİŞ', + 'RESET PASSWORD' => 'PAROLAYI SIFIRLA', + 'SEARCH' => 'ARA', + 'PACKAGE' => 'PAKET', 'RRD' => 'RRD', - 'STATS' => 'STATS', + 'STATS' => 'ISTATISTIKLER', 'LOG' => 'LOG', - 'UPDATES' => 'UPDATES', - 'FIREWALL' => 'FIREWALL', - 'SERVER' => 'SERVER', - 'MEMORY' => 'MEMORY', + 'UPDATES' => 'GÜNCELLEMELER', + 'FIREWALL' => 'GÜVENLİK DUVARI', + 'SERVER' => 'SUNUCU', + 'MEMORY' => 'BELLEK', 'DISK' => 'DISK', - 'NETWORK' => 'NETWORK', + 'NETWORK' => 'AĞ', 'Web Log Manager' => 'Web Log Manager', - 'no notifications' => 'no notifications', + 'no notifications' => 'bildirim yok', 'Add User' => 'Kullanıcı Ekle', 'Add Domain' => 'Alan Adı Ekle', @@ -84,7 +85,7 @@ $LANG['tr'] = array( 'unsuspend' => 'devam ettir', 'delete' => 'sil', 'show per user' => 'kullanıcı başına göster', - 'login as' => 'giriş yapıldı:', + 'login as' => 'giriş yap:', 'logout' => 'oturumu kapat', 'edit' => 'düzenle', 'open webstats' => 'webstats aç', @@ -110,7 +111,7 @@ $LANG['tr'] = array( 'disable autoupdate' => 'otomatik güncellemeyi pasif hale getir', 'turn on notifications' => 'duyuruları aç', 'turn off notifications' => 'duyuruları kapat', - 'configure' => 'configure', + 'configure' => 'yapılandır', 'Adding User' => 'Kullanıcı Ekleme', 'Editing User' => 'Kullanıcı Düzenleme', @@ -186,22 +187,22 @@ $LANG['tr'] = array( 'Mail Accounts' => 'Posta Hesapları', 'Cron Jobs' => 'Zamanlanmış Görevler', 'SSH Access' => 'SSH Erişimi', - 'IP Address' => 'IP Address', + 'IP Address' => 'IP Adresi', 'IP Addresses' => 'IP Adresleri', 'Backups' => 'Yedekler', 'Backup System' => 'Yedekleme Sistemi', 'backup exclusions' => 'yedekleme istisnaları', 'template' => 'template', - 'SSL Support' => 'SSL Support', - 'SSL Home Directory' => 'SSL Home', - 'Lets Encrypt Support' => 'Lets Encrypt Support', + 'SSL Support' => 'SSL Desteği', + 'SSL Home Directory' => 'SSL Dizini', + 'Lets Encrypt Support' => 'Lets Encrypt Desteği', 'Lets Encrypt' => 'Lets Encrypt', - 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', + 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikanız 5 dakika içinde otomatik olarak verilecektir.', 'Proxy Support' => 'Proxy Desteği', 'Proxy Extensions' => 'Proxy Uzantıları', 'Web Statistics' => 'Web İstatistikleri', 'Additional FTP Account' => 'İlave FTP Hesabı', - 'Path' => 'Path', + 'Path' => 'Ana dizin', 'SOA' => 'SOA', 'TTL' => 'TTL', 'Expire' => 'Sonlanış', @@ -216,19 +217,19 @@ $LANG['tr'] = array( 'Autoreply' => 'Otomatik Cevap', 'Forward to' => 'Şuraya yönlendir', 'Do not store forwarded mail' => 'Yönlendirilmiş postaları depolama', - 'IMAP hostname' => 'IMAP hostname', + 'IMAP hostname' => 'IMAP sunucusu', 'IMAP port' => 'IMAP port', - 'IMAP security' => 'IMAP security', - 'IMAP auth method' => 'IMAP auth method', - 'SMTP hostname' => 'SMTP hostname', + 'IMAP security' => 'IMAP güvenliği', + 'IMAP auth method' => 'IMAP giriş metodu', + 'SMTP hostname' => 'SMTP sunucusu', 'SMTP port' => 'SMTP port', - 'SMTP security' => 'SMTP security', - 'SMTP auth method' => 'SMTP auth method', + 'SMTP security' => 'SMTP güvenliği', + 'SMTP auth method' => 'SMTP giriş metodu', 'STARTTLS' => 'STARTTLS', - 'Normal password' => 'Normal password', + 'Normal password' => 'Normal parola', 'database' => 'veritabanı', 'User' => 'Kullanıcı', - 'Host' => 'Host', + 'Host' => 'Sunucu', 'Charset' => 'Karakter Seti', 'Min' => 'Dak', 'Hour' => 'Saat', @@ -247,14 +248,14 @@ $LANG['tr'] = array( 'Users' => 'Kullanıcılar', 'Load Average' => 'Sistem Yükü', 'Memory Usage' => 'Hafıza Kullanımı', - 'APACHE2 Usage' => 'APACHE2 Usage', + 'APACHE2 Usage' => 'APACHE2 Kullanımı', 'HTTPD Usage' => 'HTTPD Kullanımı', 'NGINX Usage' => 'NGINX Kullanımı', 'MySQL Usage on localhost' => 'Localhost Üzerindeki MySQL Kullanımı', 'PostgreSQL Usage on localhost' => 'Localhost Üzerindeki PostgreSQL Kullanımı', 'Bandwidth Usage eth0' => 'eth0 Trafik Kullanımı', 'Bandwidth Usage eth1' => 'eth1 Trafik Kullanımı', - 'Exim Usage' => 'Exim Usage', + 'Exim Usage' => 'Exim Kullanımı', 'FTP Usage' => 'FTP Kullanımı', 'SSH Usage' => 'SSH Kullanımı', 'reverse proxy' => 'reverse proxy', @@ -293,7 +294,7 @@ $LANG['tr'] = array( 'DNS Support' => 'DNS Desteği', 'Mail Support' => 'Mail Desteği', 'Advanced options' => 'Gelişmiş seçenekler', - 'Basic options' => 'Basic options', + 'Basic options' => 'Basit seçenekler', 'Aliases' => 'Takma adlar (Alias)', 'SSL Certificate' => 'SSL Sertifikası', 'SSL Key' => 'SSL Anahtarı (Key)', @@ -397,7 +398,7 @@ $LANG['tr'] = array( 'SSH' => 'SSH', 'FTP' => 'FTP', 'VESTA' => 'VESTA', - 'Add one more Name Server' => 'Add one more Name Server', + 'Add one more Name Server' => 'Bir Name Server daha ekle', 'web domain' => 'web domain', 'dns domain' => 'dns domain', @@ -449,17 +450,17 @@ $LANG['tr'] = array( 'MAIL_ACCOUNT_CREATED_OK' => '%s@%s mail hesabı başarıyla oluşturuldu', 'DATABASE_CREATED_OK' => '%s veritabanı başarıyla oluşturuldu.', 'CRON_CREATED_OK' => 'Zamanlanmış görev başarıyla oluşturuldu.', - 'IP_CREATED_OK' => '%s ip adresi başarıyla oluşturuldu.', + 'IP_CREATED_OK' => '%s IP adresi başarıyla oluşturuldu.', 'PACKAGE_CREATED_OK' => '%s paketi başarıyla oluşturuldu.', 'SSL_GENERATED_OK' => 'Sertifika başarıyla oluşturuldu.', 'RULE_CREATED_OK' => 'Kural başarıyla oluşturuldu.', - 'BANLIST_CREATED_OK' => 'IP address has been banned successfully', + 'BANLIST_CREATED_OK' => 'IP adresi başarıyla engellendi', 'Autoupdate has been successfully enabled' => 'Otomatik güncelleme başarıyla aktifleştirildi', 'Autoupdate has been successfully disabled' => 'Otomatik güncelleme başarıyla pasifleştirildi', 'Cronjob email reporting has been successfully enabled' => 'Zamanlanmış görev e-posta raporlama başarıyla aktif hale getirildi', 'Cronjob email reporting has been successfully disabled' => 'Zamanlanmış görev e-posta raporlama başarıyla pasif hale getirildi', 'Changes has been saved.' => 'Değişiklikler kaydedildi.', - 'Confirmation' => 'Onaylama', + 'Confirmation' => 'Onayla', 'DELETE_USER_CONFIRMATION' => '%s kullanıcısını silmek istediğinize emin misiniz?', 'SUSPEND_USER_CONFIRMATION' => '%s kullanıcısını askıya almak istediğinize emin misiniz?', 'UNSUSPEND_USER_CONFIRMATION' => '%s kullanıcısını devam ettirmek istediğinize emin misiniz?', @@ -488,7 +489,7 @@ $LANG['tr'] = array( 'LEAVE_PAGE_CONFIRMATION' => 'Leave Page?', 'RESTART_CONFIRMATION' => '%s yeniden başlatılacak. Onaylıyor musunuz?', 'Welcome' => 'Hoşgeldiniz', - 'LOGGED_IN_AS' => '%s kullanıcısı olarak oturum aç', + 'LOGGED_IN_AS' => '%s kullanıcısı olarak oturum açıldı', 'Error' => 'Hata', 'Invalid username or password' => 'Geçersiz kullanıcı adı veya şifre', 'Invalid username or code' => 'Geçersiz kullanıcı adı veya kod', @@ -548,30 +549,30 @@ $LANG['tr'] = array( 'Dec' => 'Ara', 'Configuring Server' => 'Sunucu Yapılandırma', - 'Hostname' => 'Hostadı', + 'Hostname' => 'Sunucu Adı', 'Time Zone' => 'Zaman Dilimi', 'Default Language' => 'Varsayılan Dil', - 'Proxy Server' => 'Proxy Server', - 'Web Server' => 'Web Server', - 'Backend Server' => 'Backend Server', + 'Proxy Server' => 'Proxy Sunucusu', + 'Web Server' => 'Web Sunucusu', + 'Backend Server' => 'Backend Sunucusu', 'Backend Pool Mode' => 'Backend Pool Mode', - 'DNS Server' => 'DNS Server', + 'DNS Server' => 'DNS Sunucusu', 'DNS Cluster' => 'DNS Cluster', - 'MAIL Server' => 'MAIL Server', + 'MAIL Server' => 'MAIL Sunucusu', 'Antivirus' => 'Antivirus', 'AntiSpam' => 'AntiSpam', - 'Use Web Domain SSL Certificate' => 'Use Web Domain SSL Certificate', + 'Use Web Domain SSL Certificate' => 'Web Alan Adının SSL Sertifikasını Kullan', 'Webmail URL' => 'Webmail URL', - 'MySQL Support' => 'MySQL Support', + 'MySQL Support' => 'MySQL Desteği', 'phpMyAdmin URL' => 'phpMyAdmin URL', - 'PostgreSQL Support' => 'PostgreSQL Support', + 'PostgreSQL Support' => 'PostgreSQL Desteği', 'phpPgAdmin URL' => 'phpPgAdmin URL', - 'Maximum Number Of Databases' => 'Maximum Number Of Databases', - 'Current Number Of Databases' => 'Current Number Of Databases', - 'Local backup' => 'Local backup', - 'Compression level' => 'Compression level', - 'Directory' => 'Directory', - 'Remote backup' => 'Remote backup', + 'Maximum Number Of Databases' => 'Maksimum Veritabanı Sayısı', + 'Current Number Of Databases' => 'Mevcut Veritabanı Sayısı', + 'Local backup' => 'Yerel Yedek', + 'Compression level' => 'Sıkıştırma seviyesi', + 'Directory' => 'Dizin', + 'Remote backup' => 'Uzak Yedek', 'ftp' => 'FTP', 'sftp' => 'SFTP', 'SFTP Chroot' => 'SFTP Chroot', @@ -590,7 +591,7 @@ $LANG['tr'] = array( 'Starred' => 'Yıldızlı', 'Name' => 'İsim', - 'save to favorites' => 'save to favorites', + 'save to favorites' => 'favorilere kaydet', 'File Manager' => 'Dosya Yöneticisi', 'size' => 'boyut', @@ -602,13 +603,13 @@ $LANG['tr'] = array( 'NEW DIR' => 'YENİ KLASÖR', 'DELETE' => 'SİL', 'RENAME' => 'YENİDEN ADLANDIR', - 'MOVE' => 'MOVE', - 'RIGHTS' => 'RIGHTS', + 'MOVE' => 'TAŞI', + 'RIGHTS' => 'IZINLER', 'COPY' => 'KOPYALA', 'ARCHIVE' => 'ARŞİVLE', 'EXTRACT' => 'ÇIKART', 'DOWNLOAD' => 'İNDİR', - 'Are you sure?' => 'Are you sure?', + 'Are you sure?' => 'Emin misin?', 'Hit' => 'Hit', 'to reload the page' => 'sayfayı yenilemek için', 'Directory name cannot be empty' => 'Dizin adı boş olamaz', @@ -623,20 +624,20 @@ $LANG['tr'] = array( 'Copy' => 'Kopyala', 'Cancel' => 'Vazgeç', 'Rename' => 'Yeniden Adlandır', - 'Move' => 'Move', - 'Change Rights' => 'Change Rights', + 'Move' => 'Taşı', + 'Change Rights' => 'İzinleri Değiştir', 'Delete' => 'Sil', 'Extract' => 'Çıkart', 'Create' => 'Oluştur', 'Compress' => 'Sıkıştır', 'OK' => 'TAMAM', - 'YOU ARE COPYING' => 'YOU ARE COPYING', - 'YOU ARE REMOVING' => 'YOU ARE REMOVING', - 'Delete items' => 'Delete items', - 'Copy files' => 'Copy files', - 'Move files' => 'Move files', + 'YOU ARE COPYING' => 'KOPYALAMA YAPIYORSUNUZ', + 'YOU ARE REMOVING' => 'SİLME İŞLEMİ YAPIYORSUNUZ', + 'Delete items' => 'Öğeleri sil', + 'Copy files' => 'Dosyaları kopyala', + 'Move files' => 'Dosyaları taşı', 'Are you sure you want to copy' => 'Kopyalamak istediğinizden emin misiniz', - 'Are you sure you want to move' => 'Are you sure you want to move', + 'Are you sure you want to move' => 'Taşımak istediğinizden emin misiniz', 'Are you sure you want to delete' => 'Silmek istediğinizden emin misiniz', 'into' => 'into', 'existing files will be replaced' => 'varolan dosyalar değiştirilir', @@ -655,7 +656,7 @@ $LANG['tr'] = array( 'write by others' => 'write by others', 'execute/search by others' => 'execute/search by others', - 'Shortcuts' => 'Shortcuts', + 'Shortcuts' => 'Kısayollar', 'Add New object' => 'Yeni Nesne Ekle', 'Save Form' => 'Formu Kaydet', 'Cancel saving form' => 'Formu kaydetmekten vazgeç', @@ -671,8 +672,8 @@ $LANG['tr'] = array( 'Move backward through top menu' => 'Üst menüden arasında geriye doğru git', 'Move forward through top menu' => 'Üst menüden arasında ileriye doğru git', 'Enter focused element' => 'Odaklanmış elemanı gir', - 'Move up through elements list' => 'Move up through elements list', - 'Move down through elements list' => 'Move down through elements list', + 'Move up through elements list' => 'Öğeler listesinde yukarı git', + 'Move down through elements list' => 'Öğeler listesinde aşağı git', 'Upload' => 'Yükle', 'New File' => 'Yeni Dosya', @@ -689,7 +690,7 @@ $LANG['tr'] = array( 'Go to the Top of the File List' => 'Dosya Listesinin Tepesine git', 'Go to the Last File' => 'Son Dosyaya git', 'Open File / Enter Directory' => 'Dosya Aç/Dizin Gir', - 'Edit File' => 'Edit File', + 'Edit File' => 'Dosya düzenle', 'Go to Parent Directory' => 'Üst Dizine Git', 'Select Current File' => 'Şuanki Dosyayı Seç', 'Select Bunch of Files' => 'Dosya Demetini Seç', @@ -732,7 +733,7 @@ $LANG['tr'] = array( 'every minute' => 'her dakika', 'every two minutes' => 'her iki dakikada bir', 'every' => 'her', - 'Generate' => 'Generate', + 'Generate' => 'Oluştur', 'webalizer' => 'webalizer', 'awstats' => 'awstats', @@ -746,14 +747,14 @@ $LANG['tr'] = array( 'PUB_KEY' => 'PUB_KEY', 'ISSUER' => 'ISSUER', - 'Use server hostname' => 'Use server hostname', - 'Use domain hostname' => 'Use domain hostname', - 'Use STARTTLS' => 'Use STARTTLS', - 'Use SSL / TLS' => 'Use SSL / TLS', - 'No encryption' => 'No encryption', - 'Do not use encryption' => 'Do not use encryption', + 'Use server hostname' => 'Sunucu adını kullan', + 'Use domain hostname' => 'Alan adını kullan', + 'Use STARTTLS' => 'STARTTLS Kullan', + 'Use SSL / TLS' => 'SSL / TLS Kullan', + 'No encryption' => 'Şifreleme yok', + 'Do not use encryption' => 'Şifreleme kullanma', - 'maximum characters length, including prefix' => 'maximum %s characters length, including prefix', + 'maximum characters length, including prefix' => 'önek dahil maksimum %s karakter uzunluğu', - 'Email Credentials' => 'Email Credentials', + 'Email Credentials' => 'E-posta Kimlik Bilgileri', ); From 164ea90d53a92253ffd1b569292fefd6726f3a6c Mon Sep 17 00:00:00 2001 From: Umut Korkmaz Date: Sat, 4 Feb 2023 02:45:31 +0300 Subject: [PATCH 100/583] Added missing fields --- web/inc/i18n/ar.php | 1 + web/inc/i18n/az.php | 1 + web/inc/i18n/bg.php | 7 ++++++- web/inc/i18n/bs.php | 1 + web/inc/i18n/cn.php | 1 + web/inc/i18n/cz.php | 1 + web/inc/i18n/da.php | 1 + web/inc/i18n/de.php | 1 + web/inc/i18n/el.php | 1 + web/inc/i18n/en.php | 1 + web/inc/i18n/es.php | 1 + web/inc/i18n/fa.php | 1 + web/inc/i18n/fi.php | 1 + web/inc/i18n/fr.php | 1 + web/inc/i18n/hu.php | 1 + web/inc/i18n/id.php | 1 + web/inc/i18n/it.php | 1 + web/inc/i18n/ja.php | 1 + web/inc/i18n/ka.php | 1 + web/inc/i18n/ko.php | 1 + web/inc/i18n/nl.php | 1 + web/inc/i18n/no.php | 1 + web/inc/i18n/pl.php | 1 + web/inc/i18n/pt-BR.php | 1 + web/inc/i18n/pt.php | 1 + web/inc/i18n/ro.php | 1 + web/inc/i18n/ru.php | 1 + web/inc/i18n/se.php | 1 + web/inc/i18n/sr.php | 1 + web/inc/i18n/th.php | 3 ++- web/inc/i18n/tr.php | 1 + web/inc/i18n/tw.php | 1 + web/inc/i18n/ua.php | 1 + web/inc/i18n/ur.php | 5 ++++- web/inc/i18n/vi.php | 1 + 35 files changed, 44 insertions(+), 3 deletions(-) diff --git a/web/inc/i18n/ar.php b/web/inc/i18n/ar.php index e50cfec7..927f9576 100644 --- a/web/inc/i18n/ar.php +++ b/web/inc/i18n/ar.php @@ -196,6 +196,7 @@ $LANG['ar'] = array( 'SSL Home Directory' => 'المجلد الرئيسي لـ SSL', 'Lets Encrypt Support' => 'دعم Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'سوف يتم اصدار الترخيص الخاص بك خلال 5 دقائق', 'Proxy Support' => 'دغم بروكسي', 'Proxy Extensions' => 'توسعات بروكسي', diff --git a/web/inc/i18n/az.php b/web/inc/i18n/az.php index 715043a0..929d5d29 100644 --- a/web/inc/i18n/az.php +++ b/web/inc/i18n/az.php @@ -187,6 +187,7 @@ $LANG['az'] = array( 'SSL Home Directory' => 'SSL Ana qovluğu', 'Lets Encrypt Support' => 'Lets Encrypt dəstəyi', 'Lets Encrypt' => 'Şifrələ', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Sənədiniz avtomatik olaraq 5 dəqiqə ərzində veriləcək', 'Proxy Support' => 'Proxy dəstəyi', 'Proxy Extensions' => 'Proxy əlavələri', diff --git a/web/inc/i18n/bg.php b/web/inc/i18n/bg.php index 642e6cfa..4baf8f2f 100644 --- a/web/inc/i18n/bg.php +++ b/web/inc/i18n/bg.php @@ -40,6 +40,8 @@ $LANG['bg'] = array( 'NETWORK' => 'МРЕЖА', 'Web Log Manager' => 'МЕНИДЖЪР НА УЕБ ЛОГОВЕ', + 'no notifications' => 'no notifications', + 'Add User' => 'Добави потребител', 'Add Domain' => 'Добави домейн', 'Add Web Domain' => 'Добави уеб домейн', @@ -107,6 +109,7 @@ $LANG['bg'] = array( 'disable autoupdate' => 'забрани автоматичното обновяване', 'turn on notifications' => 'включи известията', 'turn off notifications' => 'изключи известията', + 'configure' => 'configure', 'Adding User' => 'Добавяне на потребител', 'Editing User' => 'Редактиране на потребител', @@ -191,6 +194,8 @@ $LANG['bg'] = array( 'SSL Home Directory' => 'SSL начало', 'Lets Encrypt Support' => 'Lets Encrypt поддръжка', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', + 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Прокси поддръжка', 'Proxy Extensions' => 'Прокси разширения', 'Web Statistics' => 'Уеб статистики', @@ -688,7 +693,7 @@ $LANG['bg'] = array( 'Select Bunch of Files' => 'Избери няколко файла', 'Add File to the Current Selection' => 'Добави файла към текущата селекция', 'Select All Files' => 'Избери всички файлове', - 'shortcuts are inspired by magnificent GNU Midnight Commander файлов мениджър' => + 'shortcuts are inspired by magnificent GNU Midnight Commander file manager' => 'преките пътища са вдъхновени от великолепният GNU Midnight Commander файлов мениджър', 'Licence Key' => 'Лицензен ключ', 'Enter License Key' => 'Въведете лицензен ключ', diff --git a/web/inc/i18n/bs.php b/web/inc/i18n/bs.php index 4e2f32e1..8f515153 100644 --- a/web/inc/i18n/bs.php +++ b/web/inc/i18n/bs.php @@ -195,6 +195,7 @@ $LANG['bs'] = array( 'SSL Home Directory' => 'SSL direktorij', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy podrška', 'Proxy Extensions' => 'Proxy ekstenzije', diff --git a/web/inc/i18n/cn.php b/web/inc/i18n/cn.php index 389e8c1e..9276cd83 100644 --- a/web/inc/i18n/cn.php +++ b/web/inc/i18n/cn.php @@ -201,6 +201,7 @@ $LANG['cn'] = array( 'SSL Home Directory' => 'SSL主目录', 'Lets Encrypt Support' => '采用 Let's Encrypt', 'Lets Encrypt' => 'Let's Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => '证书将在5分钟内自动完成签发', 'Proxy Support' => '反向代理', 'Proxy Extensions' => '需代理的文件扩展名', diff --git a/web/inc/i18n/cz.php b/web/inc/i18n/cz.php index 9a0cac79..9237444e 100644 --- a/web/inc/i18n/cz.php +++ b/web/inc/i18n/cz.php @@ -196,6 +196,7 @@ $LANG['cz'] = array( 'SSL Home Directory' => 'SSL home adresář', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy podpora', 'Proxy Extensions' => 'Proxy rozšíření', diff --git a/web/inc/i18n/da.php b/web/inc/i18n/da.php index 6e0fab72..92f1ee78 100644 --- a/web/inc/i18n/da.php +++ b/web/inc/i18n/da.php @@ -197,6 +197,7 @@ $LANG['da'] = array( 'SSL Home Directory' => 'SSL Home', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy Support', 'Proxy Extensions' => 'Proxy Tilføjelser', diff --git a/web/inc/i18n/de.php b/web/inc/i18n/de.php index 17d1101f..2e6cf9f3 100644 --- a/web/inc/i18n/de.php +++ b/web/inc/i18n/de.php @@ -195,6 +195,7 @@ $LANG['de'] = array( 'SSL Home Directory' => 'SSL Homeverzeichnis', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy Unterstützung', 'Proxy Extensions' => 'Proxy Erweiterungen', diff --git a/web/inc/i18n/el.php b/web/inc/i18n/el.php index bef89086..66b6532a 100644 --- a/web/inc/i18n/el.php +++ b/web/inc/i18n/el.php @@ -197,6 +197,7 @@ $LANG['el'] = array( 'SSL Home Directory' => 'Αρχικός Κατάλογος SSL', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Υποστήριξη Proxy', 'Proxy Extensions' => 'Πρόσθετα Proxy', diff --git a/web/inc/i18n/en.php b/web/inc/i18n/en.php index d7ae290d..39c3bfff 100644 --- a/web/inc/i18n/en.php +++ b/web/inc/i18n/en.php @@ -195,6 +195,7 @@ $LANG['en'] = array( 'SSL Home Directory' => 'SSL Home', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy Support', 'Proxy Extensions' => 'Proxy Extensions', diff --git a/web/inc/i18n/es.php b/web/inc/i18n/es.php index 6e5ce352..3a8ae573 100644 --- a/web/inc/i18n/es.php +++ b/web/inc/i18n/es.php @@ -203,6 +203,7 @@ $LANG['es'] = array( 'SSL Home Directory' => 'Directorio local del SSL', 'Lets Encrypt Support' => 'Soportar Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Tu certificado será emitido automáticamente en 5 minutos', 'Proxy Support' => 'Soportar Proxy', 'Proxy Extensions' => 'Extensiones Proxy', diff --git a/web/inc/i18n/fa.php b/web/inc/i18n/fa.php index 8355691a..1778b5b8 100644 --- a/web/inc/i18n/fa.php +++ b/web/inc/i18n/fa.php @@ -190,6 +190,7 @@ $LANG['fa'] = array( 'SSL Home Directory' => 'پوشه خانه SSL', 'Lets Encrypt Support' => 'پشتیبانی از Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'گواهینامه شما به صورت خودکار در طی 5 دقیقه صادر خواهد شد', 'Proxy Support' => 'پشتیبانی پراکسی', 'Proxy Extensions' => 'فرمت های پراکسی', diff --git a/web/inc/i18n/fi.php b/web/inc/i18n/fi.php index 951f8da3..8b7d33e2 100644 --- a/web/inc/i18n/fi.php +++ b/web/inc/i18n/fi.php @@ -197,6 +197,7 @@ $LANG['fi'] = array( 'SSL Home Directory' => 'SSL-kotihakemisto', 'Lets Encrypt Support' => 'Lets Encrypt Tuki', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikaattisi käsitellään viiden minuutin sisään', 'Proxy Support' => 'Proxy-tuki', 'Proxy Extensions' => 'Proxy-laajennukset', diff --git a/web/inc/i18n/fr.php b/web/inc/i18n/fr.php index 4e2e3144..5a68a58a 100644 --- a/web/inc/i18n/fr.php +++ b/web/inc/i18n/fr.php @@ -195,6 +195,7 @@ $LANG['fr'] = array( 'SSL Home Directory' => 'Racine SSL', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Support Proxy', 'Proxy Extensions' => 'Extensions Proxy', diff --git a/web/inc/i18n/hu.php b/web/inc/i18n/hu.php index 1c37f93f..c0ac0a41 100644 --- a/web/inc/i18n/hu.php +++ b/web/inc/i18n/hu.php @@ -199,6 +199,7 @@ $LANG['hu'] = array( 'SSL Home Directory' => 'SSL kezdőlap', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy támogatás', 'Proxy Extensions' => 'Proxy kiterjesztések', diff --git a/web/inc/i18n/id.php b/web/inc/i18n/id.php index dd870f0d..7b43c044 100644 --- a/web/inc/i18n/id.php +++ b/web/inc/i18n/id.php @@ -196,6 +196,7 @@ $LANG['id'] = array( 'SSL Home Directory' => 'Direktori Home SSL', 'Lets Encrypt Support' => 'Dukungan Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikat anda akan otomatis diterbitkan dalam 5 menit', 'Proxy Support' => 'Dukungan Proxy', 'Proxy Extensions' => 'Ekstensi Proxy', diff --git a/web/inc/i18n/it.php b/web/inc/i18n/it.php index 1e104c51..91296d8b 100644 --- a/web/inc/i18n/it.php +++ b/web/inc/i18n/it.php @@ -196,6 +196,7 @@ $LANG['it'] = array( 'SSL Home Directory' => 'SSL Home', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Supporto Proxy', 'Proxy Extensions' => 'Estensioni Proxy', diff --git a/web/inc/i18n/ja.php b/web/inc/i18n/ja.php index a592fd7b..c0e9e541 100644 --- a/web/inc/i18n/ja.php +++ b/web/inc/i18n/ja.php @@ -195,6 +195,7 @@ $LANG['ja'] = array( 'SSL Home Directory' => 'SSLホームディレクトリ', 'Lets Encrypt Support' => "Let's Encryptのサポート", 'Lets Encrypt' => "Let's Encrypt", + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => '証明書は5分以内に自動的に発行されます', 'Proxy Support' => 'プロキシのサポート', 'Proxy Extensions' => 'プロキシ対象拡張子', diff --git a/web/inc/i18n/ka.php b/web/inc/i18n/ka.php index 1512e06c..f82e2305 100644 --- a/web/inc/i18n/ka.php +++ b/web/inc/i18n/ka.php @@ -195,6 +195,7 @@ $LANG['ka'] = array( 'SSL Home Directory' => 'SSL მთავარი დირექტორია', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'პროქსის მხარდაჭერა', 'Proxy Extensions' => 'პროქსის გაფართოებები', diff --git a/web/inc/i18n/ko.php b/web/inc/i18n/ko.php index 1b09de25..e81ab4b0 100644 --- a/web/inc/i18n/ko.php +++ b/web/inc/i18n/ko.php @@ -195,6 +195,7 @@ $LANG['ko'] = array( 'SSL Home Directory' => 'SSL 홈 디렉토리', 'Lets Encrypt Support' => 'Lets Encrypt 지원', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => '인증서는 5분 안에 자동으로 발급될 것입니다', 'Proxy Support' => '프록시 지원', 'Proxy Extensions' => '프록시 확장', diff --git a/web/inc/i18n/nl.php b/web/inc/i18n/nl.php index b5d68ec4..3b4fde10 100644 --- a/web/inc/i18n/nl.php +++ b/web/inc/i18n/nl.php @@ -198,6 +198,7 @@ $LANG['nl'] = array( 'SSL Home Directory' => 'SSL Map', 'Lets Encrypt Support' => 'Lets Encrypt Ondersteuning', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Het certificaat wordt automatisch aangemaakt in 5 minuten', 'Proxy Support' => 'Proxy Ondersteuning', 'Proxy Extensions' => 'Proxy Extensies', diff --git a/web/inc/i18n/no.php b/web/inc/i18n/no.php index fe026f39..30cc9306 100644 --- a/web/inc/i18n/no.php +++ b/web/inc/i18n/no.php @@ -196,6 +196,7 @@ $LANG['no'] = array( 'SSL Home Directory' => 'SSL Hjem', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Proxy Støtte', 'Proxy Extensions' => 'Proxy Utvidelser', diff --git a/web/inc/i18n/pl.php b/web/inc/i18n/pl.php index e649a22c..a6376c1f 100644 --- a/web/inc/i18n/pl.php +++ b/web/inc/i18n/pl.php @@ -196,6 +196,7 @@ $LANG['pl'] = array( 'SSL Home Directory' => 'Folder główny SSL', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Wsparcie dla Proxy', 'Proxy Extensions' => 'Rozszerzenia Proxy', diff --git a/web/inc/i18n/pt-BR.php b/web/inc/i18n/pt-BR.php index 303ae53f..b6716ef0 100644 --- a/web/inc/i18n/pt-BR.php +++ b/web/inc/i18n/pt-BR.php @@ -195,6 +195,7 @@ $LANG['pt-BR'] = array( 'SSL Home Directory' => 'Diretório Home SSL', 'Lets Encrypt Support' => 'Suporte Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Seu certificado será gerado automaticamente em 5 minutos', 'Proxy Support' => 'Suporte ao Proxy', 'Proxy Extensions' => 'Extensões do Proxy', diff --git a/web/inc/i18n/pt.php b/web/inc/i18n/pt.php index 02d3bf51..57366dbc 100644 --- a/web/inc/i18n/pt.php +++ b/web/inc/i18n/pt.php @@ -195,6 +195,7 @@ $LANG['pt'] = array( 'SSL Home Directory' => 'Diretório Home SSL', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Suporte ao Proxy', 'Proxy Extensions' => 'Extenções do Proxy', diff --git a/web/inc/i18n/ro.php b/web/inc/i18n/ro.php index 5b70f5d5..4b4104bd 100644 --- a/web/inc/i18n/ro.php +++ b/web/inc/i18n/ro.php @@ -197,6 +197,7 @@ $LANG['ro'] = array( 'SSL Home Directory' => 'Director SSL', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Suport Proxy', 'Proxy Extensions' => 'Extensii Proxy', diff --git a/web/inc/i18n/ru.php b/web/inc/i18n/ru.php index 58829fad..5b634db3 100644 --- a/web/inc/i18n/ru.php +++ b/web/inc/i18n/ru.php @@ -197,6 +197,7 @@ $LANG['ru'] = array( 'SSL Home Directory' => 'Директория SSL', 'Lets Encrypt Support' => 'Поддержка Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Сертификат будет автоматически создан в течение 5-ти минут', 'Proxy Support' => 'Поддержка Proxy', 'Proxy Extensions' => 'Обработка Proxy', diff --git a/web/inc/i18n/se.php b/web/inc/i18n/se.php index 96c5af9c..fc70440e 100644 --- a/web/inc/i18n/se.php +++ b/web/inc/i18n/se.php @@ -195,6 +195,7 @@ $LANG['se'] = array( 'SSL Home Directory' => 'Hemmakatalog för SSL', 'Lets Encrypt Support' => 'Lets Encrypt Support', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Your certificate will be automatically issued in 5 minutes', 'Proxy Support' => 'Nginx-stöd', 'Proxy Extensions' => 'Nginx-tillägg', diff --git a/web/inc/i18n/sr.php b/web/inc/i18n/sr.php index dc215f26..3dfcc0f5 100644 --- a/web/inc/i18n/sr.php +++ b/web/inc/i18n/sr.php @@ -195,6 +195,7 @@ $LANG['sr'] = array( 'SSL Home Directory' => 'SSL direktorijum', 'Lets Encrypt Support' => 'Lets Encrypt podrška', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Vaš sertifikat će biti automatski generisan za 5 minuta', 'Proxy Support' => 'Proxy podrška', 'Proxy Extensions' => 'Proxy ekstenzije', diff --git a/web/inc/i18n/th.php b/web/inc/i18n/th.php index 2878192f..63350f02 100644 --- a/web/inc/i18n/th.php +++ b/web/inc/i18n/th.php @@ -198,6 +198,7 @@ $LANG['th'] = array( 'SSL Home Directory' => 'ไดเร็กทอรี่หลักของ SSL', 'Lets Encrypt Support' => 'สนับสนุน Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'ใบรับรองของคุณจะได้รับการออกโดยอัตโนมัติภายใน 5 นาที', 'Proxy Support' => 'สนับสนุน Proxy', 'Proxy Extensions' => 'ส่วนขยาย Proxy', @@ -704,7 +705,7 @@ $LANG['th'] = array( 'Enter License Key' => 'กรอก License Key', 'Buy Licence' => 'ซื้อ License', 'Buy Lifetime License' => 'ซื้อ License แบบถาวร', - 'Disable and Cancel License' => 'ปิดการใช้งาน และยกเลิก License', + 'Disable and Cancel Licence' => 'ปิดการใช้งาน และยกเลิก License', 'Licence Activated' => 'เปิดใช้งาน License แล้ว', 'Licence Deactivated' => 'ปิดการใช้งาน License แล้ว', 'Restrict users so that they cannot use SSH and access only their home directory.' => 'จำกัดผู้ใช้เพื่อไม่ให้ใช้ SSH และเข้าถึงไดเร็กทอรี่ของตนเองเท่านั้น', diff --git a/web/inc/i18n/tr.php b/web/inc/i18n/tr.php index 7aac0098..4b1ff8a4 100644 --- a/web/inc/i18n/tr.php +++ b/web/inc/i18n/tr.php @@ -197,6 +197,7 @@ $LANG['tr'] = array( 'SSL Home Directory' => 'SSL Dizini', 'Lets Encrypt Support' => 'Lets Encrypt Desteği', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Sertifikanız 5 dakika içinde otomatik olarak verilecektir.', 'Proxy Support' => 'Proxy Desteği', 'Proxy Extensions' => 'Proxy Uzantıları', diff --git a/web/inc/i18n/tw.php b/web/inc/i18n/tw.php index 163bee62..145f465d 100644 --- a/web/inc/i18n/tw.php +++ b/web/inc/i18n/tw.php @@ -197,6 +197,7 @@ $LANG['tw'] = array( 'SSL Home Directory' => 'SSL 主目錄', 'Lets Encrypt Support' => 'Lets Encrypt 支援', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => '您的憑證會在五分鐘內完成簽發', 'Proxy Support' => 'Proxy 支援', 'Proxy Extensions' => 'Proxy 副檔名', diff --git a/web/inc/i18n/ua.php b/web/inc/i18n/ua.php index 136cc73f..d552b3f8 100644 --- a/web/inc/i18n/ua.php +++ b/web/inc/i18n/ua.php @@ -196,6 +196,7 @@ $LANG['ua'] = array( 'SSL Home Directory' => 'Домашня тека SSL', 'Lets Encrypt Support' => 'Підтримка Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Ваш сертифікат буде автоматично виданий протягом 5-ти хвилин', 'Proxy Support' => 'Підтримка Proxy', 'Proxy Extensions' => 'Розширення Proxy', diff --git a/web/inc/i18n/ur.php b/web/inc/i18n/ur.php index 2c95e821..87c11ed3 100644 --- a/web/inc/i18n/ur.php +++ b/web/inc/i18n/ur.php @@ -108,6 +108,8 @@ $LANG['ur'] = array( 'reread IP' => 'IP پھر سے پڑھنا', 'enable autoupdate' => 'آٹو اپ ڈیٹ کو چالو', 'disable autoupdate' => 'غیر فعال آٹو اپ ڈیٹ', + 'turn on notifications' => 'turn on notifications', + 'turn off notifications' => 'turn off notifications', 'configure' => 'ترتیب دے', 'Adding User' => 'شامل کرنے صارف', @@ -194,6 +196,7 @@ $LANG['ur'] = array( 'SSL Home Directory' => 'SSL ہوم', 'Lets Encrypt Support' => 'ینکریپٹ سپورٹ کی اجازت دیتا ہے', 'Lets Encrypt' => 'ینکریپٹ کی اجازت دیتا ہے', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'آپ کے سرٹیفکیٹ خود بخود 5 منٹ میں جاری کیا جائے گا', 'Proxy Support' => 'پراکسی سپورٹ', 'Proxy Extensions' => 'پراکسی ایکسٹنشن', @@ -747,7 +750,7 @@ $LANG['ur'] = array( 'Use server hostname' => 'سرور استعمال میزبان نام', 'Use domain hostname' => 'ڈومین کا استعمال میزبان نام', 'Use STARTTLS' => 'STARTTLS استعمال', - 'Use SSL' => 'SSL استعمال کریں', + 'Use SSL / TLS' => 'SSL استعمال کریں', 'No encryption' => 'کوئی خفیہ کاری', 'Do not use encryption' => 'خفیہ کاری کا استعمال نہ کریں', diff --git a/web/inc/i18n/vi.php b/web/inc/i18n/vi.php index 2de145b4..303bf8ac 100644 --- a/web/inc/i18n/vi.php +++ b/web/inc/i18n/vi.php @@ -198,6 +198,7 @@ $LANG['vi'] = array( 'SSL Home Directory' => 'Trang chủ SSL', 'Lets Encrypt Support' => 'Hỗ trợ Lets Encrypt', 'Lets Encrypt' => 'Lets Encrypt', + 'You can add LetsEncrypt after adding domain, just EDIT this domain later' => 'You can add LetsEncrypt after adding domain, just EDIT this domain later', 'Your certificate will be automatically issued in 5 minutes' => 'Chứng chỉ của bạn sẽ được tự động cấp phát trong 5 phút', 'Proxy Support' => 'Hỗ trợ Nginx', 'Proxy Extensions' => 'Phần mở rộng Nginx', From 87b821681284e7d9912aa50f195b880241184054 Mon Sep 17 00:00:00 2001 From: Umut Korkmaz Date: Sat, 4 Feb 2023 02:47:43 +0300 Subject: [PATCH 101/583] Duplicated fields removed --- web/inc/i18n/bg.php | 3 --- web/inc/i18n/ru.php | 1 - 2 files changed, 4 deletions(-) diff --git a/web/inc/i18n/bg.php b/web/inc/i18n/bg.php index 4baf8f2f..746963d3 100644 --- a/web/inc/i18n/bg.php +++ b/web/inc/i18n/bg.php @@ -707,9 +707,6 @@ $LANG['bg'] = array( 'This is a commercial module, you would need to purchace license key to enable it.' => 'Това е комерсиален модул, за чиито ползване е нужно да поръчате лицензионен ключ.', 'Minutes' => 'Минути', 'Hourly' => 'Всеки час', - 'Daily' => 'Всеки ден ', - 'Weekly' => 'Всяка седмица', - 'Monthly' => 'Всеки месец', 'Run Command' => 'Изпълни команда', 'every month' => 'всеки месец', 'every odd month' => 'всеки нечетен месец', diff --git a/web/inc/i18n/ru.php b/web/inc/i18n/ru.php index 5b634db3..ed8f116d 100644 --- a/web/inc/i18n/ru.php +++ b/web/inc/i18n/ru.php @@ -581,7 +581,6 @@ $LANG['ru'] = array( 'Vesta Control Panel Plugins' => 'Плагины Vesta Control Panel', 'preview' => 'предпросмотр', 'Reseller Role' => 'Реселлер', - 'Reseller Role' => 'Реселлер', 'Web Config Editor' => 'Веб Редактор Конфигов', 'Template Manager' => 'Менеджер Шаблонов', 'Backup Migration Manager' => 'Менеджер Миграции Бэкапов', From 71daf552e5c8ad0f59ac7246ee287d1d022a8edf Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 15:52:13 +0100 Subject: [PATCH 102/583] Cleaning /hdd/home --- bin/v-clean-garbage | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index 15b1a5ae..873c8450 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -24,15 +24,23 @@ find /usr/local/vesta/log/ -type f -name "*.log" -exec truncate -s 0 {} \; find /usr/local/vesta/log/ -type f -not -name "*.log" -delete find /var/log/exim4/ -type f -exec truncate -s 0 {} \; -find /home/*/web/*/public_html/wp-content/aiowps_backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete -find /home/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete -find /home/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete -find /home/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete -find /home/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete -find /home/*/web/*/public_html/ -type f -name "*.wpress" -delete -find /home/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; -find /home/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; -find /home/ -type f -name "*.log" -exec truncate -s 0 {} \; +clean_home() { + find $1/*/web/*/public_html/wp-content/aiowps_backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/ezpz-one-click-backup/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/ -type f -name "*.wpress" -delete + find $1/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; + find $1/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; + find $1/ -type f -name "*.log" -exec truncate -s 0 {} \; +} + +clean_home "/home" +if [ -d "/hdd/home" ]; then + clean_home "/hdd/home" +fi fail2ban_running=$(/usr/local/vesta/bin/v-list-sys-services | grep 'fail2ban' | grep -c 'running') if [ $fail2ban_running -eq 1 ]; then From 6d9c6d473490f422de56e71ba0bddf78f8c90e9f Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:05:00 +0100 Subject: [PATCH 103/583] Update v-clean-garbage --- bin/v-clean-garbage | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index 873c8450..92c5e840 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -1,7 +1,23 @@ #!/bin/bash +# info: Clean all unnecessary files like logs +# options: NONE +# +# The function is cleaning all unnecessary files like logs -nice -n 19 ionice -c 3 find /home/*/tmp/ -type f -delete -find /home/ -name '.wp-cli' -type d -exec rm -rf {} \; + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ]; then + echo "You must be root to execute this script" + exit 1 +fi + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# rm /var/backups/* rm /var/cache/apt/archives/* @@ -25,6 +41,8 @@ find /usr/local/vesta/log/ -type f -not -name "*.log" -delete find /var/log/exim4/ -type f -exec truncate -s 0 {} \; clean_home() { + nice -n 19 ionice -c 3 find $1/*/tmp/ -type f -delete + find $1/ -name '.wp-cli' -type d -exec rm -rf {} \; find $1/*/web/*/public_html/wp-content/aiowps_backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete @@ -32,9 +50,9 @@ clean_home() { find $1/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/ezpz-one-click-backup/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/ -type f -name "*.wpress" -delete - find $1/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; - find $1/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; - find $1/ -type f -name "*.log" -exec truncate -s 0 {} \; + nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; + nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; + nice -n 19 ionice -c 3 find $1/ -type f -name "*.log" -exec truncate -s 0 {} \; } clean_home "/home" @@ -42,6 +60,7 @@ if [ -d "/hdd/home" ]; then clean_home "/hdd/home" fi +# Cleaning fail2ban database fail2ban_running=$(/usr/local/vesta/bin/v-list-sys-services | grep 'fail2ban' | grep -c 'running') if [ $fail2ban_running -eq 1 ]; then systemctl stop fail2ban @@ -53,4 +72,12 @@ if [ $fail2ban_running -eq 1 ]; then systemctl start fail2ban fi +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + echo "=== Garbage cleaned ===" + +log_event "$OK" "$ARGUMENTS" + +exit From a10f82af3064dc8639989314d36f4d45cbb198ab Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:11:15 +0100 Subject: [PATCH 104/583] Create v-update-myvesta --- bin/v-update-myvesta | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 bin/v-update-myvesta diff --git a/bin/v-update-myvesta b/bin/v-update-myvesta new file mode 100644 index 00000000..9df80894 --- /dev/null +++ b/bin/v-update-myvesta @@ -0,0 +1,33 @@ +#!/bin/bash +# info: Get the very latest build of myVesta +# options: NONE +# +# The function is downloading the very latest build of myVesta + +#----------------------------------------------------------# +# Verifications # +#----------------------------------------------------------# + +whoami=$(whoami) +if [ "$whoami" != "root" ]; then + echo "You must be root to execute this script" + exit 1 +fi + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +rm /var/cache/apt/archives/vesta_* > /dev/null 2>&1 +apt-get update +apt-get install --reinstall vesta + +#----------------------------------------------------------# +# Vesta # +#----------------------------------------------------------# + +echo "=== myVesta updated ===" + +log_event "$OK" "$ARGUMENTS" + +exit From 5007cc2edfe84d450b4104ff95baaca3b80d48a9 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:17:46 +0100 Subject: [PATCH 105/583] Update v-update-myvesta --- bin/v-update-myvesta | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bin/v-update-myvesta b/bin/v-update-myvesta index 9df80894..50ea49a0 100644 --- a/bin/v-update-myvesta +++ b/bin/v-update-myvesta @@ -5,7 +5,7 @@ # The function is downloading the very latest build of myVesta #----------------------------------------------------------# -# Verifications # +# Verifications & Variable & Function # #----------------------------------------------------------# whoami=$(whoami) @@ -14,6 +14,9 @@ if [ "$whoami" != "root" ]; then exit 1 fi +# Includes +source /usr/local/vesta/func/main.sh + #----------------------------------------------------------# # Action # #----------------------------------------------------------# From 43ebf79c34d32efaafe850aaa1ab8d5f915147ce Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:19:10 +0100 Subject: [PATCH 106/583] Update v-clean-garbage --- bin/v-clean-garbage | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index 92c5e840..b53b2509 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -4,9 +4,8 @@ # # The function is cleaning all unnecessary files like logs - #----------------------------------------------------------# -# Verifications # +# Verifications & Variable & Function # #----------------------------------------------------------# whoami=$(whoami) @@ -15,6 +14,9 @@ if [ "$whoami" != "root" ]; then exit 1 fi +# Includes +source /usr/local/vesta/func/main.sh + #----------------------------------------------------------# # Action # #----------------------------------------------------------# From cf5b5325d6b014a2320793ab8f9facaec6f41bee Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:32:14 +0100 Subject: [PATCH 107/583] Update v-clean-garbage --- bin/v-clean-garbage | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index b53b2509..d4c47267 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -22,7 +22,7 @@ source /usr/local/vesta/func/main.sh #----------------------------------------------------------# rm /var/backups/* -rm /var/cache/apt/archives/* +rm /var/cache/apt/archives/* > /dev/null 2>&1 cd /var/log truncate -s 0 xferlog lastlog faillog btmp syslog; find /var/log/ -name "*.log" -not -path "/var/log/apt/*" -type f -exec truncate -s 0 {} \; @@ -44,13 +44,13 @@ find /var/log/exim4/ -type f -exec truncate -s 0 {} \; clean_home() { nice -n 19 ionice -c 3 find $1/*/tmp/ -type f -delete - find $1/ -name '.wp-cli' -type d -exec rm -rf {} \; + find $1/ -name '.wp-cli' -type d -exec rm -rf {} \; > /dev/null 2>&1 find $1/*/web/*/public_html/wp-content/aiowps_backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete - find $1/*/web/*/public_html/wp-content/ezpz-one-click-backup/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/ezpz-one-click-backup/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 find $1/*/web/*/public_html/ -type f -name "*.wpress" -delete nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; From 65f626eda7b7a4a2707f42ce330ea5c8f02c603f Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:36:12 +0100 Subject: [PATCH 108/583] Update v-clean-garbage --- bin/v-clean-garbage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index d4c47267..c6d41ab9 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -50,7 +50,7 @@ clean_home() { find $1/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete find $1/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete - find $1/*/web/*/public_html/wp-content/ezpz-one-click-backup/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 + find $1/*/web/*/public_html/wp-content/plugins/ezpz-one-click-backup/backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 find $1/*/web/*/public_html/ -type f -name "*.wpress" -delete nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; From d6a84f37d2db6bd44383f5e9bab75f18aea68696 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:40:24 +0100 Subject: [PATCH 109/583] Update v-update-myvesta --- bin/v-update-myvesta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-update-myvesta b/bin/v-update-myvesta index 50ea49a0..c3eaf337 100644 --- a/bin/v-update-myvesta +++ b/bin/v-update-myvesta @@ -22,7 +22,7 @@ source /usr/local/vesta/func/main.sh #----------------------------------------------------------# rm /var/cache/apt/archives/vesta_* > /dev/null 2>&1 -apt-get update +apt-get update -o Dir::Etc::sourcelist="sources.list.d/vesta.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" > /usr/local/vesta/log/update-$package.log 2>&1 apt-get install --reinstall vesta #----------------------------------------------------------# From 94770a5f1220cbc75b4cd626222160fbcaf27e16 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 5 Feb 2023 16:43:14 +0100 Subject: [PATCH 110/583] Update v-clean-garbage --- bin/v-clean-garbage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index c6d41ab9..5b402653 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -21,7 +21,7 @@ source /usr/local/vesta/func/main.sh # Action # #----------------------------------------------------------# -rm /var/backups/* +rm /var/backups/* > /dev/null 2>&1 rm /var/cache/apt/archives/* > /dev/null 2>&1 cd /var/log truncate -s 0 xferlog lastlog faillog btmp syslog; From 33d0e6df9c100ae9edef9cfa607beaba9eadefeb Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Mon, 6 Feb 2023 15:57:07 +0100 Subject: [PATCH 111/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index 1b8561c3..08ff2ad8 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -83,11 +83,22 @@ fi echo "Proxy Template is ready" # Disabling wp-cron in wp-config.php -echo "Disabling WP-Cron in your wp-config.php..." -string="define( 'DISABLE_WP_CRON', true );" -line="define( 'DB_COLLATE', '' );" +string_disable="define( 'DISABLE_WP_CRON', true );" +string_enable="define( 'DISABLE_WP_CRON', false );" +line=" Date: Mon, 6 Feb 2023 18:34:10 +0100 Subject: [PATCH 112/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index 08ff2ad8..f6957975 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -83,23 +83,25 @@ fi echo "Proxy Template is ready" # Disabling wp-cron in wp-config.php +checkstring_disable="define('DISABLE_WP_CRON', true)" +checkstring_enable="define('DISABLE_WP_CRON', false)" string_disable="define( 'DISABLE_WP_CRON', true );" -string_enable="define( 'DISABLE_WP_CRON', false );" line=" Date: Fri, 10 Feb 2023 17:40:20 +0100 Subject: [PATCH 113/583] Update v-move-domain-and-database-to-account --- bin/v-move-domain-and-database-to-account | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/v-move-domain-and-database-to-account b/bin/v-move-domain-and-database-to-account index d055e361..6a97383d 100644 --- a/bin/v-move-domain-and-database-to-account +++ b/bin/v-move-domain-and-database-to-account @@ -42,6 +42,11 @@ fi USER_TO=$user +if [ ! -d "/backup" ]; then + echo "There is no /backup folder, creating it now..." + mkdir /backup +fi + #----------------------------------------------------------# # Action # #----------------------------------------------------------# From 6770d3bc4c619155e25698ff8373566a3b813bf4 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 10 Feb 2023 19:37:45 +0100 Subject: [PATCH 114/583] Fix for /backup --- bin/v-change-database-owner | 4 ++++ bin/v-move-domain-and-database-to-account | 5 ----- install/vst-install-debian.sh | 2 ++ 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/bin/v-change-database-owner b/bin/v-change-database-owner index d84d8eb2..983f7cb1 100755 --- a/bin/v-change-database-owner +++ b/bin/v-change-database-owner @@ -60,6 +60,10 @@ if [ ! -z "$check_db" ]; then exit $E_EXISTS fi +if [ ! -d "/backup" ]; then + echo "There is no /backup folder, creating it now..." + mkdir /backup +fi #----------------------------------------------------------# # Action # diff --git a/bin/v-move-domain-and-database-to-account b/bin/v-move-domain-and-database-to-account index 6a97383d..d055e361 100644 --- a/bin/v-move-domain-and-database-to-account +++ b/bin/v-move-domain-and-database-to-account @@ -42,11 +42,6 @@ fi USER_TO=$user -if [ ! -d "/backup" ]; then - echo "There is no /backup folder, creating it now..." - mkdir /backup -fi - #----------------------------------------------------------# # Action # #----------------------------------------------------------# diff --git a/install/vst-install-debian.sh b/install/vst-install-debian.sh index 650fa241..4349a56d 100755 --- a/install/vst-install-debian.sh +++ b/install/vst-install-debian.sh @@ -595,6 +595,8 @@ fi # Backup # #----------------------------------------------------------# +mkdir /backup + echo "=== Creating backup directory tree" mkdir -p $vst_backups cd $vst_backups From a28436e6e8bdec0b0cd58de574365eb1b6a96086 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 11 Feb 2023 19:20:03 +0100 Subject: [PATCH 115/583] Update multi-php-install.sh --- src/deb/for-download/tools/multi-php-install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/multi-php-install.sh b/src/deb/for-download/tools/multi-php-install.sh index 58ec502d..14253444 100644 --- a/src/deb/for-download/tools/multi-php-install.sh +++ b/src/deb/for-download/tools/multi-php-install.sh @@ -54,7 +54,7 @@ if [ $# -gt 8 ]; then inst_81=$9 fi if [ $# -gt 9 ]; then - inst_82=$10 + inst_82=${10} fi if [ $inst_56 -eq 1 ] || [ $inst_70 -eq 1 ] || [ $inst_71 -eq 1 ] || [ $inst_72 -eq 1 ] || [ $inst_73 -eq 1 ] || [ $inst_74 -eq 1 ] || [ $inst_80 -eq 1 ] || [ $inst_81 -eq 1 ] || [ $inst_82 -eq 1 ]; then From e0b90ef9d65c7e7a3756920f0f8f9bfa50204c7b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 11 Feb 2023 19:43:58 +0100 Subject: [PATCH 116/583] v-install-wordpress: Check if MariaDB allows long database name --- bin/v-install-wordpress | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index 0e24f847..4bf82c5f 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -26,6 +26,7 @@ USER=$user # Includes source /usr/local/vesta/func/main.sh source /usr/local/vesta/func/db.sh +source /usr/local/vesta/conf/vesta.conf if [ -z "$user" ]; then check_result $E_NOTEXIST "domain $domain doesn't exist" @@ -49,7 +50,11 @@ is_object_unsuspended 'user' 'USER' "$user" source /usr/local/vesta/func/handle_parameters.sh if [ -z "$database" ]; then - database=$(echo "$domain" | sed 's#\.#_#g') + if [ ! -z "$MAX_DBUSER_LEN" ] && [ "$MAX_DBUSER_LEN" -ge 80 ]; then + database=$(echo "$domain" | sed 's#\.#_#g') + else + database="wp" + fi fi if [ -z "$email" ]; then From 7fe91ca4c98e1731f084977674c20f455706244d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 11 Feb 2023 20:29:14 +0100 Subject: [PATCH 117/583] v-clone-website: By default cloning to DB: user_domain_com instead of cloning to database: user_old_db_migrated --- bin/v-clone-website | 66 ++++++++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 27 deletions(-) diff --git a/bin/v-clone-website b/bin/v-clone-website index 2c38eef9..262d1a15 100644 --- a/bin/v-clone-website +++ b/bin/v-clone-website @@ -9,7 +9,7 @@ if [ $# -lt 2 ]; then echo "USAGE: v-clone-website FROM_DOMAIN TO_DOMAIN" echo "Available parameters:" - echo "--DATABASE_SUFIX=... (default is '_migrated')" + echo "--DATABASE_SUFIX=... (will be added to database name)" echo "--TO_DATABASE=... (this will override --TO_DATABASE_NAME, --TO_DATABASE_USERNAME and --DATABASE_SUFIX)" echo "--FROM_DATABASE_NAME=..." echo "--FROM_DATABASE_USERNAME=..." @@ -42,6 +42,7 @@ source /etc/profile # Includes source /usr/local/vesta/func/main.sh source /usr/local/vesta/func/db.sh +source /usr/local/vesta/conf/vesta.conf FROM_DATABASE_NAME='' FROM_DATABASE_USERNAME='' @@ -55,6 +56,10 @@ SITE_SUBFOLDER='' SEARCH_FOR_CONFIGS_DATABASE_NAME='' SEARCH_FOR_CONFIGS_DATABASE_USERNAME='' +if [ ! -z "$MAX_DBUSER_LEN" ] && [ "$MAX_DBUSER_LEN" -ge 80 ]; then + DATABASE_SUFIX='' +fi + #----------------------------------------------------------# # Verifications # #----------------------------------------------------------# @@ -174,33 +179,40 @@ fi TO_CONFIG_FILE_FULL_PATH="$TO_FOLDER/$FROM_CONFIG_FILE" -LENGTH_OF_DATABASE_SUFIX=${#DATABASE_SUFIX} -if [ -z "$TO_DATABASE_NAME" ]; then - LENGTH_OF_TO_DATABASE_NAME=${#FROM_DATABASE_NAME} - START_FROM=$((LENGTH_OF_TO_DATABASE_NAME-LENGTH_OF_DATABASE_SUFIX)) - CHECK_PREFIX=${FROM_DATABASE_NAME:START_FROM} - if [ "$CHECK_PREFIX" = "${DATABASE_SUFIX}" ]; then - TO_DATABASE_NAME="${TO_USER}_${FROM_DATABASE_NAME_WITHOUT_PREFIX}" - LENGTH_OF_TO_DATABASE_NAME=${#TO_DATABASE_NAME} - CUT_TO=$((LENGTH_OF_TO_DATABASE_NAME-LENGTH_OF_DATABASE_SUFIX)) - TO_DATABASE_NAME=${TO_DATABASE_NAME:0:CUT_TO} - else - TO_DATABASE_NAME="${TO_USER}_${FROM_DATABASE_NAME_WITHOUT_PREFIX}${DATABASE_SUFIX}" - fi -fi -if [ -z "$TO_DATABASE_USERNAME" ]; then - LENGTH_OF_TO_DATABASE_USERNAME=${#FROM_DATABASE_USERNAME} - START_FROM=$((LENGTH_OF_TO_DATABASE_USERNAME-LENGTH_OF_DATABASE_SUFIX)) - CHECK_PREFIX=${FROM_DATABASE_USERNAME:START_FROM} - if [ "$CHECK_PREFIX" = "${DATABASE_SUFIX}" ]; then - TO_DATABASE_USERNAME="${TO_USER}_${FROM_DATABASE_USERNAME_WITHOUT_PREFIX}" - LENGTH_OF_TO_DATABASE_USERNAME=${#TO_DATABASE_USERNAME} - CUT_TO=$((LENGTH_OF_TO_DATABASE_USERNAME-LENGTH_OF_DATABASE_SUFIX)) - TO_DATABASE_USERNAME=${TO_DATABASE_USERNAME:0:CUT_TO} - else - TO_DATABASE_USERNAME="${TO_USER}_${FROM_DATABASE_USERNAME_WITHOUT_PREFIX}${DATABASE_SUFIX}" +if [ ! -z "$MAX_DBUSER_LEN" ] && [ "$MAX_DBUSER_LEN" -ge 80 ] && [ -z "$DATABASE_SUFIX" ]; then + TO_DATABASE_NAME=$(echo "$TO_DOMAIN" | sed 's#\.#_#g') + TO_DATABASE_NAME="${TO_USER}_$TO_DATABASE_NAME" + TO_DATABASE_USERNAME=$TO_DATABASE_NAME +else + LENGTH_OF_DATABASE_SUFIX=${#DATABASE_SUFIX} + if [ -z "$TO_DATABASE_NAME" ]; then + LENGTH_OF_TO_DATABASE_NAME=${#FROM_DATABASE_NAME} + START_FROM=$((LENGTH_OF_TO_DATABASE_NAME-LENGTH_OF_DATABASE_SUFIX)) + CHECK_PREFIX=${FROM_DATABASE_NAME:START_FROM} + if [ "$CHECK_PREFIX" = "${DATABASE_SUFIX}" ]; then + TO_DATABASE_NAME="${TO_USER}_${FROM_DATABASE_NAME_WITHOUT_PREFIX}" + LENGTH_OF_TO_DATABASE_NAME=${#TO_DATABASE_NAME} + CUT_TO=$((LENGTH_OF_TO_DATABASE_NAME-LENGTH_OF_DATABASE_SUFIX)) + TO_DATABASE_NAME=${TO_DATABASE_NAME:0:CUT_TO} + else + TO_DATABASE_NAME="${TO_USER}_${FROM_DATABASE_NAME_WITHOUT_PREFIX}${DATABASE_SUFIX}" + fi + fi + if [ -z "$TO_DATABASE_USERNAME" ]; then + LENGTH_OF_TO_DATABASE_USERNAME=${#FROM_DATABASE_USERNAME} + START_FROM=$((LENGTH_OF_TO_DATABASE_USERNAME-LENGTH_OF_DATABASE_SUFIX)) + CHECK_PREFIX=${FROM_DATABASE_USERNAME:START_FROM} + if [ "$CHECK_PREFIX" = "${DATABASE_SUFIX}" ]; then + TO_DATABASE_USERNAME="${TO_USER}_${FROM_DATABASE_USERNAME_WITHOUT_PREFIX}" + LENGTH_OF_TO_DATABASE_USERNAME=${#TO_DATABASE_USERNAME} + CUT_TO=$((LENGTH_OF_TO_DATABASE_USERNAME-LENGTH_OF_DATABASE_SUFIX)) + TO_DATABASE_USERNAME=${TO_DATABASE_USERNAME:0:CUT_TO} + else + TO_DATABASE_USERNAME="${TO_USER}_${FROM_DATABASE_USERNAME_WITHOUT_PREFIX}${DATABASE_SUFIX}" + fi fi fi + if [ ! -z "$TO_DATABASE" ]; then TO_DATABASE_USERNAME=$TO_DATABASE TO_DATABASE_NAME=$TO_DATABASE @@ -304,7 +316,7 @@ read -p "=== Press Enter to continue ===" if [ $CREATE_TO_USER -eq 1 ]; then pass=$(vesta_generate_pass 10) echo "=== Create user $TO_USER, pass=$pass" - /usr/local/vesta/bin/v-add-user "$TO_USER" "$pass" "info@$TO_DOMAIN" "default" "Migrated" "site" + /usr/local/vesta/bin/v-add-user "$TO_USER" "$pass" "info@$TO_DOMAIN" "default" "cloned" "site" fi if [ $CREATE_TO_DOMAIN -eq 1 ]; then From 5dedc1e8131e2491c578138d38f4c91fa6186e5f Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 11 Feb 2023 20:35:00 +0100 Subject: [PATCH 118/583] Checking for $CREATE_TO_DATABASE in v-clone-website --- bin/v-clone-website | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/bin/v-clone-website b/bin/v-clone-website index 262d1a15..df98c6db 100644 --- a/bin/v-clone-website +++ b/bin/v-clone-website @@ -271,6 +271,12 @@ else fi fi +CREATE_TO_DATABASE=0 +object=$(grep "DB='$TO_DATABASE_NAME'" $VESTA/data/users/$TO_USER/db.conf) +if [ -z "$object" ]; then + CREATE_TO_DATABASE=1 +fi + # ----------- PRINT ------------- echo "===============================================================================" @@ -299,6 +305,7 @@ echo "TO_DATABASE_USERNAME_WITHOUT_PREFIX = $TO_DATABASE_USERNAME_WITHOUT_PREF echo "DATABASE_SUFIX = $DATABASE_SUFIX" echo "CREATE_TO_USER = $CREATE_TO_USER" echo "CREATE_TO_DOMAIN = $CREATE_TO_DOMAIN" +echo "CREATE_TO_DATABASE = $CREATE_TO_DATABASE" echo "SHOULD_INSTALL_SSL = $SHOULD_INSTALL_SSL" echo "FROM_DOMAIN_TPL = $FROM_DOMAIN_TPL" echo "FROM_FPM_VER = $FROM_FPM_VER" @@ -316,7 +323,7 @@ read -p "=== Press Enter to continue ===" if [ $CREATE_TO_USER -eq 1 ]; then pass=$(vesta_generate_pass 10) echo "=== Create user $TO_USER, pass=$pass" - /usr/local/vesta/bin/v-add-user "$TO_USER" "$pass" "info@$TO_DOMAIN" "default" "cloned" "site" + /usr/local/vesta/bin/v-add-user "$TO_USER" "$pass" "info@$TO_DOMAIN" "default" "Cloned" "site" fi if [ $CREATE_TO_DOMAIN -eq 1 ]; then @@ -352,8 +359,7 @@ if [ ! -z "$FROM_DOMAIN_PROXY_TPL" ]; then /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$TO_USER" "$TO_DOMAIN" "$FROM_DOMAIN_PROXY_TPL" "$FROM_DOMAIN_PROXY_EXT" "yes" fi -object=$(grep "DB='$TO_DATABASE_NAME'" $VESTA/data/users/$TO_USER/db.conf) -if [ -z "$object" ]; then +if [ $CREATE_TO_DATABASE -eq 1 ]; then echo "=== Create database $TO_DATABASE_NAME" /usr/local/vesta/bin/v-add-database "$TO_USER" "$TO_DATABASE_NAME_WITHOUT_PREFIX" "$TO_DATABASE_USERNAME_WITHOUT_PREFIX" "$TO_DATABASE_PASSWORD" 'mysql' 'localhost' 'utf8' fi From 0ab6925adb4c63abc3618b3a8cc069d675873468 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 12 Feb 2023 15:59:45 +0100 Subject: [PATCH 119/583] Create v-commander --- bin/v-commander | 515 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 515 insertions(+) create mode 100644 bin/v-commander diff --git a/bin/v-commander b/bin/v-commander new file mode 100644 index 00000000..6fe05286 --- /dev/null +++ b/bin/v-commander @@ -0,0 +1,515 @@ +#!/bin/bash + +numargs=$# + +SHOWHEADER=0 +if [ $numargs -eq 0 ]; then + SHOWHEADER=1 +fi +if [ $numargs -eq 1 ] && [ "$1" = "q" ]; then + SHOWHEADER=1 +fi + + +source /etc/profile +PATH=$PATH:/usr/local/vesta/bin && export PATH +echo "======================= mvVesta-commander ================================" + +if [ -f /root/kernelupdate ]; then + rm /root/kernelupdate +fi +apt_upgraded=0 +quit_on_empty=0 + +if [ $SHOWHEADER -eq 1 ]; then + hostname + if [ -f "/root/current-status.txt" ]; then + echo "------------------ WAS LONG TIME AGO ------------------" + cat /root/current-status.txt + truncate -s 0 /root/current-status.txt + fi + echo -n 'Debian ' >> /root/current-status.txt && cat /etc/debian_version >> /root/current-status.txt + php -v | grep '^PHP' >> /root/current-status.txt + /usr/local/vesta/bin/v-list-sys-services >> /root/current-status.txt + /usr/local/vesta/bin/v-list-sys-web-status | grep "Server MPM:" >> /root/current-status.txt + w | grep 'load average' >> /root/current-status.txt + df -h | grep "/$" >> /root/current-status.txt + + echo "------------------------ NOW ------------------------" + cat /root/current-status.txt + echo "-----------------------------------------------------" + echo "(press 'h' for help)" + echo "" +fi + +check_status() { + echo "==============================================================" + hostname + echo "------------------------ WAS ------------------------" + cat /root/current-status.txt + echo "------------------------ NOW ------------------------" + hostname + echo -n 'Debian ' && cat /etc/debian_version + php -v | grep '^PHP' + /usr/local/vesta/bin/v-list-sys-services + /usr/local/vesta/bin/v-list-sys-web-status | grep "Server MPM:" + w | grep 'load average' + df -h | grep "/$" + echo "-----------------------------------------------------" +} + +myhelp() { + echo "---------- Press: -----------" + echo "u = apt-get update" + echo "g = apt-get upgrade" + echo "c = check status" + echo "e = make sure Apache is in mpm_event" + echo "s = download sury.org apt-get key" + echo "m = install php-memcached" + echo "p = set version of php as default" + echo "v = update myVesta" + echo "vo = update myVesta without 'apt-get update'" + echo "t = clean the trash" + echo "w = w" + echo "d = df -h" + echo "f = free -h" + echo "b = bash" + echo "r = reboot" + echo "q = quit" + echo "h = help" + echo "-----------------------------" + echo "inst v = install myVesta" + echo "inst p = install multi-php" + echo "inst pgw = install php-gate" + echo "inst r = install new Roundcube" + echo "dis fb = stop and disable fail2ban" + echo "dis dove = stop and disable dovecot" + echo "dis spam = stop and disable spam" + echo "dis clam = stop and disable clamav" + echo "p 7.0 = set default php 7.0" + echo "p 7.3 = set default php 7.3" + echo "p 7.4 = set default php 7.4" + echo "p def = set proper default php" + echo "e def = set mpm_event if needed" + echo "m def = install php-memcached if needed" + echo "check fc = check if FreshClam is up" + echo "-----------------------------" + echo "enable-ssh-root-password-login = Allow root password authentication via SSH and set the root password to match the password for the admin account" + echo "-----------------------------" +} + +COUNTER=0 + +while true +do + + COUNTER=$((COUNTER + 1)) + if [ $COUNTER -le $numargs ]; then + answer=$1 + shift + else + read -p 'What to do: ' answer + fi + + if [ "$answer" = 'prompt' ] || [ "$answer" = 'PROMPT' ]; then + echo "=============================" + echo "hostname: $HOSTNAME" + read -p 'What to do [or press Enter to continue]: ' answer + fi + + if [ "$answer" = '' ] && [ $quit_on_empty -eq 1 ]; then + answer='q' + fi + + if [ "$answer" = 'quit-on-empty' ]; then + echo "== the script will quit on next enter" + quit_on_empty=1 + fi + + if [ "$answer" = 'u' ] || [ "$answer" = 'U' ]; then + echo "=============================" + echo "== running: apt-get update" + release=$(cat /etc/debian_version | tr "." "\n" | head -n1) + if [ "$release" -lt 10 ]; then + apt-get update + else + apt-get update --allow-releaseinfo-change + fi + fi + + if [ "$answer" = 'g' ] || [ "$answer" = 'G' ]; then + echo "=============================" + echo "== running: apt-get upgrade" + + if [ $apt_upgraded -eq 0 ]; then + cp /var/log/apt/history.log /var/log/apt/history-`date +"%Y%m%d%H%M%S"`.log + truncate -s 0 /var/log/apt/history.log + fi + + apt-get -y --with-new-pkgs upgrade + apt-get -y dist-upgrade + apt_upgraded=1 + + kernelupdate=$(grep -c 'linux-image-' /var/log/apt/history.log) + if [ $kernelupdate -gt 0 ]; then + touch /root/kernelupdate + echo "== kernel is updated" + else + echo "== kernel is not updated" + fi + fi + + if [ "$answer" = 'c' ] || [ "$answer" = 'C' ]; then + check_status + fi + + if [ "$answer" = 's' ] || [ "$answer" = 'S' ]; then + if [ -f "/etc/apt/trusted.gpg.d/php.gpg" ]; then + echo "=============================" + echo "== renewing sury.org gpg key" + wget -nv -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg + fi + fi + + if [ "$answer" = 'e def' ] || [ "$answer" = 'E DEF' ]; then + release=$(cat /etc/debian_version | tr "." "\n" | head -n1) + echo "=============================" + echo "== checking if we need mpm_event mode" + echo "== detected Debian $release" + if [ "$release" -eq 10 ] || [ "$release" -eq 11 ] || [ -f "/root/switch-apache-to-event-mode.sh" ]; then + isevent=$(/usr/local/vesta/bin/v-list-sys-web-status | grep -c "Server MPM: event") + if [ $isevent -eq 0 ]; then + echo "== Apache should be switched to mpm_event mode" + answer='e' + else + echo "== Apache is already in mpm_event mode" + fi + fi + + fi + if [ "$answer" = 'e' ] || [ "$answer" = 'E' ]; then + echo "=============================" + echo "== switching to mpm_event mode" + apt-get -y remove libapache2-mod-php* + a2dismod ruid2 + a2dismod suexec + a2dismod php5.6 + a2dismod php7.0 + a2dismod php7.1 + a2dismod php7.2 + a2dismod php7.3 + a2dismod php7.4 + a2dismod php8.0 + a2dismod php8.1 + a2dismod php8.2 + a2dismod mpm_prefork + a2enmod mpm_event + systemctl restart apache2 + fi + + if [ "$answer" = 'dis fb' ] || [ "$answer" = 'DIS FB' ]; then + echo "=============================" + echo "== disabling fail2ban" + systemctl stop fail2ban + systemctl disable fail2ban + systemctl status fail2ban + fi + + if [ "$answer" = 'dis dove' ] || [ "$answer" = 'DIS DOVE' ]; then + echo "=============================" + echo "== disabling dovecot" + systemctl stop dovecot.service + systemctl stop dovecot.socket + systemctl disable dovecot.service + fi + + if [ "$answer" = 'dis clam' ] || [ "$answer" = 'DIS CLAM' ]; then + echo "=============================" + echo "== disabling ClamAV" + systemctl stop clamav-daemon.service + systemctl disable clamav-daemon.service + + systemctl stop clamav-freshclam.service + systemctl disable clamav-freshclam.service + + sed -i "s/^CLAMD =/#CLAMD =/g" /etc/exim4/exim4.conf.template + systemctl restart exim4 + fi + + if [ "$answer" = 'dis spam' ] || [ "$answer" = 'DIS SPAM' ]; then + echo "=============================" + echo "== disabling SpamAssassin" + systemctl stop spamassassin.service + systemctl disable spamassassin.service + + sed -i "s/^SPAMASSASSIN =/#SPAMASSASSIN =/g" /etc/exim4/exim4.conf.template + sed -i "s/^SPAM_SCORE =/#SPAM_SCORE =/g" /etc/exim4/exim4.conf.template + systemctl restart exim4 + fi + + if [ "$answer" = 'p' ] || [ "$answer" = 'P' ]; then + echo "=============================" + echo "== changing default php version" + update-alternatives --config php + echo "--- NEW ---" + php -v | grep '^PHP' + fi + + if [ "$answer" = 'p 7.0' ] || [ "$answer" = 'P 7.0' ]; then + echo "=============================" + echo "== changing default php version to 7.0" + update-alternatives --set php /usr/bin/php7.0 + echo "--- NEW ---" + php -v | grep '^PHP' + fi + + if [ "$answer" = 'p 7.3' ] || [ "$answer" = 'P 7.3' ]; then + echo "=============================" + echo "== changing default php version to 7.3" + update-alternatives --set php /usr/bin/php7.3 + echo "--- NEW ---" + php -v | grep '^PHP' + fi + + if [ "$answer" = 'p 7.4' ] || [ "$answer" = 'P 7.4' ]; then + echo "=============================" + echo "== changing default php version to 7.4" + update-alternatives --set php /usr/bin/php7.4 + echo "--- NEW ---" + php -v | grep '^PHP' + fi + + if [ "$answer" = 'p def' ] || [ "$answer" = 'P DEF' ]; then + echo "=============================" + echo "== checking if we need to change default php version" + automode=$(update-alternatives --display php | grep -c 'auto mode') + echo "=============================" + if [ $automode -ge 1 ]; then + echo "=== php auto mode detected" + release=$(cat /etc/debian_version | tr "." "\n" | head -n1) + echo "== detected Debian $release" + if [ "$release" -eq 8 ]; then + echo "== set default php 5" + update-alternatives --set php /usr/bin/php5 + fi + if [ "$release" -eq 9 ]; then + echo "== set default php 7.0" + update-alternatives --set php /usr/bin/php7.0 + fi + if [ "$release" -eq 10 ]; then + echo "== set default php 7.3" + update-alternatives --set php /usr/bin/php7.3 + fi + if [ "$release" -eq 11 ]; then + echo "== set default php 7.4" + update-alternatives --set php /usr/bin/php7.4 + fi + echo "--- NEW ---" + php -v | grep '^PHP' + else + echo "== php is already in manual mode" + php -v | grep '^PHP' + fi + fi + + + if [ "$answer" = 'v' ] || [ "$answer" = 'V' ]; then + echo "=============================" + echo "== updating myVesta" + if [ -f "/usr/local/vesta/bin/v-update-myvesta" ]; then + /usr/local/vesta/bin/v-update-myvesta + else + number_of_files=$(ls /var/cache/apt/archives/vesta_.* 2>/dev/null | wc -l) + if [ $number_of_files -gt 0 ]; then + rm /var/cache/apt/archives/vesta_* > /dev/null 2>&1 + fi + apt-get update -o Dir::Etc::sourcelist="sources.list.d/vesta.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" > /usr/local/vesta/log/update-$package.log 2>&1 + apt-get install --reinstall vesta + fi + fi + + if [ "$answer" = 'vo' ] || [ "$answer" = 'VO' ]; then + echo "=============================" + echo "== updating myVesta (without 'apt-get update')" + number_of_files=$(ls /var/cache/apt/archives/vesta_.* 2>/dev/null | wc -l) + if [ $number_of_files -gt 0 ]; then + rm /var/cache/apt/archives/vesta_* > /dev/null 2>&1 + fi + apt-get install --reinstall vesta + fi + + if [ "$answer" = 'vor' ] || [ "$answer" = 'VOR' ]; then + echo "=============================" + echo "== updating myVesta (without apt-get update and without reinstall)" + number_of_files=$(ls /var/cache/apt/archives/vesta_.* 2>/dev/null | wc -l) + if [ $number_of_files -gt 0 ]; then + rm /var/cache/apt/archives/vesta_* > /dev/null 2>&1 + fi + apt-get install vesta + fi + + if [ "$answer" = 't' ] || [ "$answer" = 'T' ]; then + echo "=============================" + echo "== cleaning trash" + df -m + ps -Af | grep tailf | grep -v "grep tailf" + if [ -f "/usr/local/bin/tailf_apache_error.php" ]; then + kill $(ps aux | grep 'tailf_apache_error' | grep -v "grep tailf_apache_error" | awk '{print $2}') + fi + if [ -f "/usr/local/bin/tailf_exim.php" ]; then + kill $(ps aux | grep 'tailf_exim' | grep -v "grep tailf_exim" | awk '{print $2}') + fi + echo "------" + ps -Af | grep tailf | grep -v "grep tailf" + echo "------" + sleep 2 + truncate -s 0 /*.log + rm /panic-*.log + rm /var/log/panic-*.log + /usr/local/vesta/bin/v-clean-garbage + sleep 2 + if [ -f "/usr/local/bin/tailf_apache_error.php" ]; then + nohup php /usr/local/bin/tailf_apache_error.php > /var/log/tailf_apache_error.log & + fi + if [ -f "/usr/local/bin/tailf_exim.php" ]; then + nohup php /usr/local/bin/tailf_exim.php > /var/log/tailf_exim.log & + fi + echo "--------------" + df -m + echo "--------------" + sleep 2 + ps -Af | grep tailf | grep -v "grep tailf" + fi + + if [ "$answer" = 'm def' ] || [ "$answer" = 'M DEF' ]; then + phpupdate=$(grep -c 'php' /var/log/apt/history.log) + if [ $phpupdate -gt 0 ]; then + answer='m' + fi + fi + + if [ "$answer" = 'm' ] || [ "$answer" = 'M' ]; then + echo "=============================" + echo "== installing php-memcache modules" + apt-get install -y $(systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcache ") + apt-get install -y $(systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcached ") + fi + + if [ "$answer" = 'd' ] || [ "$answer" = 'D' ]; then + echo "=============================" + echo "== running: df -h" + df -h + fi + + if [ "$answer" = 'f' ] || [ "$answer" = 'F' ]; then + echo "=============================" + echo "== running: free -h" + free -h + fi + + if [ "$answer" = 'w' ] || [ "$answer" = 'W' ]; then + echo "== running: free -h" + w + fi + + if [ "$answer" = 'inst p' ] || [ "$answer" = 'INST P' ]; then + echo "=============================" + echo "== installing new PHP versions" + cd /root + wget -nv -O /root/vesta-inst-php.sh https://c.myvestacp.com/tools/multi-php-install.sh + chmod u+x ./vesta-inst-php.sh + mcedit ./vesta-inst-php.sh + sudo ./vesta-inst-php.sh + fi + + if [ "$answer" = 'inst pgw' ] || [ "$answer" = 'INST PGW' ]; then + echo "=============================" + echo "== Installing phpgate" + wget -nv http://dl.myvestacp.com/vesta/install-phpgate.sh -O /root/install-phpgate.sh + chmod u+x /root/install-phpgate.sh + /root/install-phpgate.sh + fi + + if [ "$answer" = 'check fc' ] || [ "$answer" = 'CHECK FC' ]; then + echo "== Checking if FreshClam is up" + clamavup=$(/usr/local/vesta/bin/v-list-sys-services | grep 'clamav-daemon' | grep -c 'running') + freshclamdown=$(/usr/local/vesta/bin/v-list-sys-services | grep 'clamav-freshclam' | grep -c 'off') + if [ $clamavup -eq 1 ] && [ $freshclamdown -eq 1 ]; then + echo "== Starting FreshClam" + systemctl enable clamav-freshclam.service + systemctl start clamav-freshclam.service + fi + fi + + if [ "$answer" = 'enable-ssh-root-password-login' ] || [ "$answer" = 'ENABLE-SSH-ROOT-PASSWORD-LOGIN' ]; then + sed -i "s|^PermitRootLogin .*|PermitRootLogin yes|g" /etc/ssh/sshd_config + sed -i "s|^#PermitRootLogin .*|PermitRootLogin yes|g" /etc/ssh/sshd_config + systemctl restart sshd + echo "--- New settings ---" + grep '^PermitRoot' /etc/ssh/sshd_config + echo "--------------------" + adminline=$(grep '^admin:' /etc/shadow) + adminline=${adminline:6} + adminline="root:$adminline" + sed -i "s#^root:.*#$adminline#" /etc/shadow + echo "root password is now the same as admin password." + echo "--------------------" + grep '^root:' /etc/shadow + grep '^admin:' /etc/shadow + echo "--------------------" + echo "Port 22 opened in Firewall for all IP addresses." + /usr/local/vesta/bin/v-unsuspend-firewall-rule "11" + echo "--------------------" + fi + + + if [ "$answer" = 'r' ] || [ "$answer" = 'R' ]; then + echo "=============================" + echo "== Rebooting the server" + reboot + fi + + if [ "$answer" = 'b' ] || [ "$answer" = 'B' ]; then + echo "=============================" + echo "== Running bash" + bash + fi + + if [ "$answer" = 'q' ] || [ "$answer" = 'Q' ]; then + echo "=============================" + echo "== Exiting... bye bye :)" + exit 0 + fi + + if [ "$answer" = 'h' ] || [ "$answer" = 'H' ]; then + myhelp + fi + + if [ "$answer" = 'inst v' ] || [ "$answer" = 'INST V' ]; then + echo "=============================" + echo "== installing myVesta" + release=$(cat /etc/debian_version | tr "." "\n" | head -n1) + if [ "$release" -lt 10 ]; then + apt-get update + else + apt-get update --allow-releaseinfo-change + fi + apt-get -y --with-new-pkgs upgrade && apt-get -y dist-upgrade + apt-get -y install curl wget mc git sudo dnsutils screen + cd ~ + curl -O http://c.myvestacp.com/vst-install-debian.sh + sudo bash vst-install-debian.sh + source /etc/profile + PATH=$PATH:/usr/local/vesta/bin && export PATH + fi + + if [ "$answer" = 'inst r' ] || [ "$answer" = 'INST R' ]; then + echo "=============================" + echo "== Installing new Roundcube" + wget -nv https://c.myvestacp.com/tools/install-new-roundcube.sh -O /root/install-new-roundcube.sh + chmod u+x /root/install-new-roundcube.sh + mcedit /root/install-new-roundcube.sh + /root/install-new-roundcube.sh + fi + +done From df9e5508e09ed9b500971ec91eb4f9579a1ecccb Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 12 Feb 2023 16:21:32 +0100 Subject: [PATCH 120/583] Update Changelog.md --- Changelog.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Changelog.md b/Changelog.md index f49b75e4..9af9791b 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,11 @@ +Version 0.9.8-26-60 [12-Feb-2023] +================================================== +* New script: v-commander (useful for maintaining the server) +* New script: v-activate-rocket-nginx (serve WP-Rocket cache directly from nginx) +* New script: v-update-myvesta (get the very latest build of myVesta) +* v-clone-website: By default cloning to database: user_domain_com (instead of cloning to database: user_old_db_migrated) +* Many minor bugfixes + Version 0.9.8-26-59 [01-Feb-2023] ================================================== * Support for PHP 8.2 From 1e201598474a912074d9af3157dd6fc41a9a7b38 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 12 Feb 2023 16:22:53 +0100 Subject: [PATCH 121/583] Version 0.9.8-26-60 --- src/deb/latest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/latest.txt b/src/deb/latest.txt index 44148247..68750920 100644 --- a/src/deb/latest.txt +++ b/src/deb/latest.txt @@ -1 +1 @@ -vesta-0.9.8-26-59 +vesta-0.9.8-26-60 From 7c9dfd4c05bd2b0afda9bb47836fc05d7970b274 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 15 Feb 2023 14:00:04 +0100 Subject: [PATCH 122/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index f6957975..8e5d8ee1 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -83,6 +83,7 @@ fi echo "Proxy Template is ready" # Disabling wp-cron in wp-config.php +cd /home/$user/web/$domain/public_html checkstring_disable="define('DISABLE_WP_CRON', true)" checkstring_enable="define('DISABLE_WP_CRON', false)" string_disable="define( 'DISABLE_WP_CRON', true );" From a997f6f59c7bc134a00f5ad4b97e76d0aef54128 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 16 Feb 2023 20:50:57 +0100 Subject: [PATCH 123/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 38 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index 8e5d8ee1..770cb866 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -104,23 +104,31 @@ fi # Adding cron job -echo "Adding cron job..." - -TPL=$(/usr/local/vesta/bin/v-list-web-domain $user $domain shell | grep 'TEMPLATE:' | awk '{print $2}') -if [[ $TPL == "PHP-FPM-"* ]]; then - fpm_tpl_ver=${TPL:8:2} - fpm_ver="${TPL:8:1}.${TPL:9:1}" +# Check if a cron job already exists for any of the specified PHP-FPM versions +existing_cron=$(crontab -l -u $user | grep "*/15.*wp-cron.php.*php[5-8].[6-9]\|8.[0-2]" | grep -v "grep") +​ +if [ ! -z "$existing_cron" ]; then + echo "There is already a cron job added for user $user and domain $domain." +else + echo "Adding cron job..." +​ + # Add the cron job + TPL=$(/usr/local/vesta/bin/v-list-web-domain $user $domain shell | grep 'TEMPLATE:' | awk '{print $2}') + if [[ $TPL == "PHP-FPM-"* ]]; then + fpm_tpl_ver=${TPL:8:2} + fpm_ver="${TPL:8:1}.${TPL:9:1}" + fi +​ + touch /home/$user/web/$domain/cron.log + chown $user:$user /home/$user/web/$domain/cron.log +​ + case $fpm_ver in + 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2) + /usr/local/vesta/bin/v-add-cron-job "$user" "*/15" "*" "*" "*" "*" "cd /home/$user/web/$domain/public_html; /usr/bin/php$fpm_ver wp-cron.php >/home/$user/web/$domain/cron.log 2>&1" + ;; + esac fi -touch /home/$user/web/$domain/cron.log -chown $user:$user /home/$user/web/$domain/cron.log - -case $fpm_ver in - 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2) - /usr/local/vesta/bin/v-add-cron-job "$user" "*/15" "*" "*" "*" "*" "cd /home/$user/web/$domain/public_html; /usr/bin/php$fpm_ver wp-cron.php >/home/$user/web/$domain/cron.log 2>&1" - ;; -esac - #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# From 38ec1b872f73fa4f531f14c3c943e58ca3d836c2 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:04:20 +0100 Subject: [PATCH 124/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index 770cb866..f42a1fc3 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -73,14 +73,24 @@ fi #----------------------------------------------------------# # Changing Proxy Template -echo "Do you want to force-https in your Proxy Template or not (y/n):" -read answer -if [ "$answer" == "y" ]; then - /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$user" "$domain" "wprocket-force-https" +# Check if the proxy template is already set correctly +current_template=$(/usr/local/vesta/bin/v-list-web-domain $user $domain | grep 'PROXY:' | awk '{print $2}') +if [ "$current_template" == "wprocket-force-https" ] || [ "$current_template" == "wprocket-hosting" ]; then + echo "Proxy Template is already set up correctly" else - /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$user" "$domain" "wprocket-hosting" + # Prompt the user to choose whether to force HTTPS or not + echo "Do you want to force-https in your Proxy Template or not (y/n):" + read answer + + # Change the proxy template based on the user's choice + if [ "$answer" == "y" ]; then + /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$user" "$domain" "wprocket-force-https" + else + /usr/local/vesta/bin/v-change-web-domain-proxy-tpl "$user" "$domain" "wprocket-hosting" + fi + + echo "Proxy Template is ready" fi -echo "Proxy Template is ready" # Disabling wp-cron in wp-config.php cd /home/$user/web/$domain/public_html From 72e659ac187e5ff1d8a5048c12ca15648939847b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:20:11 +0100 Subject: [PATCH 125/583] Update v-get-php-version-of-domain --- bin/v-get-php-version-of-domain | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bin/v-get-php-version-of-domain b/bin/v-get-php-version-of-domain index bd0e7a51..b3b320fc 100644 --- a/bin/v-get-php-version-of-domain +++ b/bin/v-get-php-version-of-domain @@ -40,12 +40,12 @@ is_object_valid 'user' 'USER' "$user" is_object_unsuspended 'user' 'USER' "$user" if [ ! -d "/home/$user" ]; then - echo "User doesn't exist"; + # echo "User doesn't exist"; exit 1; fi if [ ! -d "/home/$user/web/$domain/public_html" ]; then - echo "Domain doesn't exist"; + # echo "Domain doesn't exist"; exit 1; fi @@ -59,11 +59,12 @@ TPL=$(/usr/local/vesta/bin/v-list-web-domain $user $domain shell | grep 'TEMPLAT if [[ $TPL == "PHP-FPM-"* ]]; then fpm_tpl_ver=${TPL:8:2} fpm_ver="${TPL:8:1}.${TPL:9:1}" + echo "$fpm_ver" + exit 0; fi #----------------------------------------------------------# # Vesta # #----------------------------------------------------------# -echo "PHP-FPM version running on given domain is: $fpm_ver" -exit +exit 1; From d267a3deaa08552cf03373a7b2d1de9b0064d4f7 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:28:28 +0100 Subject: [PATCH 126/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index f42a1fc3..0c491c68 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -112,10 +112,9 @@ else fi - # Adding cron job # Check if a cron job already exists for any of the specified PHP-FPM versions -existing_cron=$(crontab -l -u $user | grep "*/15.*wp-cron.php.*php[5-8].[6-9]\|8.[0-2]" | grep -v "grep") +existing_cron=$(crontab -l -u $user | grep -o "wp-cron.php >/home/$user/web/$domain/cron.log" | grep -v "grep") ​ if [ ! -z "$existing_cron" ]; then echo "There is already a cron job added for user $user and domain $domain." From ca4abdb864c2b7965edd030c469104ab17b05c27 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:38:17 +0100 Subject: [PATCH 127/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index 0c491c68..c142f122 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -122,11 +122,7 @@ else echo "Adding cron job..." ​ # Add the cron job - TPL=$(/usr/local/vesta/bin/v-list-web-domain $user $domain shell | grep 'TEMPLATE:' | awk '{print $2}') - if [[ $TPL == "PHP-FPM-"* ]]; then - fpm_tpl_ver=${TPL:8:2} - fpm_ver="${TPL:8:1}.${TPL:9:1}" - fi + fpm_ver=$(/usr/local/vesta/bin/v-get-php-version-of-domain "$domain") ​ touch /home/$user/web/$domain/cron.log chown $user:$user /home/$user/web/$domain/cron.log From 84cf1269fbe5e8066766afa936ff2c4c2bbe6a7f Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Mon, 20 Feb 2023 11:16:08 +0100 Subject: [PATCH 128/583] Update sr.php --- web/inc/i18n/sr.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/inc/i18n/sr.php b/web/inc/i18n/sr.php index 3dfcc0f5..8c437ab9 100644 --- a/web/inc/i18n/sr.php +++ b/web/inc/i18n/sr.php @@ -119,7 +119,7 @@ $LANG['sr'] = array( 'Editing DNS Domain' => 'Izmena DNS-a za domen', 'Adding DNS Record' => 'Dodavanje DNS zapisa (DNS record)', 'Editing DNS Record' => 'Izmena DNS zapisa (DNS record)', - 'Adding Mail Domain' => 'Dodavanje Mail-a za domee', + 'Adding Mail Domain' => 'Dodavanje Mail-a za domene', 'Editing Mail Domain' => 'Izmena Mail-a za domen', 'Adding Mail Account' => 'Dodavanje Mail naloga', 'Editing Mail Account' => 'Izmena Mail naloga', From d0bba785bee13c7cf3f8746ce0aef02029998be0 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 21 Feb 2023 20:29:16 +0100 Subject: [PATCH 129/583] Update v-activate-rocket-nginx --- bin/v-activate-rocket-nginx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bin/v-activate-rocket-nginx b/bin/v-activate-rocket-nginx index c142f122..bd4145cc 100644 --- a/bin/v-activate-rocket-nginx +++ b/bin/v-activate-rocket-nginx @@ -115,18 +115,16 @@ fi # Adding cron job # Check if a cron job already exists for any of the specified PHP-FPM versions existing_cron=$(crontab -l -u $user | grep -o "wp-cron.php >/home/$user/web/$domain/cron.log" | grep -v "grep") -​ + if [ ! -z "$existing_cron" ]; then echo "There is already a cron job added for user $user and domain $domain." else echo "Adding cron job..." -​ # Add the cron job fpm_ver=$(/usr/local/vesta/bin/v-get-php-version-of-domain "$domain") -​ touch /home/$user/web/$domain/cron.log chown $user:$user /home/$user/web/$domain/cron.log -​ + case $fpm_ver in 5.6 | 7.0 | 7.1 | 7.2 | 7.3 | 7.4 | 8.0 | 8.1 | 8.2) /usr/local/vesta/bin/v-add-cron-job "$user" "*/15" "*" "*" "*" "*" "cd /home/$user/web/$domain/public_html; /usr/bin/php$fpm_ver wp-cron.php >/home/$user/web/$domain/cron.log 2>&1" From f8a3f209c4c0c6c7dd593c0011d43588f323eabb Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Feb 2023 14:55:45 +0100 Subject: [PATCH 130/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index 88534bfd..25cd7f84 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -35,6 +35,8 @@ if [ -d "/etc/php" ]; then fi if [ -f "/etc/apache2/mods-enabled/mpm_event.conf" ]; then + rm /etc/apache2/mods-enabled/mpm_event.conf + ln -s /etc/apache2/mods-available/mpm_event.conf /etc/apache2/mods-enabled/mpm_event.conf sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 200#g" /etc/apache2/mods-enabled/mpm_event.conf systemctl restart apache2 fi From db554bacb7bf026d58e9d965fbfb4ff562df51b2 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Feb 2023 14:57:37 +0100 Subject: [PATCH 131/583] Update fix-fpm-poold.sh --- src/deb/for-download/tools/patches/fix-fpm-poold.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/patches/fix-fpm-poold.sh b/src/deb/for-download/tools/patches/fix-fpm-poold.sh index 25cd7f84..94566768 100644 --- a/src/deb/for-download/tools/patches/fix-fpm-poold.sh +++ b/src/deb/for-download/tools/patches/fix-fpm-poold.sh @@ -37,6 +37,6 @@ fi if [ -f "/etc/apache2/mods-enabled/mpm_event.conf" ]; then rm /etc/apache2/mods-enabled/mpm_event.conf ln -s /etc/apache2/mods-available/mpm_event.conf /etc/apache2/mods-enabled/mpm_event.conf - sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 200#g" /etc/apache2/mods-enabled/mpm_event.conf + sed -i "s#MaxRequestWorkers.*#MaxRequestWorkers 200#g" /etc/apache2/mods-available/mpm_event.conf systemctl restart apache2 fi From 8dcbafcc73dd45a892f14cf02b21e1ab71a5263a Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Feb 2023 15:47:30 +0100 Subject: [PATCH 132/583] Update v-get-php-version-of-domain --- bin/v-get-php-version-of-domain | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/v-get-php-version-of-domain b/bin/v-get-php-version-of-domain index b3b320fc..c87b4e4c 100644 --- a/bin/v-get-php-version-of-domain +++ b/bin/v-get-php-version-of-domain @@ -15,6 +15,8 @@ fi # Importing system environment source /etc/profile +SILENT_MODE=1 + # Argument definition domain=$1 From 0fae1613e31e74fa081d84d65bcb000edc3b57d6 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Feb 2023 15:58:00 +0100 Subject: [PATCH 133/583] Update main.sh --- func/main.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/func/main.sh b/func/main.sh index c4169b01..10de469a 100644 --- a/func/main.sh +++ b/func/main.sh @@ -86,7 +86,9 @@ log_history() { # Result checker check_result() { if [ $1 -ne 0 ]; then - echo "Error: $2" + if [ -z "$SILENT_MODE" ]; then + echo "Error: $2" + fi if [ ! -z "$3" ]; then log_event "$3" "$ARGUMENTS" exit $3 @@ -100,7 +102,9 @@ check_result() { # Argument list checker check_args() { if [ "$1" -gt "$2" ]; then - echo "Usage: $(basename $0) $3" + if [ -z "$SILENT_MODE" ]; then + echo "Usage: $(basename $0) $3" + fi check_result $E_ARGS "not enought arguments" >/dev/null fi } From 33911259254493c9e7b2a81da3d1e869eb7a15aa Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Feb 2023 16:18:31 +0100 Subject: [PATCH 134/583] SILENT_MODE in v-search-domain-owner --- bin/v-search-domain-owner | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/v-search-domain-owner b/bin/v-search-domain-owner index 5b88f495..f807ebd2 100755 --- a/bin/v-search-domain-owner +++ b/bin/v-search-domain-owner @@ -9,6 +9,8 @@ # Variable&Function # #----------------------------------------------------------# +SILENT_MODE=1 + # Argument definition domain=$(idn -t --quiet -u "$1" ) type=${2-any} From 91c6ff09ab96df883fa739bf5c7c785b5ec5f42a Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Feb 2023 20:45:28 +0100 Subject: [PATCH 135/583] Revert "Include "hidden" files to backup" --- bin/v-backup-user | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-backup-user b/bin/v-backup-user index 8bd0bb25..e2d7cac9 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -265,7 +265,7 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB" != '*' ]; then set +f # Backup files - tar --anchored -cpf- ${fargs[@]} --exclude={'./','../'} . |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz + tar --anchored -cpf- ${fargs[@]} * |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz done # Print total From 47d55cff76206530588a10321106fb7ea3b6c5ba Mon Sep 17 00:00:00 2001 From: N1ebieski Date: Fri, 24 Feb 2023 11:52:37 +0100 Subject: [PATCH 136/583] Update v-backup-user Include "hidden" files to backup with support for exclusions in old pattern --- bin/v-backup-user | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bin/v-backup-user b/bin/v-backup-user index e2d7cac9..0db5d376 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -251,6 +251,11 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB" != '*' ]; then if [ ! -z "$exlusion" ]; then xdirs="$(echo -e "$exlusion" |tr ':' '\n' |grep -v $domain)" for xpath in $xdirs; do + # Add ./ at the beginning of the path if the path is in old pattern + if [[ $xpath != ./* ]]; then + xpath=(./$xpath) + fi + if [ -d "$xpath" ]; then fargs+=(--exclude=$xpath/*) echo "$(date "+%F %T") excluding directory $xpath" @@ -265,7 +270,7 @@ if [ ! -z "$WEB_SYSTEM" ] && [ "$WEB" != '*' ]; then set +f # Backup files - tar --anchored -cpf- ${fargs[@]} * |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz + tar --anchored -cpf- ${fargs[@]} --exclude={'./','../'} . |gzip -$BACKUP_GZIP - > $tmpdir/web/$domain/domain_data.tar.gz done # Print total From 6db5f28ae53cb6379d8b2d12ca88b081290ecbaa Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 2 Mar 2023 15:29:26 +0100 Subject: [PATCH 137/583] Update v-commander --- bin/v-commander | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/v-commander b/bin/v-commander index 6fe05286..f6b24612 100644 --- a/bin/v-commander +++ b/bin/v-commander @@ -391,8 +391,8 @@ do if [ "$answer" = 'm' ] || [ "$answer" = 'M' ]; then echo "=============================" echo "== installing php-memcache modules" - apt-get install -y $(systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcache ") - apt-get install -y $(systemctl --full --type service --all | grep "php...-fpm" | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcached ") + apt-get install -y $(systemctl --full --type service --all | grep "php...-fpm" | sed 's#●##g' | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcache ") + apt-get install -y $(systemctl --full --type service --all | grep "php...-fpm" | sed 's#●##g' | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcached ") fi if [ "$answer" = 'd' ] || [ "$answer" = 'D' ]; then From 38137b3ba9c125f2ffb4554a0997f233f8b351b8 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 3 Mar 2023 10:47:25 +0100 Subject: [PATCH 138/583] Do not delete ssl.$domain* --- bin/v-delete-web-domain-ssl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/v-delete-web-domain-ssl b/bin/v-delete-web-domain-ssl index 05e8c940..30272928 100755 --- a/bin/v-delete-web-domain-ssl +++ b/bin/v-delete-web-domain-ssl @@ -57,8 +57,14 @@ fi # Deleting old certificate tmpdir=$(mktemp -p $HOMEDIR/$user/web/$domain/private -d) -rm -f $HOMEDIR/$user/conf/web/ssl.$domain.* -mv $USER_DATA/ssl/$domain.* $tmpdir +rm -f $HOMEDIR/$user/conf/web/ssl.$domain.ca +rm -f $HOMEDIR/$user/conf/web/ssl.$domain.crt +rm -f $HOMEDIR/$user/conf/web/ssl.$domain.key +rm -f $HOMEDIR/$user/conf/web/ssl.$domain.pem +mv $USER_DATA/ssl/$domain.ca $tmpdir +mv $USER_DATA/ssl/$domain.crt $tmpdir +mv $USER_DATA/ssl/$domain.key $tmpdir +mv $USER_DATA/ssl/$domain.pem $tmpdir chown -R $user:$user $tmpdir From 16e1000f1cac5f4b0fefcb94badbbf6188c5450c Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 11 Mar 2023 10:40:40 +0100 Subject: [PATCH 139/583] str_get_between PHP function --- func/string.php | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/func/string.php b/func/string.php index c94f85a2..111c57eb 100644 --- a/func/string.php +++ b/func/string.php @@ -11,3 +11,33 @@ function myvesta_replace_in_file($find, $replace, $file) { $r=file_put_contents($file, $buf); return $r; } + +function myvesta_str_get_between (&$text, $left_substring, $right_substring, $start=0, $do_not_return_left_substring=1, $do_not_return_right_substring=1, $left_substring_necessary=1, $right_substring_necessary=1) +{ + $from_null=0; + $pos1=strpos($text, $left_substring, $start); + if ($pos1===FALSE) + { + if ($left_substring_necessary==1) return ""; + $pos1=$start; + $from_null=1; + } + + if ($do_not_return_left_substring==1) + { + if ($from_null==0) $pos1=$pos1+strlen($left_substring); + } + $pos2=strpos($text, $right_substring, $pos1+1); + if ($pos2===FALSE) + { + if ($right_substring_necessary==1) return ""; + $pos2=strlen($text); + } + if ($do_not_return_right_substring==1) $len=$pos2-$pos1; + else $len=($pos2-$pos1)+strlen($right_substring); + + $slen=strlen($text); + if ($pos1+$len>$slen) $len=$slen-$pos1; + + return substr($text, $pos1, $len); +} From 8ae36f7df53c174eef34fbf945ca241705b8d715 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 11 Mar 2023 14:50:11 +0100 Subject: [PATCH 140/583] Update string.php --- func/string.php | 102 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 26 deletions(-) diff --git a/func/string.php b/func/string.php index 111c57eb..8677af04 100644 --- a/func/string.php +++ b/func/string.php @@ -12,32 +12,82 @@ function myvesta_replace_in_file($find, $replace, $file) { return $r; } -function myvesta_str_get_between (&$text, $left_substring, $right_substring, $start=0, $do_not_return_left_substring=1, $do_not_return_right_substring=1, $left_substring_necessary=1, $right_substring_necessary=1) +function myvesta_str_get_between (&$text, $left_substring, $right_substring, $start=0, $return_left_substring=0, $return_right_substring=0, $left_substring_necessary=1, $right_substring_necessary=1) { - $from_null=0; - $pos1=strpos($text, $left_substring, $start); - if ($pos1===FALSE) - { - if ($left_substring_necessary==1) return ""; - $pos1=$start; - $from_null=1; - } + global $myvesta_str_found_at, $myvesta_str_end_at; + $myvesta_str_found_at=0; + $myvesta_str_end_at=0; + $from_null=0; + $pos1=strpos($text, $left_substring, $start); + if ($pos1===FALSE) + { + if ($left_substring_necessary==1) return ""; + $pos1=$start; + $from_null=1; + } - if ($do_not_return_left_substring==1) - { - if ($from_null==0) $pos1=$pos1+strlen($left_substring); - } - $pos2=strpos($text, $right_substring, $pos1+1); - if ($pos2===FALSE) - { - if ($right_substring_necessary==1) return ""; - $pos2=strlen($text); - } - if ($do_not_return_right_substring==1) $len=$pos2-$pos1; - else $len=($pos2-$pos1)+strlen($right_substring); - - $slen=strlen($text); - if ($pos1+$len>$slen) $len=$slen-$pos1; - - return substr($text, $pos1, $len); + if ($return_left_substring==0) + { + if ($from_null==0) $pos1=$pos1+strlen($left_substring); + } + $pos2=strpos($text, $right_substring, $pos1+1); + if ($pos2===FALSE) + { + if ($right_substring_necessary==1) return ""; + $pos2=strlen($text); + } + if ($return_right_substring==0) $len=$pos2-$pos1; + else $len=($pos2-$pos1)+strlen($right_substring); + + $slen=strlen($text); + if ($pos1+$len>$slen) $len=$slen-$pos1; + + $myvesta_str_found_at=$pos1; + $myvesta_str_end_at=$pos1+$len; + + return substr($text, $pos1, $len); +} + +function myvesta_str_replace_once_between_including_borders(&$text, $left, $right, $replace_with) { + $pos1=strpos($text, $left); + if ($pos1===false) return $text; + $pos2=strpos($text, $right, $left+strlen($left)); + if ($pos2===false) return $text; + return substr($text, 0, $pos1).$replace_with.substr($text, $pos2+strlen($right)); +} + +function myvesta_str_strip_once_between_including_borders(&$text, $left, $right) { + $pos1=strpos($text, $left); + if ($pos1===false) return $text; + $pos2=strpos($text, $right, $left+strlen($left)); + if ($pos2===false) return $text; + return substr($text, 0, $pos1).substr($text, $pos2+strlen($right)); +} + + +function myvesta_str_replace_between_including_borders($text, $left, $right, $replace_with) { + $start=0; + $left_len=strlen($left); + $right_len=strlen($right); + while (true) { + $pos1=strpos($text, $left); + if ($pos1===false) break; + $pos2=strpos($text, $right, $left+$left_len); + if ($pos2===false) break; + $text=substr($text, 0, $pos1).$replace_with.substr($text, $pos2+$right_len); + } + return $text; +} + +function myvesta_str_strip_between_including_borders($text, $left, $right) { + $left_len=strlen($left); + $right_len=strlen($right); + while (true) { + $pos1=strpos($text, $left); + if ($pos1===false) break; + $pos2=strpos($text, $right, $left+$left_len); + if ($pos2===false) break; + $text=substr($text, 0, $pos1).substr($text, $pos2+$right_len); + } + return $text; } From bdc75152d20e183b4f5d0a4fc9d5dc91c4f78a07 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:49:08 +0100 Subject: [PATCH 141/583] php8.2.patch --- .../for-download/tools/patches/php8.2.patch | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/deb/for-download/tools/patches/php8.2.patch diff --git a/src/deb/for-download/tools/patches/php8.2.patch b/src/deb/for-download/tools/patches/php8.2.patch new file mode 100644 index 00000000..1083a720 --- /dev/null +++ b/src/deb/for-download/tools/patches/php8.2.patch @@ -0,0 +1,81 @@ +--- /etc/php/8.2/fpm/php.ini.orig 2023-03-21 14:35:10.000000000 +0100 ++++ /etc/php/8.2/fpm/php.ini 2023-03-21 14:43:42.000000000 +0100 +@@ -320,7 +320,7 @@ + ; This directive allows you to disable certain functions. + ; It receives a comma-delimited list of function names. + ; https://php.net/disable-functions +-disable_functions = ++ disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,exec,system,passthru,shell_exec,proc_open,popen + + ; This directive allows you to disable certain classes. + ; It receives a comma-delimited list of class names. +@@ -423,7 +423,7 @@ + ;max_input_nesting_level = 64 + + ; How many GET/POST/COOKIE input variables may be accepted +-;max_input_vars = 1000 ++max_input_vars = 6000 + + ; How many multipart body parts (combined input variable and file uploads) may + ; be accepted. +@@ -432,7 +432,7 @@ + + ; Maximum amount of memory a script may consume + ; https://php.net/memory-limit +-memory_limit = 128M ++memory_limit = 256M + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; Error handling and logging ; +@@ -700,7 +700,7 @@ + ; Its value may be 0 to disable the limit. It is ignored if POST data reading + ; is disabled through enable_post_data_reading. + ; https://php.net/post-max-size +-post_max_size = 8M ++post_max_size = 80M + + ; Automatically add files before PHP document. + ; https://php.net/auto-prepend-file +@@ -852,7 +852,7 @@ + + ; Maximum allowed size for uploaded files. + ; https://php.net/upload-max-filesize +-upload_max_filesize = 2M ++upload_max_filesize = 80M + + ; Maximum number of files that can be uploaded via a single request + max_file_uploads = 20 +@@ -1108,7 +1108,7 @@ + + ; The path to a log file that will log all mail() calls. Log entries include + ; the full path of the script, line number, To address and headers. +-;mail.log = ++mail.log = /var/log/php-mail.log + ; Log mail to syslog (Event Log on Windows). + ;mail.log = syslog + +@@ -1786,20 +1786,20 @@ + + [opcache] + ; Determines if Zend OPCache is enabled +-;opcache.enable=1 ++opcache.enable=1 + + ; Determines if Zend OPCache is enabled for the CLI version of PHP +-;opcache.enable_cli=0 ++opcache.enable_cli=0 + + ; The OPcache shared memory storage size. +-;opcache.memory_consumption=128 ++opcache.memory_consumption=512 + + ; The amount of memory for interned strings in Mbytes. + ;opcache.interned_strings_buffer=8 + + ; The maximum number of keys (scripts) in the OPcache hash table. + ; Only numbers between 200 and 1000000 are allowed. +-;opcache.max_accelerated_files=10000 ++opcache.max_accelerated_files=100000 + + ; The maximum percentage of "wasted" memory until a restart is scheduled. + ;opcache.max_wasted_percentage=5 From afa72dc25836775e01e6183dfdfd34dde71e1ab4 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 21 Mar 2023 17:50:14 +0100 Subject: [PATCH 142/583] Update multi-php-install.sh --- src/deb/for-download/tools/multi-php-install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deb/for-download/tools/multi-php-install.sh b/src/deb/for-download/tools/multi-php-install.sh index 14253444..764f56cf 100644 --- a/src/deb/for-download/tools/multi-php-install.sh +++ b/src/deb/for-download/tools/multi-php-install.sh @@ -332,8 +332,8 @@ if [ "$inst_82" -eq 1 ]; then chmod a+x /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82.sh chmod a+x /usr/local/vesta/data/templates/web/apache2/PHP-FPM-82-public.sh echo "=== Patching php.ini for php8.2" - wget -nv https://c.myvestacp.com/tools/patches/php8.1.patch -O /root/php8.1.patch - patch /etc/php/8.2/fpm/php.ini < /root/php8.1.patch + wget -nv https://c.myvestacp.com/tools/patches/php8.2.patch -O /root/php8.2.patch + patch /etc/php/8.2/fpm/php.ini < /root/php8.2.patch if [ $memory -gt 9999999 ]; then sed -i "s|opcache.memory_consumption=512|opcache.memory_consumption=2048|g" /etc/php/8.2/fpm/php.ini fi From 172d66b4d2b9eba11cbcfb3920d09f692c81a826 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 22 Mar 2023 15:02:22 +0100 Subject: [PATCH 143/583] Add files via upload --- .../for-download/tools/patches/php8.1.patch | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/deb/for-download/tools/patches/php8.1.patch b/src/deb/for-download/tools/patches/php8.1.patch index 479af689..9e1648ab 100644 --- a/src/deb/for-download/tools/patches/php8.1.patch +++ b/src/deb/for-download/tools/patches/php8.1.patch @@ -1,5 +1,5 @@ ---- /etc/php/8.1/fpm/php.ini.orig 2021-11-25 21:48:52.000000000 +0100 -+++ /etc/php/8.1/fpm/php.ini 2021-12-12 20:25:01.000000000 +0100 +--- /etc/php/8.1/fpm/php.ini.orig 2023-03-16 15:37:38.000000000 +0100 ++++ /etc/php/8.1/fpm/php.ini 2023-03-22 14:58:38.000000000 +0100 @@ -320,7 +320,7 @@ ; This directive allows you to disable certain functions. ; It receives a comma-delimited list of function names. @@ -9,13 +9,17 @@ ; This directive allows you to disable certain classes. ; It receives a comma-delimited list of class names. -@@ -423,11 +423,11 @@ +@@ -423,7 +423,7 @@ ;max_input_nesting_level = 64 ; How many GET/POST/COOKIE input variables may be accepted -;max_input_vars = 1000 +max_input_vars = 6000 + ; How many multipart body parts (combined input variable and file uploads) may + ; be accepted. +@@ -432,7 +432,7 @@ + ; Maximum amount of memory a script may consume ; https://php.net/memory-limit -memory_limit = 128M @@ -23,7 +27,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Error handling and logging ; -@@ -695,7 +695,7 @@ +@@ -700,7 +700,7 @@ ; Its value may be 0 to disable the limit. It is ignored if POST data reading ; is disabled through enable_post_data_reading. ; https://php.net/post-max-size @@ -32,7 +36,7 @@ ; Automatically add files before PHP document. ; https://php.net/auto-prepend-file -@@ -847,7 +847,7 @@ +@@ -852,7 +852,7 @@ ; Maximum allowed size for uploaded files. ; https://php.net/upload-max-filesize @@ -41,7 +45,7 @@ ; Maximum number of files that can be uploaded via a single request max_file_uploads = 20 -@@ -1093,7 +1093,7 @@ +@@ -1103,7 +1103,7 @@ ; The path to a log file that will log all mail() calls. Log entries include ; the full path of the script, line number, To address and headers. @@ -50,7 +54,7 @@ ; Log mail to syslog (Event Log on Windows). ;mail.log = syslog -@@ -1764,20 +1764,20 @@ +@@ -1774,20 +1774,20 @@ [opcache] ; Determines if Zend OPCache is enabled From e9ca648f12c7a772a12dfd48127b89105e5ed6dd Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 23 Mar 2023 14:14:40 +0100 Subject: [PATCH 144/583] v-commander: inst-memchached and inst-redis --- bin/v-commander | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/bin/v-commander b/bin/v-commander index f6b24612..06a5f737 100644 --- a/bin/v-commander +++ b/bin/v-commander @@ -82,6 +82,8 @@ myhelp() { echo "inst p = install multi-php" echo "inst pgw = install php-gate" echo "inst r = install new Roundcube" + echo "inst memcached = install memcached" + echo "inst redis = install Redis" echo "dis fb = stop and disable fail2ban" echo "dis dove = stop and disable dovecot" echo "dis spam = stop and disable spam" @@ -430,6 +432,46 @@ do /root/install-phpgate.sh fi + if [ "$answer" = 'inst memcache' ] || [ "$answer" = 'inst memcached' ] || [ "$answer" = 'INST MEMCACHE' ] || [ "$answer" = 'INST MEMCACHED' ]; then + echo "=============================" + echo "== Installing memcached" + memory=$(grep 'MemTotal' /proc/meminfo |tr ' ' '\n' |grep [0-9]) + apt-get update + apt-get -y install memcached + apt-get install $(systemctl --full --type service --all | grep "php...-fpm" | sed 's#●##g' | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcache ") + apt-get install $(systemctl --full --type service --all | grep "php...-fpm" | sed 's#●##g' | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-memcached ") + if [ $memory -lt 15000000 ]; then + sed -i "s/-m 64/-m 256/" /etc/memcached.conf + else + sed -i "s/-m 64/-m 1024/" /etc/memcached.conf + fi + systemctl restart memcached + echo "== memcached installed." + echo "-----------------------" + fi + + if [ "$answer" = 'inst redis' ] || [ "$answer" = 'INST REDIS' ]; then + echo "=============================" + echo "== Installing Redis" + memory=$(grep 'MemTotal' /proc/meminfo |tr ' ' '\n' |grep [0-9]) + apt-get update + apt-get install -y redis-server + apt-get install $(systemctl --full --type service --all | grep "php...-fpm" | sed 's#●##g' | awk '{print $1}' | cut -c1-6 | xargs -n 1 printf "%s-redis ") + + sed -i "s|^supervised no|supervised systemd|g" /etc/redis/redis.conf + sed -i "s|^save |# save |g" /etc/redis/redis.conf + if [ $memory -lt 15000000 ]; then + sed -i "s|^# maxmemory .*|maxmemory 256m|g" /etc/redis/redis.conf + else + sed -i "s|^# maxmemory .*|maxmemory 1g|g" /etc/redis/redis.conf + fi + sed -i "s|^# maxmemory-policy .*|maxmemory-policy allkeys-lru|g" /etc/redis/redis.conf + systemctl restart redis + redis-cli info memory + echo "== Redis installed." + echo "-------------------" + fi + if [ "$answer" = 'check fc' ] || [ "$answer" = 'CHECK FC' ]; then echo "== Checking if FreshClam is up" clamavup=$(/usr/local/vesta/bin/v-list-sys-services | grep 'clamav-daemon' | grep -c 'running') From cd5cc2eda4e685490f2638969fc5b1345f1b9575 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 24 Mar 2023 20:36:20 +0100 Subject: [PATCH 145/583] Forward from primary ip, not from secondary --- install/debian/11/exim/exim4.conf.template-RC | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/install/debian/11/exim/exim4.conf.template-RC b/install/debian/11/exim/exim4.conf.template-RC index 605d848a..36ba2a0d 100644 --- a/install/debian/11/exim/exim4.conf.template-RC +++ b/install/debian/11/exim/exim4.conf.template-RC @@ -140,6 +140,11 @@ acl_check_rcpt: warn set acl_m3 = no + warn !authenticated = * + hosts = !+relay_from_hosts + condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} + set acl_m3 = yes + deny message = Restricted characters in address domains = +local_domains local_parts = ^[.] : ^.*[@%!/|] From a235ba63847464e7b1e4e63efd69799e45a3a3f0 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 24 Mar 2023 23:15:17 +0100 Subject: [PATCH 146/583] exim_forwarding.patch --- .../tools/patches/exim_forwarding.patch | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/deb/for-download/tools/patches/exim_forwarding.patch diff --git a/src/deb/for-download/tools/patches/exim_forwarding.patch b/src/deb/for-download/tools/patches/exim_forwarding.patch new file mode 100644 index 00000000..78b7ef69 --- /dev/null +++ b/src/deb/for-download/tools/patches/exim_forwarding.patch @@ -0,0 +1,14 @@ +--- old 2023-03-23 14:17:42.536656160 +0100 ++++ new 2023-03-24 23:07:08.186018906 +0100 +@@ -140,6 +140,11 @@ + + warn set acl_m3 = no + ++ warn !authenticated = * ++ hosts = !+relay_from_hosts ++ condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} ++ set acl_m3 = yes ++ + deny message = Restricted characters in address + domains = +local_domains + local_parts = ^[.] : ^.*[@%!/|] From 77857f92f016df78420d1eaa167c2b491c071ad9 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 15:39:57 +0100 Subject: [PATCH 147/583] https redirect to the same host --- install/debian/10/templates/web/nginx/force-https-legacy.tpl | 2 +- install/debian/10/templates/web/nginx/force-https-public.tpl | 2 +- .../10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl | 2 +- install/debian/10/templates/web/nginx/force-https.tpl | 2 +- install/debian/10/templates/web/nginx/private-force-https.tpl | 2 +- install/debian/11/templates/web/nginx/force-https-legacy.tpl | 2 +- install/debian/11/templates/web/nginx/force-https-public.tpl | 2 +- .../11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl | 2 +- install/debian/11/templates/web/nginx/force-https.tpl | 2 +- install/debian/11/templates/web/nginx/private-force-https.tpl | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/install/debian/10/templates/web/nginx/force-https-legacy.tpl b/install/debian/10/templates/web/nginx/force-https-legacy.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/10/templates/web/nginx/force-https-legacy.tpl +++ b/install/debian/10/templates/web/nginx/force-https-legacy.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/force-https-public.tpl b/install/debian/10/templates/web/nginx/force-https-public.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/10/templates/web/nginx/force-https-public.tpl +++ b/install/debian/10/templates/web/nginx/force-https-public.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl +++ b/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/force-https.tpl b/install/debian/10/templates/web/nginx/force-https.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/10/templates/web/nginx/force-https.tpl +++ b/install/debian/10/templates/web/nginx/force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/private-force-https.tpl b/install/debian/10/templates/web/nginx/private-force-https.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/10/templates/web/nginx/private-force-https.tpl +++ b/install/debian/10/templates/web/nginx/private-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https-legacy.tpl b/install/debian/11/templates/web/nginx/force-https-legacy.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/11/templates/web/nginx/force-https-legacy.tpl +++ b/install/debian/11/templates/web/nginx/force-https-legacy.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https-public.tpl b/install/debian/11/templates/web/nginx/force-https-public.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/11/templates/web/nginx/force-https-public.tpl +++ b/install/debian/11/templates/web/nginx/force-https-public.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl +++ b/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https.tpl b/install/debian/11/templates/web/nginx/force-https.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/11/templates/web/nginx/force-https.tpl +++ b/install/debian/11/templates/web/nginx/force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/private-force-https.tpl b/install/debian/11/templates/web/nginx/private-force-https.tpl index 851ac0dc..8bdbea42 100644 --- a/install/debian/11/templates/web/nginx/private-force-https.tpl +++ b/install/debian/11/templates/web/nginx/private-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host%$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } From ce7f31121dbf800f5e738749303dcef7ed39c6b2 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:10:09 +0100 Subject: [PATCH 148/583] https redirect to the same host (deb9) --- .../web/nginx/force-https-legacy.stpl | 39 ++++++++++++ .../web/nginx/force-https-legacy.tpl | 8 +++ .../web/nginx/force-https-public.stpl | 39 ++++++++++++ .../web/nginx/force-https-public.tpl | 8 +++ .../nginx/force-https-webmail-phpmyadmin.stpl | 63 +++++++++++++++++++ .../nginx/force-https-webmail-phpmyadmin.tpl | 8 +++ .../8/templates/web/nginx/force-https.stpl | 39 ++++++++++++ .../8/templates/web/nginx/force-https.tpl | 8 +++ .../web/nginx/private-force-https.stpl | 39 ++++++++++++ 9 files changed, 251 insertions(+) create mode 100644 install/debian/8/templates/web/nginx/force-https-legacy.stpl create mode 100644 install/debian/8/templates/web/nginx/force-https-legacy.tpl create mode 100644 install/debian/8/templates/web/nginx/force-https-public.stpl create mode 100644 install/debian/8/templates/web/nginx/force-https-public.tpl create mode 100644 install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl create mode 100644 install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl create mode 100644 install/debian/8/templates/web/nginx/force-https.stpl create mode 100644 install/debian/8/templates/web/nginx/force-https.tpl create mode 100644 install/debian/8/templates/web/nginx/private-force-https.stpl diff --git a/install/debian/8/templates/web/nginx/force-https-legacy.stpl b/install/debian/8/templates/web/nginx/force-https-legacy.stpl new file mode 100644 index 00000000..79e55a26 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https-legacy.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} diff --git a/install/debian/8/templates/web/nginx/force-https-legacy.tpl b/install/debian/8/templates/web/nginx/force-https-legacy.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https-legacy.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/8/templates/web/nginx/force-https-public.stpl b/install/debian/8/templates/web/nginx/force-https-public.stpl new file mode 100644 index 00000000..ac422df6 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https-public.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%/public; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%/public; + + include %home%/%user%/conf/web/snginx.%domain_idn%.conf*; +} + diff --git a/install/debian/8/templates/web/nginx/force-https-public.tpl b/install/debian/8/templates/web/nginx/force-https-public.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https-public.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl new file mode 100644 index 00000000..7e0e71d1 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl @@ -0,0 +1,63 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /webmail { + disable_symlinks off; + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root /var/lib/roundcube; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /phpmyadmin { + disable_symlinks off; + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root /usr/share; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/snginx.%domain%.conf*; +} + diff --git a/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/8/templates/web/nginx/force-https.stpl b/install/debian/8/templates/web/nginx/force-https.stpl new file mode 100644 index 00000000..33fab443 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} diff --git a/install/debian/8/templates/web/nginx/force-https.tpl b/install/debian/8/templates/web/nginx/force-https.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/8/templates/web/nginx/force-https.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/8/templates/web/nginx/private-force-https.stpl b/install/debian/8/templates/web/nginx/private-force-https.stpl new file mode 100644 index 00000000..64094fb8 --- /dev/null +++ b/install/debian/8/templates/web/nginx/private-force-https.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + auth_basic "Restricted area"; + auth_basic_user_file /etc/nginx/.htpasswd; + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} From fdd8350fef054a18d55d5a848d4c51566a6068ff Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:12:44 +0100 Subject: [PATCH 149/583] https redirect to the same host (deb9) --- .../web/nginx/force-https-legacy.stpl | 39 ++++++++++++ .../web/nginx/force-https-legacy.tpl | 8 +++ .../web/nginx/force-https-public.stpl | 39 ++++++++++++ .../web/nginx/force-https-public.tpl | 8 +++ .../nginx/force-https-webmail-phpmyadmin.stpl | 63 +++++++++++++++++++ .../nginx/force-https-webmail-phpmyadmin.tpl | 8 +++ .../9/templates/web/nginx/force-https.stpl | 39 ++++++++++++ .../9/templates/web/nginx/force-https.tpl | 8 +++ .../web/nginx/private-force-https.stpl | 39 ++++++++++++ 9 files changed, 251 insertions(+) create mode 100644 install/debian/9/templates/web/nginx/force-https-legacy.stpl create mode 100644 install/debian/9/templates/web/nginx/force-https-legacy.tpl create mode 100644 install/debian/9/templates/web/nginx/force-https-public.stpl create mode 100644 install/debian/9/templates/web/nginx/force-https-public.tpl create mode 100644 install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.stpl create mode 100644 install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl create mode 100644 install/debian/9/templates/web/nginx/force-https.stpl create mode 100644 install/debian/9/templates/web/nginx/force-https.tpl create mode 100644 install/debian/9/templates/web/nginx/private-force-https.stpl diff --git a/install/debian/9/templates/web/nginx/force-https-legacy.stpl b/install/debian/9/templates/web/nginx/force-https-legacy.stpl new file mode 100644 index 00000000..79e55a26 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https-legacy.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} diff --git a/install/debian/9/templates/web/nginx/force-https-legacy.tpl b/install/debian/9/templates/web/nginx/force-https-legacy.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https-legacy.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/9/templates/web/nginx/force-https-public.stpl b/install/debian/9/templates/web/nginx/force-https-public.stpl new file mode 100644 index 00000000..ac422df6 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https-public.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%/public; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%/public; + + include %home%/%user%/conf/web/snginx.%domain_idn%.conf*; +} + diff --git a/install/debian/9/templates/web/nginx/force-https-public.tpl b/install/debian/9/templates/web/nginx/force-https-public.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https-public.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.stpl b/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.stpl new file mode 100644 index 00000000..7e0e71d1 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.stpl @@ -0,0 +1,63 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /webmail { + disable_symlinks off; + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root /var/lib/roundcube; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /phpmyadmin { + disable_symlinks off; + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root /usr/share; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/snginx.%domain%.conf*; +} + diff --git a/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/9/templates/web/nginx/force-https.stpl b/install/debian/9/templates/web/nginx/force-https.stpl new file mode 100644 index 00000000..33fab443 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + disable_symlinks if_not_owner from=%docroot%; + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} diff --git a/install/debian/9/templates/web/nginx/force-https.tpl b/install/debian/9/templates/web/nginx/force-https.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/9/templates/web/nginx/force-https.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} diff --git a/install/debian/9/templates/web/nginx/private-force-https.stpl b/install/debian/9/templates/web/nginx/private-force-https.stpl new file mode 100644 index 00000000..64094fb8 --- /dev/null +++ b/install/debian/9/templates/web/nginx/private-force-https.stpl @@ -0,0 +1,39 @@ +server { + listen %ip%:%proxy_ssl_port% ssl http2; + server_name %domain_idn% %alias_idn%; + + ssl_certificate %ssl_pem%; + ssl_certificate_key %ssl_key%; + error_log /var/log/%web_system%/domains/%domain%.error.log error; + + location / { + auth_basic "Restricted area"; + auth_basic_user_file /etc/nginx/.htpasswd; + proxy_pass https://%ip%:%web_ssl_port%; + location ~* ^.+\.(%proxy_extentions%)$ { + root %sdocroot%; + access_log /var/log/%web_system%/domains/%domain%.log combined; + access_log /var/log/%web_system%/domains/%domain%.bytes bytes; + expires max; + # try_files $uri @fallback; + } + } + + location /error/ { + alias %home%/%user%/web/%domain%/document_errors/; + } + + location @fallback { + proxy_pass https://%ip%:%web_ssl_port%; + } + + location ~ /\.ht {return 404;} + location ~ /\.env {return 404;} + location ~ /\.svn/ {return 404;} + location ~ /\.git/ {return 404;} + location ~ /\.hg/ {return 404;} + location ~ /\.bzr/ {return 404;} + + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + include %home%/%user%/conf/web/s%proxy_system%.%domain%.conf*; +} From 66097392bf6fe30edabb679615211f3b16a04980 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:22:49 +0100 Subject: [PATCH 150/583] deb8 ttp2->ssl fix --- .../debian/8/templates/web/nginx/force-https-legacy.stpl | 2 +- .../debian/8/templates/web/nginx/force-https-public.stpl | 2 +- .../web/nginx/force-https-webmail-phpmyadmin.stpl | 2 +- install/debian/8/templates/web/nginx/force-https.stpl | 2 +- .../debian/8/templates/web/nginx/private-force-https.stpl | 2 +- .../debian/8/templates/web/nginx/private-force-https.tpl | 8 ++++++++ 6 files changed, 13 insertions(+), 5 deletions(-) create mode 100644 install/debian/8/templates/web/nginx/private-force-https.tpl diff --git a/install/debian/8/templates/web/nginx/force-https-legacy.stpl b/install/debian/8/templates/web/nginx/force-https-legacy.stpl index 79e55a26..4e51748d 100644 --- a/install/debian/8/templates/web/nginx/force-https-legacy.stpl +++ b/install/debian/8/templates/web/nginx/force-https-legacy.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% ssl; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; diff --git a/install/debian/8/templates/web/nginx/force-https-public.stpl b/install/debian/8/templates/web/nginx/force-https-public.stpl index ac422df6..9522313b 100644 --- a/install/debian/8/templates/web/nginx/force-https-public.stpl +++ b/install/debian/8/templates/web/nginx/force-https-public.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% ssl; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; diff --git a/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl index 7e0e71d1..2d62e72b 100644 --- a/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl +++ b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% ssl; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; diff --git a/install/debian/8/templates/web/nginx/force-https.stpl b/install/debian/8/templates/web/nginx/force-https.stpl index 33fab443..d138ea63 100644 --- a/install/debian/8/templates/web/nginx/force-https.stpl +++ b/install/debian/8/templates/web/nginx/force-https.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% ssl; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; diff --git a/install/debian/8/templates/web/nginx/private-force-https.stpl b/install/debian/8/templates/web/nginx/private-force-https.stpl index 64094fb8..c77baf91 100644 --- a/install/debian/8/templates/web/nginx/private-force-https.stpl +++ b/install/debian/8/templates/web/nginx/private-force-https.stpl @@ -1,5 +1,5 @@ server { - listen %ip%:%proxy_ssl_port% ssl http2; + listen %ip%:%proxy_ssl_port% ssl; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; diff --git a/install/debian/8/templates/web/nginx/private-force-https.tpl b/install/debian/8/templates/web/nginx/private-force-https.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/8/templates/web/nginx/private-force-https.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} From 71f91ba16dbbe713d78c632b2dc94ce7827ae826 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:24:20 +0100 Subject: [PATCH 151/583] deb9 private-force-https.tpl --- .../debian/9/templates/web/nginx/private-force-https.tpl | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 install/debian/9/templates/web/nginx/private-force-https.tpl diff --git a/install/debian/9/templates/web/nginx/private-force-https.tpl b/install/debian/9/templates/web/nginx/private-force-https.tpl new file mode 100644 index 00000000..8bdbea42 --- /dev/null +++ b/install/debian/9/templates/web/nginx/private-force-https.tpl @@ -0,0 +1,8 @@ +server { + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { + rewrite ^(.*) https://$host%$1 permanent; + } +include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; +} From 797ae8e515f72987234130326225144b671c9191 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 18:19:29 +0100 Subject: [PATCH 152/583] force-https.patch --- src/deb/for-download/tools/patches/force-https.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/deb/for-download/tools/patches/force-https.patch diff --git a/src/deb/for-download/tools/patches/force-https.patch b/src/deb/for-download/tools/patches/force-https.patch new file mode 100644 index 00000000..8de3c241 --- /dev/null +++ b/src/deb/for-download/tools/patches/force-https.patch @@ -0,0 +1,11 @@ +--- force-https.tpl.orig 2023-03-25 18:15:15.577555584 +0100 ++++ force-https.tpl 2023-03-25 16:51:48.044997322 +0100 +@@ -2,7 +2,7 @@ + listen %ip%:%proxy_port%; + server_name %domain_idn% %alias_idn%; + location / { +- rewrite ^(.*) https://%domain_idn%$1 permanent; ++ rewrite ^(.*) https://$host%$1 permanent; + } + include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; + } From 505c4085f5f8b0ef7894dd03d7220b9f26b47113 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 18:30:41 +0100 Subject: [PATCH 153/583] Update force-https.patch --- src/deb/for-download/tools/patches/force-https.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/for-download/tools/patches/force-https.patch b/src/deb/for-download/tools/patches/force-https.patch index 8de3c241..05c2004d 100644 --- a/src/deb/for-download/tools/patches/force-https.patch +++ b/src/deb/for-download/tools/patches/force-https.patch @@ -5,7 +5,7 @@ server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; -+ rewrite ^(.*) https://$host%$1 permanent; ++ rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } From d84a021354d4f8bf317e558b1225c6cdd6acb728 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 25 Mar 2023 23:59:28 +0100 Subject: [PATCH 154/583] force-https fix --- install/debian/10/templates/web/nginx/force-https-legacy.tpl | 2 +- install/debian/10/templates/web/nginx/force-https-public.tpl | 2 +- .../10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl | 2 +- install/debian/10/templates/web/nginx/force-https.tpl | 2 +- install/debian/10/templates/web/nginx/private-force-https.tpl | 2 +- install/debian/11/templates/web/nginx/force-https-legacy.tpl | 2 +- install/debian/11/templates/web/nginx/force-https-public.tpl | 2 +- .../11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl | 2 +- install/debian/11/templates/web/nginx/force-https.tpl | 2 +- install/debian/11/templates/web/nginx/private-force-https.tpl | 2 +- install/debian/8/templates/web/nginx/force-https-legacy.tpl | 2 +- install/debian/8/templates/web/nginx/force-https-public.tpl | 2 +- .../8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl | 2 +- install/debian/8/templates/web/nginx/force-https.tpl | 2 +- install/debian/8/templates/web/nginx/private-force-https.tpl | 2 +- install/debian/9/templates/web/nginx/force-https-legacy.tpl | 2 +- install/debian/9/templates/web/nginx/force-https-public.tpl | 2 +- .../9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl | 2 +- install/debian/9/templates/web/nginx/force-https.tpl | 2 +- install/debian/9/templates/web/nginx/private-force-https.tpl | 2 +- .../nodejs-nginx-templates/node-app-3000-pass-to-https.tpl | 2 +- .../for-download/tools/nodejs-nginx-templates/node-app-3000.tpl | 2 +- .../nodejs-nginx-templates/node-app-4000-and-websocket-6001.tpl | 2 +- .../force-https-firewall-burst-2-speed-2-conn-4.tpl | 2 +- .../rate-limit-tpl/force-https-firewall-burst-2-speed-2.tpl | 2 +- .../tools/rate-limit-tpl/force-https-firewall-burst-2.tpl | 2 +- .../for-download/tools/rate-limit-tpl/force-https-firewall.tpl | 2 +- .../tools/rocket-nginx-templates/wprocket-force-https.tpl | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/install/debian/10/templates/web/nginx/force-https-legacy.tpl b/install/debian/10/templates/web/nginx/force-https-legacy.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/10/templates/web/nginx/force-https-legacy.tpl +++ b/install/debian/10/templates/web/nginx/force-https-legacy.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/force-https-public.tpl b/install/debian/10/templates/web/nginx/force-https-public.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/10/templates/web/nginx/force-https-public.tpl +++ b/install/debian/10/templates/web/nginx/force-https-public.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl +++ b/install/debian/10/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/force-https.tpl b/install/debian/10/templates/web/nginx/force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/10/templates/web/nginx/force-https.tpl +++ b/install/debian/10/templates/web/nginx/force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/10/templates/web/nginx/private-force-https.tpl b/install/debian/10/templates/web/nginx/private-force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/10/templates/web/nginx/private-force-https.tpl +++ b/install/debian/10/templates/web/nginx/private-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https-legacy.tpl b/install/debian/11/templates/web/nginx/force-https-legacy.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/11/templates/web/nginx/force-https-legacy.tpl +++ b/install/debian/11/templates/web/nginx/force-https-legacy.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https-public.tpl b/install/debian/11/templates/web/nginx/force-https-public.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/11/templates/web/nginx/force-https-public.tpl +++ b/install/debian/11/templates/web/nginx/force-https-public.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl +++ b/install/debian/11/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/force-https.tpl b/install/debian/11/templates/web/nginx/force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/11/templates/web/nginx/force-https.tpl +++ b/install/debian/11/templates/web/nginx/force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/11/templates/web/nginx/private-force-https.tpl b/install/debian/11/templates/web/nginx/private-force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/11/templates/web/nginx/private-force-https.tpl +++ b/install/debian/11/templates/web/nginx/private-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/8/templates/web/nginx/force-https-legacy.tpl b/install/debian/8/templates/web/nginx/force-https-legacy.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/8/templates/web/nginx/force-https-legacy.tpl +++ b/install/debian/8/templates/web/nginx/force-https-legacy.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/8/templates/web/nginx/force-https-public.tpl b/install/debian/8/templates/web/nginx/force-https-public.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/8/templates/web/nginx/force-https-public.tpl +++ b/install/debian/8/templates/web/nginx/force-https-public.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl +++ b/install/debian/8/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/8/templates/web/nginx/force-https.tpl b/install/debian/8/templates/web/nginx/force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/8/templates/web/nginx/force-https.tpl +++ b/install/debian/8/templates/web/nginx/force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/8/templates/web/nginx/private-force-https.tpl b/install/debian/8/templates/web/nginx/private-force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/8/templates/web/nginx/private-force-https.tpl +++ b/install/debian/8/templates/web/nginx/private-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/9/templates/web/nginx/force-https-legacy.tpl b/install/debian/9/templates/web/nginx/force-https-legacy.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/9/templates/web/nginx/force-https-legacy.tpl +++ b/install/debian/9/templates/web/nginx/force-https-legacy.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/9/templates/web/nginx/force-https-public.tpl b/install/debian/9/templates/web/nginx/force-https-public.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/9/templates/web/nginx/force-https-public.tpl +++ b/install/debian/9/templates/web/nginx/force-https-public.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl b/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl +++ b/install/debian/9/templates/web/nginx/force-https-webmail-phpmyadmin.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/9/templates/web/nginx/force-https.tpl b/install/debian/9/templates/web/nginx/force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/9/templates/web/nginx/force-https.tpl +++ b/install/debian/9/templates/web/nginx/force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/install/debian/9/templates/web/nginx/private-force-https.tpl b/install/debian/9/templates/web/nginx/private-force-https.tpl index 8bdbea42..5a463370 100644 --- a/install/debian/9/templates/web/nginx/private-force-https.tpl +++ b/install/debian/9/templates/web/nginx/private-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://$host%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000-pass-to-https.tpl b/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000-pass-to-https.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000-pass-to-https.tpl +++ b/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000-pass-to-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000.tpl b/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000.tpl +++ b/src/deb/for-download/tools/nodejs-nginx-templates/node-app-3000.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/nodejs-nginx-templates/node-app-4000-and-websocket-6001.tpl b/src/deb/for-download/tools/nodejs-nginx-templates/node-app-4000-and-websocket-6001.tpl index 958b2594..ee8db90e 100644 --- a/src/deb/for-download/tools/nodejs-nginx-templates/node-app-4000-and-websocket-6001.tpl +++ b/src/deb/for-download/tools/nodejs-nginx-templates/node-app-4000-and-websocket-6001.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } location /app { diff --git a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2-conn-4.tpl b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2-conn-4.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2-conn-4.tpl +++ b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2-conn-4.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2.tpl b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2.tpl +++ b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2-speed-2.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2.tpl b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2.tpl +++ b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall-burst-2.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall.tpl b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall.tpl +++ b/src/deb/for-download/tools/rate-limit-tpl/force-https-firewall.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } diff --git a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.tpl b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.tpl index 851ac0dc..5a463370 100644 --- a/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.tpl +++ b/src/deb/for-download/tools/rocket-nginx-templates/wprocket-force-https.tpl @@ -2,7 +2,7 @@ server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; location / { - rewrite ^(.*) https://%domain_idn%$1 permanent; + rewrite ^(.*) https://$host$1 permanent; } include %home%/%user%/conf/web/*nginx.%domain_idn%.conf_letsencrypt; } From 09dcc123be70b17f53d1b72bed77285d95a1b023 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 26 Mar 2023 03:40:33 +0200 Subject: [PATCH 155/583] Interpreter for calling myVesta PHP functions --- bin/v-php-func | 11 ++++++++ func/bash-to-php-interpreter.php | 21 ++++++++++++++ func/main.php | 21 ++++++++++++-- func/string.php | 48 +++++++++++++++++++++++++++++--- 4 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 bin/v-php-func create mode 100644 func/bash-to-php-interpreter.php diff --git a/bin/v-php-func b/bin/v-php-func new file mode 100644 index 00000000..dd75df43 --- /dev/null +++ b/bin/v-php-func @@ -0,0 +1,11 @@ +#!/bin/bash +# info: calling myVesta PHP functions +# options: FUNCTION +# +# The function is calling myVesta PHP functions. + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + +php /usr/local/vesta/func/bash-to-php-interpreter.php "$@" diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php new file mode 100644 index 00000000..6f06dae2 --- /dev/null +++ b/func/bash-to-php-interpreter.php @@ -0,0 +1,21 @@ + Date: Sun, 26 Mar 2023 03:49:38 +0200 Subject: [PATCH 156/583] Update bash-to-php-interpreter.php --- func/bash-to-php-interpreter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 6f06dae2..f47e7f9c 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -6,7 +6,7 @@ include ("/usr/local/vesta/func/main.php"); include ("/usr/local/vesta/func/string.php"); $counter=count($argv); -if ($counter<1) myvesta_throw_error(2, 'Function is missing'); +if ($counter<2) myvesta_throw_error(2, 'Function is missing'); $func="myvesta_".$argv[1]; if (!function_exists($func)) myvesta_throw_error(2, 'Function does not exists'); From beccead3889bd42459f8933ad55cdd6a17dc5a6d Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 26 Mar 2023 14:58:10 +0200 Subject: [PATCH 157/583] php-func fix --- bin/v-php-func | 1 + func/bash-to-php-interpreter.php | 21 +++++++++++++++++---- func/main.php | 1 + func/string.php | 25 +++++++++++++++---------- 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/bin/v-php-func b/bin/v-php-func index dd75df43..f6192c33 100644 --- a/bin/v-php-func +++ b/bin/v-php-func @@ -9,3 +9,4 @@ #----------------------------------------------------------# php /usr/local/vesta/func/bash-to-php-interpreter.php "$@" +exit $? diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index f47e7f9c..6c1c2fa0 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -1,6 +1,6 @@ Date: Sun, 26 Mar 2023 15:01:52 +0200 Subject: [PATCH 158/583] tabs fix --- func/bash-to-php-interpreter.php | 22 +++++++++++----------- func/main.php | 22 +++++++++++----------- func/string.php | 20 ++++++++++---------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 6c1c2fa0..9c67ab55 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -10,25 +10,25 @@ if ($counter<2) myvesta_throw_error(2, 'Function is missing'); $func=$argv[1]; if (!function_exists($func)) { - $func="myvesta_".$argv[1]; - if (!function_exists($func)) myvesta_throw_error(2, 'Function does not exists'); + $func="myvesta_".$argv[1]; + if (!function_exists($func)) myvesta_throw_error(2, 'Function does not exists'); } $params=array(); for ($i=2; $i<$counter; $i++) { - $argv[$i]=myvesta_fix_backslashes($argv[$i]); - $params[]=$argv[$i]; + $argv[$i]=myvesta_fix_backslashes($argv[$i]); + $params[]=$argv[$i]; } $r=call_user_func_array($func, $params); if (is_bool($r)) { - if ($r) { - exit(0); - } else { - exit(MYVESTA_ERROR_GENERAL); - } + if ($r) { + exit(0); + } else { + exit(MYVESTA_ERROR_GENERAL); + } } else { - echo $r; - exit(0); + echo $r; + exit(0); } diff --git a/func/main.php b/func/main.php index d09a6bd8..1a932fa7 100644 --- a/func/main.php +++ b/func/main.php @@ -18,10 +18,10 @@ function myvesta_throw_error($code, $message) { } function myvesta_fix_backslashes($s) { - $s=str_replace("\\n", "\n", $s); - $s=str_replace("\\r", "\r", $s); - $s=str_replace("\\t", "\t", $s); - return $s; + $s=str_replace("\\n", "\n", $s); + $s=str_replace("\\r", "\r", $s); + $s=str_replace("\\t", "\t", $s); + return $s; } function myvesta_check_args ($requried_arguments, $arguments) { @@ -45,11 +45,11 @@ function myvesta_check_args ($requried_arguments, $arguments) { function myvesta_fix_args() { global $argv; - $i=0; + $i=0; foreach ($argv as $argument) { - if ($i==0) {$i++; continue;} + if ($i==0) {$i++; continue;} $argv[$i]=myvesta_fix_backslashes($argv[$i]); - $i++; + $i++; } } @@ -60,8 +60,8 @@ function myvesta_exit($code) { } function myvesta_test_func () { - $args=func_get_args(); - echo "You said: "; - print_r ($args); - echo "\n"; + $args=func_get_args(); + echo "You said: "; + print_r ($args); + echo "\n"; } diff --git a/func/string.php b/func/string.php index 0fa284cf..3882c069 100644 --- a/func/string.php +++ b/func/string.php @@ -11,49 +11,49 @@ function myvesta_replace_in_file($file, $find, $replace) { $buf=str_replace($find, $replace, $buf); $r=file_put_contents($file, $buf); - if ($r===false) return false; + if ($r===false) return false; return true; } function myvesta_get_between_in_file($file, $left_substring, $right_substring, $start=0, $return_left_substring=0, $return_right_substring=0, $left_substring_necessary=1, $right_substring_necessary=1) { if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); $text=file_get_contents($file); - return myvesta_str_get_between ($text, $left_substring, $right_substring, $start, $return_left_substring, $return_right_substring, $left_substring_necessary, $right_substring_necessary); + return myvesta_str_get_between ($text, $left_substring, $right_substring, $start, $return_left_substring, $return_right_substring, $left_substring_necessary, $right_substring_necessary); } function myvesta_replace_in_file_once_between_including_borders($file, $left, $right, $replace_with) { if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); $text=file_get_contents($file); - $buf=myvesta_str_replace_once_between_including_borders($text, $left, $right, $replace_with); + $buf=myvesta_str_replace_once_between_including_borders($text, $left, $right, $replace_with); $r=file_put_contents($file, $buf); - if ($r===false) return false; + if ($r===false) return false; return true; } function myvesta_strip_once_in_file_between_including_borders($file, $left, $right) { if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); $text=file_get_contents($file); - $buf=myvesta_str_strip_once_between_including_borders($text, $left, $right); + $buf=myvesta_str_strip_once_between_including_borders($text, $left, $right); $r=file_put_contents($file, $buf); - if ($r===false) return false; + if ($r===false) return false; return true; } function myvesta_replace_in_file_between_including_borders($file, $left, $right, $replace_with) { if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); $text=file_get_contents($file); - $buf=myvesta_str_replace_between_including_borders($text, $left, $right, $replace_with); + $buf=myvesta_str_replace_between_including_borders($text, $left, $right, $replace_with); $r=file_put_contents($file, $buf); - if ($r===false) return false; + if ($r===false) return false; return true; } function myvesta_strip_in_file_between_including_borders($file, $left, $right) { if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); $text=file_get_contents($file); - $buf=myvesta_str_strip_between_including_borders($text, $left, $right); + $buf=myvesta_str_strip_between_including_borders($text, $left, $right); $r=file_put_contents($file, $buf); - if ($r===false) return false; + if ($r===false) return false; return true; } From 201cdad4b30f0b36e6cfe975fedd9170872960b9 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 26 Mar 2023 15:06:22 +0200 Subject: [PATCH 159/583] exit with brackets fix --- func/bash-to-php-interpreter.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 9c67ab55..6ed31455 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -1,6 +1,6 @@ Date: Sun, 26 Mar 2023 15:11:50 +0200 Subject: [PATCH 160/583] Strip 'BROWSER MEDIA CACHE' block in rocket-nginx conf --- src/deb/for-download/tools/install-rocket-nginx.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/deb/for-download/tools/install-rocket-nginx.sh b/src/deb/for-download/tools/install-rocket-nginx.sh index 3e298c7d..20364f80 100644 --- a/src/deb/for-download/tools/install-rocket-nginx.sh +++ b/src/deb/for-download/tools/install-rocket-nginx.sh @@ -17,6 +17,8 @@ fi cd rocket-nginx cp rocket-nginx.ini.disabled rocket-nginx.ini php rocket-parser.php +/usr/local/vesta/bin/v-php-func 'strip_once_in_file_between_including_borders' '/etc/nginx/rocket-nginx/conf.d/default.conf' '# BROWSER MEDIA CACHE' '}' + wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-https.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-https.tpl wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-force-https.stpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-force-https.stpl wget -nv -O /usr/local/vesta/data/templates/web/nginx/wprocket-hosting.tpl https://c.myvestacp.com/tools/rocket-nginx-templates/wprocket-hosting.tpl From da136faf08b8cc83b8532cd04fe3fae53bb3b6ef Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 26 Mar 2023 19:04:45 +0200 Subject: [PATCH 161/583] php function "find_in_file" --- func/main.php | 2 +- func/string.php | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/func/main.php b/func/main.php index 1a932fa7..cf13f3f0 100644 --- a/func/main.php +++ b/func/main.php @@ -12,7 +12,7 @@ define('MYVESTA_ERROR_GENERAL', 5); function myvesta_throw_error($code, $message) { global $myvesta_exit_on_error; - echo "ERROR: ".$message."\n"; + if ($message!=='') echo "ERROR: ".$message."\n"; if ($myvesta_exit_on_error) myvesta_exit($code); return $code; } diff --git a/func/string.php b/func/string.php index 3882c069..2b6a63d9 100644 --- a/func/string.php +++ b/func/string.php @@ -2,6 +2,17 @@ // --- file functions --- +function myvesta_find_in_file($file, $find) { + if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); + + $buf=file_get_contents($file); + + $pos=strpos($buf, $find); + if ($pos===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, ""); + + return $pos; +} + function myvesta_replace_in_file($file, $find, $replace) { if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); From b1a3b88877efe2dd8f22bc2a2e5454ee825c0635 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 28 Mar 2023 10:39:38 +0200 Subject: [PATCH 162/583] new line on the output end if v-php-func called directly from shell --- func/bash-to-php-interpreter.php | 6 ++++++ func/main.php | 5 ++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 6ed31455..cd849d6c 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -1,5 +1,8 @@ Date: Tue, 28 Mar 2023 17:07:52 +0200 Subject: [PATCH 163/583] Security Improvements --- bin/v-install-wordpress | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bin/v-install-wordpress b/bin/v-install-wordpress index 4bf82c5f..70f3fc7b 100644 --- a/bin/v-install-wordpress +++ b/bin/v-install-wordpress @@ -128,7 +128,9 @@ sudo -H -u$user wp core config --dbname=$DBUSER --dbuser=$DBUSER --dbpass=$PASSW password=$(LC_CTYPE=C tr -dc A-Za-z0-9_\!\@\#\$\%\^\&\*\(\)-+= < /dev/urandom | head -c 12) -sudo -H -u$user wp core install --url="$domain" --title="$domain" --admin_user="admin" --admin_password="$password" --admin_email="$email" --path=$WORKINGDIR +wpadmin=$(echo "$domain" | sed 's#\.#_#g')_4dm1n + +sudo -H -u$user wp core install --url="$domain" --title="$domain" --admin_user="$wpadmin" --admin_password="$password" --admin_email="$email" --path=$WORKINGDIR mysql -u$DBUSER -p$PASSWDDB -e "USE $DBUSER; update wp_options set option_value = '$PROTOCOL://$domain' where option_name = 'siteurl'; update wp_options set option_value = '$PROTOCOL://$domain' where option_name = 'home';" @@ -138,7 +140,7 @@ echo "" echo "Site: $PROTOCOL://$domain/" echo "" echo "Login: $PROTOCOL://$domain/wp-admin/" -echo "Username: admin" +echo "Username: $wpadmin" echo "Password: $password" echo "" echo "=================================================================" From 551df0b5a6cea7d8bce07053f5add474fd1cc30d Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Wed, 29 Mar 2023 15:45:36 +0200 Subject: [PATCH 164/583] Update v-clean-garbage --- bin/v-clean-garbage | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bin/v-clean-garbage b/bin/v-clean-garbage index 5b402653..72e8560e 100644 --- a/bin/v-clean-garbage +++ b/bin/v-clean-garbage @@ -45,13 +45,13 @@ find /var/log/exim4/ -type f -exec truncate -s 0 {} \; clean_home() { nice -n 19 ionice -c 3 find $1/*/tmp/ -type f -delete find $1/ -name '.wp-cli' -type d -exec rm -rf {} \; > /dev/null 2>&1 - find $1/*/web/*/public_html/wp-content/aiowps_backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete - find $1/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete - find $1/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete - find $1/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete - find $1/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete + find $1/*/web/*/public_html/wp-content/aiowps_backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 + find $1/*/web/*/public_html/wp-content/envato-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 + find $1/*/web/*/public_html/wp-content/ai1wm-backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 + find $1/*/web/*/public_html/wp-content/wpvividbackups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 + find $1/*/web/*/public_html/wp-content/updraft/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 find $1/*/web/*/public_html/wp-content/plugins/ezpz-one-click-backup/backups/ -type f -not -name ".htaccess" -not -name "index.php" -not -name "index.html" -not -name "web.config" -delete > /dev/null 2>&1 - find $1/*/web/*/public_html/ -type f -name "*.wpress" -delete + find $1/*/web/*/public_html/ -type f -name "*.wpress" -delete > /dev/null 2>&1 nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log" -exec truncate -s 0 {} \; nice -n 19 ionice -c 3 find $1/*/web/*/public_html/ -type f -name "error_log.txt" -exec truncate -s 0 {} \; nice -n 19 ionice -c 3 find $1/ -type f -name "*.log" -exec truncate -s 0 {} \; From a47603156d5da0b7c7fa1cdb640aaf63fc7f97c6 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 29 Mar 2023 15:48:42 +0200 Subject: [PATCH 165/583] Update exim_forwarding.patch --- src/deb/for-download/tools/patches/exim_forwarding.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deb/for-download/tools/patches/exim_forwarding.patch b/src/deb/for-download/tools/patches/exim_forwarding.patch index 78b7ef69..1fa6d408 100644 --- a/src/deb/for-download/tools/patches/exim_forwarding.patch +++ b/src/deb/for-download/tools/patches/exim_forwarding.patch @@ -1,9 +1,9 @@ --- old 2023-03-23 14:17:42.536656160 +0100 +++ new 2023-03-24 23:07:08.186018906 +0100 @@ -140,6 +140,11 @@ - + warn set acl_m3 = no - + + warn !authenticated = * + hosts = !+relay_from_hosts + condition = ${lookup{$local_part@$domain}lsearch{/etc/exim4/domains/$domain/aliases}{true}{false}} From 3bafc5b064fdbbe1e31da69eef801548b4514985 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 1 Apr 2023 23:29:35 +0200 Subject: [PATCH 166/583] myvesta_echo php function --- func/bash-to-php-interpreter.php | 13 ++++++----- func/main.php | 37 +++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index cd849d6c..13995e1c 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -1,5 +1,7 @@ Date: Wed, 5 Apr 2023 21:07:11 +0200 Subject: [PATCH 167/583] LetsEncrypt check if 'certificate' is empty on step 6 --- bin/v-add-letsencrypt-domain | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index faa51f8c..9d9b7cbe 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -323,6 +323,14 @@ if [[ "$status" -ne 200 ]]; then echo "[$(date)] : EXIT=Let's Encrypt finalize bad status $status" >> /usr/local/vesta/log/letsencrypt.log check_result $E_CONNECT "Let's Encrypt finalize bad status $status" fi +if [ "$certificate" = "" ]; then + echo "[$(date)] : EXIT=Let's Encrypt 'certificate' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log + check_result $E_CONNECT "Let's Encrypt 'certificate' is empty on step 6" +fi +if [ "$nonce" = "" ]; then + echo "[$(date)] : EXIT=Let's Encrypt 'nonce' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log + check_result $E_CONNECT "Let's Encrypt 'nonce' is empty on step 6" +fi # Downloading signed certificate / STEP 7 echo "[$(date)] : --- Downloading signed certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log From cdde300f80ce8abe9d5fa21ab5c711923715e4d3 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:08:38 +0200 Subject: [PATCH 168/583] Version 0.9.8-26-61 --- src/deb/latest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/latest.txt b/src/deb/latest.txt index 68750920..4ee18f6a 100644 --- a/src/deb/latest.txt +++ b/src/deb/latest.txt @@ -1 +1 @@ -vesta-0.9.8-26-60 +vesta-0.9.8-26-61 From a098a9831c8760cfc15c1d58470cfcc184d4a2d8 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 5 Apr 2023 21:10:28 +0200 Subject: [PATCH 169/583] Update Changelog.md --- Changelog.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Changelog.md b/Changelog.md index 9af9791b..e4938183 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,3 +1,7 @@ +Version 0.9.8-26-61 [05-Apr-2023] +================================================== +* Many bugfixes + Version 0.9.8-26-60 [12-Feb-2023] ================================================== * New script: v-commander (useful for maintaining the server) From f5132329c8500cccb48fcfc2e3657822071ebed5 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 5 Apr 2023 23:13:38 +0200 Subject: [PATCH 170/583] Update Changelog.md --- Changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Changelog.md b/Changelog.md index e4938183..28f5cd6c 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,6 +1,7 @@ Version 0.9.8-26-61 [05-Apr-2023] ================================================== * Many bugfixes +* Hotfix for LetsEncrypt to prevent Apache falling Version 0.9.8-26-60 [12-Feb-2023] ================================================== From 4771d2502c9f523a5d29bd25211ee443897af849 Mon Sep 17 00:00:00 2001 From: Jaap Marcus <9754650+jaapmarcus@users.noreply.github.com> Date: Thu, 6 Apr 2023 01:23:10 +0200 Subject: [PATCH 171/583] Fix: Changes in Certificate request Lets Encrypt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See: https://community.letsencrypt.org/t/myvesta-hestiacp-vestacp-fail-issuance-with-async-finalization/195923 And https://github.com/hestiacp/hestiacp/pull/3442 Not tested on Vesta CP ❤️ --- bin/v-add-letsencrypt-domain | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 9d9b7cbe..c37492b7 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -56,7 +56,7 @@ query_le_v2() { # Save http response to file passed as "$4" arg or print to stdout if not provided # http response headers are always sent to stdout local save_to_file=${4:-"/dev/stdout"} - curl --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" + curl --location --user-agent "MyVestaCP" --insecure --retry 5 --retry-connrefused --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" } @@ -154,6 +154,8 @@ authz=$(echo "$answer" |grep "acme/authz" |cut -f2 -d '"') echo "[$(date)] : authz=$authz" >> /usr/local/vesta/log/letsencrypt.log finalize=$(echo "$answer" |grep 'finalize":' |cut -f4 -d '"') echo "[$(date)] : finalize=$finalize" >> /usr/local/vesta/log/letsencrypt.log +order=$(echo -e "$answer" | grep -i location | cut -f2 -d \ | tr -d '\r\n') +echo "[$(date)] : order=$order" >> /usr/local/vesta/log/letsencrypt.log status=$(echo "$answer" |grep HTTP/ |tail -n1 |cut -f2 -d ' ') echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log if [[ "$status" -ne 201 ]]; then @@ -324,16 +326,34 @@ if [[ "$status" -ne 200 ]]; then check_result $E_CONNECT "Let's Encrypt finalize bad status $status" fi if [ "$certificate" = "" ]; then - echo "[$(date)] : EXIT=Let's Encrypt 'certificate' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt 'certificate' is empty on step 6" + validation="processing" + i=1 + while [ "$validation" = "processing" ]; do + echo "[$(date)] : --- Polling server waiting for Certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log + answer=$(query_le_v2 "$order" "" "$nonce") + i=$((i + 1)) + + nonce=$(echo "$answer" | grep -i nonce | cut -f2 -d \ | tr -d '\r\n') + echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log + status=$(echo "$answer" | grep HTTP/ | tail -n1 | cut -f 2 -d ' ') + echo "[$(date)] : status=$status" >> /usr/local/vesta/log/letsencrypt.log + validation=$(echo "$answer" | grep 'status":' | cut -f4 -d '"') + echo "[$(date)] : validation=$validation" >> /usr/local/vesta/log/letsencrypt.log + certificate=$(echo "$answer" | grep 'certificate":' | cut -f4 -d '"') + echo "[$(date)] : certificate=$certificate" >> /usr/local/vesta/log/letsencrypt.log + sleep $((i * 2)) # Sleep for 2s, 4s, 6s, 8s + if [ $i -gt 10 ]; then + check_result "$E_CONNECT" "Certificate processing timeout ($domain)" + fi + done fi if [ "$nonce" = "" ]; then echo "[$(date)] : EXIT=Let's Encrypt 'nonce' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log check_result $E_CONNECT "Let's Encrypt 'nonce' is empty on step 6" fi -# Downloading signed certificate / STEP 7 -echo "[$(date)] : --- Downloading signed certificate / STEP 7 ---" >> /usr/local/vesta/log/letsencrypt.log +# Downloading signed certificate / STEP 8 +echo "[$(date)] : --- Downloading signed certificate / STEP 8 ---" >> /usr/local/vesta/log/letsencrypt.log echo "[$(date)] : query_le_v2 \"$certificate\" \"\" \"$nonce\"" >> /usr/local/vesta/log/letsencrypt.log answer=$(query_le_v2 "$certificate" "" "$nonce" "$ssl_dir/$domain.pem") echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log From 2f395f0a5e09c18ac3b75e364964b8ed40777da5 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:06:03 +0200 Subject: [PATCH 172/583] Add staging --- bin/v-add-letsencrypt-domain | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index c37492b7..117d3eff 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -17,6 +17,10 @@ aliases=$3 # LE API API='https://acme-v02.api.letsencrypt.org' +if [[ "$LE_STAGING" = 'yes' ]]; then + LE_API='https://acme-staging-v02.api.letsencrypt.org' +fi + # Includes source $VESTA/func/main.sh source $VESTA/func/domain.sh From f50a785fffcfd1cdd1e8c94bf0af38207d24a763 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:10:50 +0200 Subject: [PATCH 173/583] Changing user-agent in v-add-letsencrypt-domain --- bin/v-add-letsencrypt-domain | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 117d3eff..305589e6 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -60,8 +60,8 @@ query_le_v2() { # Save http response to file passed as "$4" arg or print to stdout if not provided # http response headers are always sent to stdout local save_to_file=${4:-"/dev/stdout"} - curl --location --user-agent "MyVestaCP" --insecure --retry 5 --retry-connrefused --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" -} + curl --location --user-agent "myVesta" --insecure --retry 5 --retry-connrefused --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" + } @@ -127,7 +127,7 @@ fi # Requesting nonce / STEP 1 echo "[$(date)] : --- Requesting nonce / STEP 1 ---" >> /usr/local/vesta/log/letsencrypt.log echo "[$(date)] : curl -s -I \"$API/directory\"" >> /usr/local/vesta/log/letsencrypt.log -answer=$(curl -s -I "$API/directory") +answer=$(curl --user-agent "myVesta" -s -I "$API/directory") echo "[$(date)] : answer=$answer" >> /usr/local/vesta/log/letsencrypt.log nonce=$(echo "$answer" |grep -i nonce |cut -f2 -d \ |tr -d '\r\n') echo "[$(date)] : nonce=$nonce" >> /usr/local/vesta/log/letsencrypt.log @@ -294,7 +294,7 @@ for auth in $authz; do check_result $E_CONNECT "Let's Encrypt domain validation timeout" fi echo "[$(date)] : curl: $url2 :" >> /usr/local/vesta/log/letsencrypt.log - get_answer=$(curl --silent -S "$url2") + get_answer=$(curl --user-agent "myVesta" --silent -S "$url2") echo "[$(date)] : get_answer=$get_answer" >> /usr/local/vesta/log/letsencrypt.log sleeping=$((i*2)) echo "[$(date)] : sleep $sleeping (i=$i)" >> /usr/local/vesta/log/letsencrypt.log From a18ee316a220265faf5d0cb329fee2c5b6c13b92 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 09:56:18 +0200 Subject: [PATCH 174/583] $LE_API to $API --- bin/v-add-letsencrypt-domain | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 305589e6..457557f0 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -18,7 +18,7 @@ aliases=$3 API='https://acme-v02.api.letsencrypt.org' if [[ "$LE_STAGING" = 'yes' ]]; then - LE_API='https://acme-staging-v02.api.letsencrypt.org' + API='https://acme-staging-v02.api.letsencrypt.org' fi # Includes From 1056cd624bc8319e1bc51de674a7a9da50329bf1 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 10:00:57 +0200 Subject: [PATCH 175/583] Adding LE_STAGING to v-add-letsencrypt-user --- bin/v-add-letsencrypt-user | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bin/v-add-letsencrypt-user b/bin/v-add-letsencrypt-user index 11aec113..9c7181c0 100755 --- a/bin/v-add-letsencrypt-user +++ b/bin/v-add-letsencrypt-user @@ -15,6 +15,10 @@ user=$1 # LE API API='https://acme-v02.api.letsencrypt.org' +if [[ "$LE_STAGING" = 'yes' ]]; then + API='https://acme-staging-v02.api.letsencrypt.org' +fi + # Includes source $VESTA/func/main.sh source $VESTA/conf/vesta.conf From fbf1d3390a97da4dfd2f0619644b3f0ad52e58ea Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 10:24:54 +0200 Subject: [PATCH 176/583] Checking for $nonce before step 7, and check for $certificate after step 7 --- bin/v-add-letsencrypt-domain | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 457557f0..7a306ab3 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -329,6 +329,12 @@ if [[ "$status" -ne 200 ]]; then echo "[$(date)] : EXIT=Let's Encrypt finalize bad status $status" >> /usr/local/vesta/log/letsencrypt.log check_result $E_CONNECT "Let's Encrypt finalize bad status $status" fi + +if [ "$nonce" = "" ]; then + echo "[$(date)] : EXIT=Let's Encrypt 'nonce' is empty after step 6" >> /usr/local/vesta/log/letsencrypt.log + check_result $E_CONNECT "Let's Encrypt 'nonce' is empty after step 6" +fi + if [ "$certificate" = "" ]; then validation="processing" i=1 @@ -351,9 +357,10 @@ if [ "$certificate" = "" ]; then fi done fi -if [ "$nonce" = "" ]; then - echo "[$(date)] : EXIT=Let's Encrypt 'nonce' is empty on step 6" >> /usr/local/vesta/log/letsencrypt.log - check_result $E_CONNECT "Let's Encrypt 'nonce' is empty on step 6" + +if [ "$certificate" = "" ]; then + echo "[$(date)] : EXIT=Let's Encrypt 'certificate' is empty after step 7" >> /usr/local/vesta/log/letsencrypt.log + check_result $E_CONNECT "Let's Encrypt 'certificate' is empty after step 7" fi # Downloading signed certificate / STEP 8 From b21efb09b6ca5441f157597ae6ef146df95782c2 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 10:28:44 +0200 Subject: [PATCH 177/583] Adding user-agent in v-add-letsencrypt-user --- bin/v-add-letsencrypt-user | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/v-add-letsencrypt-user b/bin/v-add-letsencrypt-user index 9c7181c0..d2338e82 100755 --- a/bin/v-add-letsencrypt-user +++ b/bin/v-add-letsencrypt-user @@ -45,7 +45,7 @@ query_le_v2() { post_data=$post_data'"payload":"'"$payload_"'",' post_data=$post_data'"signature":"'"$signature_"'"}' - curl -s -i -d "$post_data" "$1" -H "$content" + curl --user-agent "myVesta" -s -i -d "$post_data" "$1" -H "$content" } From 7a3fc4fcea84ab4c902936807d2bd36feb166f0b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 11:13:17 +0200 Subject: [PATCH 178/583] Update Changelog.md --- Changelog.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Changelog.md b/Changelog.md index 28f5cd6c..87f48b62 100644 --- a/Changelog.md +++ b/Changelog.md @@ -1,4 +1,8 @@ -Version 0.9.8-26-61 [05-Apr-2023] +Version 0.9.8-26-62 [05-Apr-2023] +================================================== +* Fix for LetsEncrypt Asynchronous Order Finalization (in collaboration with @HestiaCP ) + +Version 0.9.8-26-61 [04-Apr-2023] ================================================== * Many bugfixes * Hotfix for LetsEncrypt to prevent Apache falling From 0b7b8cef857ef9d335f59b98b907cf88d967f877 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Thu, 6 Apr 2023 11:14:44 +0200 Subject: [PATCH 179/583] Version 0.9.8-26-62 --- src/deb/latest.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/deb/latest.txt b/src/deb/latest.txt index 4ee18f6a..5e8393bb 100644 --- a/src/deb/latest.txt +++ b/src/deb/latest.txt @@ -1 +1 @@ -vesta-0.9.8-26-61 +vesta-0.9.8-26-62 From 863f3e2aa5f3b06bbf53eb465ca1834653cb8dec Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:40:23 +0200 Subject: [PATCH 180/583] Update README.md --- README.md | 87 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 77 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index c34d496b..6dfe1024 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,81 @@ -myVesta -================================================== -Visit our homepage: -- https://www.myvestacp.com/ +

myVesta

-Forum: -- https://forum.myvestacp.com/ +
+ +[![Screenshot of myVesta](https://www.myvestacp.com/screenshot1.png)](https://www.myvestacp.com/) + +
+ +

About

+ +

myVesta is a security and stability-focused fork of VestaCP, exclusively supporting Debian in order to maintain a streamlined ecosystem. Boasting a clean, clutter-free interface and the latest innovative technologies, our project is committed to staying synchronized with official VestaCP commits. We work independently to enhance security and develop new features, driven by our passion for contributing to the open-source community rather than monetary gain. As such, we will offer all features built for myVesta to the official VestaCP project through pull requests, without interfering with their development milestones.

+ +

Latest stable release: Version 1.7.0 | View Changelog +

+ +

Links

+ + +

Features of myVesta

+
    +
  • Support for Debian 10 and 11 (Debian 11 is recommended, but previous Debian releases are also supported)
  • +
  • Support for MySQL 8
  • +
  • nginx templates that can prevent denial-of-service on your server
  • +
  • Support for multi-PHP versions
  • +
  • You can host NodeJS apps
  • +
  • You can limit the maximum number of sent emails (per hour) per mail account and per hosting account, preventing hijacking of email accounts and preventing PHP malware scripts to send spam.
  • +
  • + You can completely "lock" myVesta so it can be accessed only via secret URL, for example https://serverhost:8083/?MY-SECRET-URL +
      +
    • During installation you will be asked to choose a secret URL for your hosting panel
    • +
    • Literally no PHP scripts will be alive on your hosting panel (won't be able to get executed), unless you access the hosting panel with secret URL parameter. Thus, when it happens that, let's say, some zero-day exploit pops up - attackers won't be able to access it without knowing your secret URL - PHP scripts from VestaCP will be simply dead - no one will be able to interact with your panel unless they have the secret URL.
    • +
    • You can see for yourself how this mechanism was built by looking at:
    • + +
    • If you didn't set the secret URL during installation, you can do it anytime. Just execute in shell: echo " /usr/local/vesta/web/inc/login_url.php
    • +
    +
  • +
  • We disabled dangerous PHP functions in php.ini, so even if, for example, your customer's CMS gets compromised, hacker will not be able to execute shell scripts from within PHP.
  • +
  • Apache is fully switched to mpm_event mode, while PHP is running in PHP-FPM mode, which is the most stable PHP-stack solution +
    • OPCache is turned on by default
    +
  • Auto-generating LetsEncrypt SSL for server hostname (signed SSL for Vesta 8083 port, for dovecot (IMAP & POP3) and for Exim (SMTP))
  • +
  • You can change Vesta port during installation or later using one command line: v-change-vesta-port [number]
  • +
  • ClamAV is configured to block zip/rar/7z archives that contains executable files (just like GMail)
  • +
  • Backup will run with lowest priority (to avoid load on server), and can be configured to run only by night (and to stop on the morning and continue next night)
  • +
      +
    • You can compile Vesta binaries by yourself - src/deb/vesta_compile.sh
    • +
    • You can even create your own APT repository in a minute
    • +
    • We are using latest nginx version for vesta-nginx package
    • +
    • With your own APT infrastructure you can take security of Vesta-installer infrastructure in your own hands. You will have full control of your Vesta code (this way you can rest assured that there's 0% chance that you'll install malicious packages from repositories that may get hacked)
    • +
    • Binaries that you compile are 100% compatible with official VestaCP from vestacp.com, so you can run official VestaCP code with your own binaries (in case you don't want the source code from this fork)
    • +
    + + +
+ +

How to install

+Download the installation script: + +```shell +curl -O http://c.myvestacp.com/vst-install-debian.sh +``` + +Then run it: + +```shell +bash vst-install-debian.sh +``` + +Or use our installer generator. + +

Licence

+myVesta is licensed under GPL v3 license. -Knowledge base: -- https://wiki.myvestacp.com/ -Changelog: -- https://github.com/myvesta/vesta/blob/master/Changelog.md From 5eabdd4784ca09356e865361b86ce6ac1ce8ca2f Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:41:06 +0200 Subject: [PATCH 181/583] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dfe1024..55b6c2c8 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@

myVesta is a security and stability-focused fork of VestaCP, exclusively supporting Debian in order to maintain a streamlined ecosystem. Boasting a clean, clutter-free interface and the latest innovative technologies, our project is committed to staying synchronized with official VestaCP commits. We work independently to enhance security and develop new features, driven by our passion for contributing to the open-source community rather than monetary gain. As such, we will offer all features built for myVesta to the official VestaCP project through pull requests, without interfering with their development milestones.

-

Latest stable release: Version 1.7.0 | View Changelog +

Latest stable release: Version 0.9.8-26-62 | View Changelog

Links

From e86585568d4baefb50b81f25ed9d692ddb3522a4 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:44:53 +0200 Subject: [PATCH 182/583] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 55b6c2c8..cc5d56d4 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@

myVesta is a security and stability-focused fork of VestaCP, exclusively supporting Debian in order to maintain a streamlined ecosystem. Boasting a clean, clutter-free interface and the latest innovative technologies, our project is committed to staying synchronized with official VestaCP commits. We work independently to enhance security and develop new features, driven by our passion for contributing to the open-source community rather than monetary gain. As such, we will offer all features built for myVesta to the official VestaCP project through pull requests, without interfering with their development milestones.

-

Latest stable release: Version 0.9.8-26-62 | View Changelog +

View Changelog

Links

From f0a82f02d3ca34f8a0e4d03a81e5bf414b0c9775 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:50:02 +0200 Subject: [PATCH 183/583] Update README.md --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index cc5d56d4..62207405 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,20 @@ bash vst-install-debian.sh Or use our installer generator. +

UUseful scripts

+ + +

Licence

myVesta is licensed under GPL v3 license. From 0e16d8d59c8f9276a3bf3de9cd21ab7c2ec16ca9 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:50:17 +0200 Subject: [PATCH 184/583] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 62207405..1848be5d 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ bash vst-install-debian.sh Or use our installer generator. -

UUseful scripts

+

Useful scripts

  • How to move accounts from one (my)Vesta server to another myVesta server
  • WordPress installer in one second
  • (v-install-wordpress) From 8dbfa3e2103790411c43084024db3fbd832ca06e Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Fri, 7 Apr 2023 13:53:10 +0200 Subject: [PATCH 185/583] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1848be5d..44d414b8 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@
  • Literally no PHP scripts will be alive on your hosting panel (won't be able to get executed), unless you access the hosting panel with secret URL parameter. Thus, when it happens that, let's say, some zero-day exploit pops up - attackers won't be able to access it without knowing your secret URL - PHP scripts from VestaCP will be simply dead - no one will be able to interact with your panel unless they have the secret URL.
  • You can see for yourself how this mechanism was built by looking at:
  • If you didn't set the secret URL during installation, you can do it anytime. Just execute in shell: echo " /usr/local/vesta/web/inc/login_url.php
  • From e2fcade5bb91ab978d6ffb59574d632858386e8b Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Sun, 9 Apr 2023 00:17:27 +0200 Subject: [PATCH 186/583] Update v-clone-website --- bin/v-clone-website | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/v-clone-website b/bin/v-clone-website index df98c6db..57749f74 100644 --- a/bin/v-clone-website +++ b/bin/v-clone-website @@ -434,6 +434,9 @@ else sudo -H -u$TO_USER wp search-replace "/home/$FROM_USER/" "/home/$TO_USER/" --precise --all-tables --skip-columns=guid fi sudo -H -u$TO_USER wp cache flush + cd $TO_FOLDER + sudo -H -u$TO_USER wp config shuffle-salts WP_CACHE_KEY_SALT --force + sudo -H -u$TO_USER wp config shuffle-salts fi echo "===== DONE ====" From 2fae00ae7dcce79657f54c3e8c057694a3451566 Mon Sep 17 00:00:00 2001 From: isscbta <53144593+isscbta@users.noreply.github.com> Date: Sun, 9 Apr 2023 00:22:04 +0200 Subject: [PATCH 187/583] Update v-clone-website --- bin/v-clone-website | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bin/v-clone-website b/bin/v-clone-website index 57749f74..74de3271 100644 --- a/bin/v-clone-website +++ b/bin/v-clone-website @@ -420,12 +420,6 @@ if [ $IT_IS_WP -eq 0 ]; then fi else cd $TO_FOLDER - if [ -d "wp-content/plugins/w3-total-cache" ]; then - rm -f wp-content/object-cache.php - rm -f wp-content/db.php - rm -f wp-content/advanced-cache.php - rm -rf wp-content/w3tc-config - rm -rf wp-content/plugins/w3-total-cache fi echo "=== Replacing $FROM_DOMAIN to $TO_DOMAIN in database $TO_DATABASE_NAME" sudo -H -u$TO_USER wp search-replace "$FROM_DOMAIN" "$TO_DOMAIN" --precise --all-tables --skip-columns=guid From 706e365a5e031f9d6d90630954d03cfabc1f0489 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 9 Apr 2023 14:01:18 +0200 Subject: [PATCH 188/583] syntax fix --- bin/v-clone-website | 2 -- 1 file changed, 2 deletions(-) diff --git a/bin/v-clone-website b/bin/v-clone-website index 74de3271..46623db4 100644 --- a/bin/v-clone-website +++ b/bin/v-clone-website @@ -420,7 +420,6 @@ if [ $IT_IS_WP -eq 0 ]; then fi else cd $TO_FOLDER - fi echo "=== Replacing $FROM_DOMAIN to $TO_DOMAIN in database $TO_DATABASE_NAME" sudo -H -u$TO_USER wp search-replace "$FROM_DOMAIN" "$TO_DOMAIN" --precise --all-tables --skip-columns=guid if [ "$FROM_USER" != "$TO_USER" ]; then @@ -428,7 +427,6 @@ else sudo -H -u$TO_USER wp search-replace "/home/$FROM_USER/" "/home/$TO_USER/" --precise --all-tables --skip-columns=guid fi sudo -H -u$TO_USER wp cache flush - cd $TO_FOLDER sudo -H -u$TO_USER wp config shuffle-salts WP_CACHE_KEY_SALT --force sudo -H -u$TO_USER wp config shuffle-salts fi From 77467eeebddd6853c04f462be8117a24f3603c53 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Wed, 12 Apr 2023 19:58:32 +0200 Subject: [PATCH 189/583] exim4 HELO authenticated patch --- install/debian/10/exim/exim4.conf.template | 10 ++++++---- install/debian/11/exim/exim4.conf.template | 10 ++++++---- install/debian/11/exim/exim4.conf.template-RC | 10 ++++++---- install/debian/8/exim/exim4.conf.template | 10 ++++++---- install/debian/9/exim/exim4.conf.template | 10 ++++++---- .../tools/patches/exim_helo_authenticated.patch | 14 ++++++++++++++ 6 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 src/deb/for-download/tools/patches/exim_helo_authenticated.patch diff --git a/install/debian/10/exim/exim4.conf.template b/install/debian/10/exim/exim4.conf.template index 70577b6e..0e5afaac 100644 --- a/install/debian/10/exim/exim4.conf.template +++ b/install/debian/10/exim/exim4.conf.template @@ -91,16 +91,18 @@ acl_check_mail: deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL - drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid + drop !authenticated = * + message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} - condition = ${if match{${lc:$sender_host_name}}{.telenor.rs}{false}{true}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s - drop condition = ${if isip{$sender_helo_name}} + drop !authenticated = * + condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) - drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} + drop !authenticated = * + condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address accept diff --git a/install/debian/11/exim/exim4.conf.template b/install/debian/11/exim/exim4.conf.template index 4b3c0dd9..72e3f668 100644 --- a/install/debian/11/exim/exim4.conf.template +++ b/install/debian/11/exim/exim4.conf.template @@ -91,16 +91,18 @@ acl_check_mail: deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL - drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid + drop !authenticated = * + message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} - condition = ${if match{${lc:$sender_host_name}}{.telenor.rs}{false}{true}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s - drop condition = ${if isip{$sender_helo_name}} + drop !authenticated = * + condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) - drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} + drop !authenticated = * + condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address accept diff --git a/install/debian/11/exim/exim4.conf.template-RC b/install/debian/11/exim/exim4.conf.template-RC index 36ba2a0d..e5ba36ab 100644 --- a/install/debian/11/exim/exim4.conf.template-RC +++ b/install/debian/11/exim/exim4.conf.template-RC @@ -108,16 +108,18 @@ acl_check_mail: deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL - drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid + drop !authenticated = * + message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} - condition = ${if match{${lc:$sender_host_name}}{.telenor.rs}{false}{true}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s - drop condition = ${if isip{$sender_helo_name}} + drop !authenticated = * + condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) - drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} + drop !authenticated = * + condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address accept diff --git a/install/debian/8/exim/exim4.conf.template b/install/debian/8/exim/exim4.conf.template index e49bbf4e..261947d2 100644 --- a/install/debian/8/exim/exim4.conf.template +++ b/install/debian/8/exim/exim4.conf.template @@ -87,16 +87,18 @@ acl_check_mail: deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL - drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid + drop !authenticated = * + message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} - condition = ${if match{${lc:$sender_host_name}}{.telenor.rs}{false}{true}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s - drop condition = ${if isip{$sender_helo_name}} + drop !authenticated = * + condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) - drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} + drop !authenticated = * + condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address accept diff --git a/install/debian/9/exim/exim4.conf.template b/install/debian/9/exim/exim4.conf.template index e49bbf4e..261947d2 100644 --- a/install/debian/9/exim/exim4.conf.template +++ b/install/debian/9/exim/exim4.conf.template @@ -87,16 +87,18 @@ acl_check_mail: deny condition = ${if eq{$sender_helo_name}{}} message = HELO required before MAIL - drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid + drop !authenticated = * + message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}} - condition = ${if match{${lc:$sender_host_name}}{.telenor.rs}{false}{true}} condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}} delay = 45s - drop condition = ${if isip{$sender_helo_name}} + drop !authenticated = * + condition = ${if isip{$sender_helo_name}} message = Access denied - Invalid HELO name (See RFC2821 4.1.3) - drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} + drop !authenticated = * + condition = ${if eq{[$interface_address]}{$sender_helo_name}} message = $interface_address is _my_ address accept diff --git a/src/deb/for-download/tools/patches/exim_helo_authenticated.patch b/src/deb/for-download/tools/patches/exim_helo_authenticated.patch new file mode 100644 index 00000000..9dd8dbad --- /dev/null +++ b/src/deb/for-download/tools/patches/exim_helo_authenticated.patch @@ -0,0 +1,14 @@ +--- /etc/exim4/exim4.conf.template.orig 2023-04-12 19:05:20.745847763 +0200 ++++ /etc/exim4/exim4.conf.template 2023-04-12 19:34:29.000000000 +0200 +@@ -94 +94,2 @@ +- drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid ++ drop !authenticated = * ++ message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid +@@ -100 +101,2 @@ +- drop condition = ${if isip{$sender_helo_name}} ++ drop !authenticated = * ++ condition = ${if isip{$sender_helo_name}} +@@ -103 +105,2 @@ +- drop condition = ${if eq{[$interface_address]}{$sender_helo_name}} ++ drop !authenticated = * ++ condition = ${if eq{[$interface_address]}{$sender_helo_name}} From 4dd6d22f077370e88ff049fc7ee9aab487008efb Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 14 Apr 2023 15:39:33 +0200 Subject: [PATCH 190/583] myvesta-php-func support for stdin --- bin/v-php-func | 9 +++ func/bash-to-php-interpreter.php | 8 +++ func/main.php | 2 + func/string.php | 113 +++++++++++++++++++++++++++++-- 4 files changed, 126 insertions(+), 6 deletions(-) diff --git a/bin/v-php-func b/bin/v-php-func index f6192c33..f7a73385 100644 --- a/bin/v-php-func +++ b/bin/v-php-func @@ -8,5 +8,14 @@ # Action # #----------------------------------------------------------# + +if [ -p /dev/stdin ]; then + STDIN=$(cat -) + if [ ! -z "$STDIN" ]; then + echo "$STDIN" | php /usr/local/vesta/func/bash-to-php-interpreter.php "$@" + exit $? + fi +fi + php /usr/local/vesta/func/bash-to-php-interpreter.php "$@" exit $? diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 13995e1c..e780d41c 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -7,6 +7,14 @@ else $SHLVL=3; if (!isset($argv)) exit(5); +stream_set_blocking(STDIN, false); +$myvesta_stdin=''; +$myvesta_f = fopen( 'php://stdin', 'r' ); +while( $myvesta_line = fgets( $myvesta_f ) ) { + $myvesta_stdin .= $myvesta_line; +} +fclose( $myvesta_f ); + include ("/usr/local/vesta/func/main.php"); include ("/usr/local/vesta/func/string.php"); diff --git a/func/main.php b/func/main.php index fcc96610..03a501a1 100644 --- a/func/main.php +++ b/func/main.php @@ -71,7 +71,9 @@ function myvesta_fix_args() { } function myvesta_test_func () { + global $myvesta_stdin; $args=func_get_args(); + if ($myvesta_stdin!='') array_splice( $args, 0, 0, array($myvesta_stdin) ); myvesta_echo ("You said: "); myvesta_echo (trim(print_r ($args, true))); } diff --git a/func/string.php b/func/string.php index 2b6a63d9..a38e068e 100644 --- a/func/string.php +++ b/func/string.php @@ -70,8 +70,23 @@ function myvesta_strip_in_file_between_including_borders($file, $left, $right) { // --- string functions --- -function myvesta_str_get_between (&$text, $left_substring, $right_substring, $start=0, $return_left_substring=0, $return_right_substring=0, $left_substring_necessary=1, $right_substring_necessary=1) { - global $myvesta_str_found_at, $myvesta_str_end_at; +function myvesta_str_get_between () { + global $myvesta_stdin, $myvesta_str_found_at, $myvesta_str_end_at; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $left_substring=$args[$args_i]; + $args_i++; $right_substring=$args[$args_i]; + $args_i++; $start=0; if (!empty($args[$args_i])) $start=intval($args[$args_i]); + $args_i++; $return_left_substring=0; if (!empty($args[$args_i])) $return_left_substring=intval($args[$args_i]); + $args_i++; $return_right_substring=0; if (!empty($args[$args_i])) $return_right_substring=intval($args[$args_i]); + $args_i++; $left_substring_necessary=1; if (!empty($args[$args_i])) $left_substring_necessary=intval($args[$args_i]); + $args_i++; $right_substring_necessary=1; if (!empty($args[$args_i])) $right_substring_necessary=intval($args[$args_i]); + $myvesta_str_found_at=0; $myvesta_str_end_at=0; $from_null=0; @@ -105,7 +120,19 @@ function myvesta_str_get_between (&$text, $left_substring, $right_substring, $st return substr($text, $pos1, $len); } -function myvesta_str_replace_once_between_including_borders(&$text, $left, $right, $replace_with) { +function myvesta_str_replace_once_between_including_borders() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $left=$args[$args_i]; + $args_i++; $right=$args[$args_i]; + $args_i++; $replace_with=$args[$args_i]; + $pos1=strpos($text, $left); if ($pos1===false) return $text; $pos2=strpos($text, $right, $pos1+strlen($left)); @@ -113,7 +140,18 @@ function myvesta_str_replace_once_between_including_borders(&$text, $left, $righ return substr($text, 0, $pos1).$replace_with.substr($text, $pos2+strlen($right)); } -function myvesta_str_strip_once_between_including_borders(&$text, $left, $right) { +function myvesta_str_strip_once_between_including_borders() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $left=$args[$args_i]; + $args_i++; $right=$args[$args_i]; + $pos1=strpos($text, $left); if ($pos1===false) return $text; $pos2=strpos($text, $right, $pos1+strlen($left)); @@ -121,7 +159,19 @@ function myvesta_str_strip_once_between_including_borders(&$text, $left, $right) return substr($text, 0, $pos1).substr($text, $pos2+strlen($right)); } -function myvesta_str_replace_between_including_borders($text, $left, $right, $replace_with) { +function myvesta_str_replace_between_including_borders() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $left=$args[$args_i]; + $args_i++; $right=$args[$args_i]; + $args_i++; $replace_with=$args[$args_i]; + $start=0; $left_len=strlen($left); $right_len=strlen($right); @@ -135,7 +185,18 @@ function myvesta_str_replace_between_including_borders($text, $left, $right, $re return $text; } -function myvesta_str_strip_between_including_borders($text, $left, $right) { +function myvesta_str_strip_between_including_borders() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $left=$args[$args_i]; + $args_i++; $right=$args[$args_i]; + $left_len=strlen($left); $right_len=strlen($right); while (true) { @@ -147,3 +208,43 @@ function myvesta_str_strip_between_including_borders($text, $left, $right) { } return $text; } + +function myvesta_str_find() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $find=$args[$args_i]; + + $pos=strpos($text, $find); + if ($pos===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, ""); + return $pos; +} + +function myvesta_str_uppercase() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + return strtoupper($text); +} + +function myvesta_str_lowercase() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + return strtolower($text); +} From 452f8a81d94380d02f163d110ab3ba4f2c22ea24 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:21:00 +0200 Subject: [PATCH 191/583] php myvesta_str_substring --- func/string.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/func/string.php b/func/string.php index a38e068e..9e531fb8 100644 --- a/func/string.php +++ b/func/string.php @@ -248,3 +248,19 @@ function myvesta_str_lowercase() { } return strtolower($text); } + +function myvesta_str_substring() { + global $myvesta_stdin; + $args=func_get_args(); + $args_i=-1; + if ($myvesta_stdin!='') { + $text=$myvesta_stdin; + } else { + $args_i++; $text=$args[$args_i]; + } + $args_i++; $start=$args[$args_i]; + $args_i++; $length=null; if (!empty($args[$args_i])) $length=intval($args[$args_i]); + + if ($length===null) return substr($text, $start); + if ($length!==null) return substr($text, $start, $length); +} From c5144bcbae09a3e332ce934127800b85cc1526df Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:47:42 +0200 Subject: [PATCH 192/583] v-php-func str_find quiet --- func/string.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/func/string.php b/func/string.php index 9e531fb8..ffc7bf68 100644 --- a/func/string.php +++ b/func/string.php @@ -2,14 +2,18 @@ // --- file functions --- -function myvesta_find_in_file($file, $find) { - if (!file_exists($file)) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); - +function myvesta_find_in_file($file, $find, $quiet=false) { + if (!file_exists($file)) { + if ($quiet) return false; + return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); + } + $buf=file_get_contents($file); $pos=strpos($buf, $find); + if ($pos===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, ""); - + if ($quiet) return true; return $pos; } @@ -219,9 +223,11 @@ function myvesta_str_find() { $args_i++; $text=$args[$args_i]; } $args_i++; $find=$args[$args_i]; + $args_i++; $quiet=false; if (!empty($args[$args_i])) $quiet=boolval($args[$args_i]); $pos=strpos($text, $find); if ($pos===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, ""); + if ($quiet) return true; return $pos; } From 2f371245455db8e982ddf853c37c820d6b447d54 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Fri, 14 Apr 2023 19:01:07 +0200 Subject: [PATCH 193/583] simplifying php str functions --- func/bash-to-php-interpreter.php | 1 + func/string.php | 110 ++++--------------------------- 2 files changed, 12 insertions(+), 99 deletions(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index e780d41c..461c1af0 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -29,6 +29,7 @@ if (!function_exists($func)) { $params=array(); +if ($myvesta_stdin!='') $params[]=$myvesta_stdin; for ($i=2; $i<$counter; $i++) { $argv[$i]=myvesta_fix_backslashes($argv[$i]); $params[]=$argv[$i]; diff --git a/func/string.php b/func/string.php index ffc7bf68..69881c8f 100644 --- a/func/string.php +++ b/func/string.php @@ -7,7 +7,7 @@ function myvesta_find_in_file($file, $find, $quiet=false) { if ($quiet) return false; return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File '$file' not found"); } - + $buf=file_get_contents($file); $pos=strpos($buf, $find); @@ -74,23 +74,8 @@ function myvesta_strip_in_file_between_including_borders($file, $left, $right) { // --- string functions --- -function myvesta_str_get_between () { - global $myvesta_stdin, $myvesta_str_found_at, $myvesta_str_end_at; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } - $args_i++; $left_substring=$args[$args_i]; - $args_i++; $right_substring=$args[$args_i]; - $args_i++; $start=0; if (!empty($args[$args_i])) $start=intval($args[$args_i]); - $args_i++; $return_left_substring=0; if (!empty($args[$args_i])) $return_left_substring=intval($args[$args_i]); - $args_i++; $return_right_substring=0; if (!empty($args[$args_i])) $return_right_substring=intval($args[$args_i]); - $args_i++; $left_substring_necessary=1; if (!empty($args[$args_i])) $left_substring_necessary=intval($args[$args_i]); - $args_i++; $right_substring_necessary=1; if (!empty($args[$args_i])) $right_substring_necessary=intval($args[$args_i]); - +function myvesta_str_get_between (&$text, $left_substring, $right_substring, $start=0, $return_left_substring=0, $return_right_substring=0, $left_substring_necessary=1, $right_substring_necessary=1) { + global $myvesta_str_found_at, $myvesta_str_end_at; $myvesta_str_found_at=0; $myvesta_str_end_at=0; $from_null=0; @@ -124,19 +109,7 @@ function myvesta_str_get_between () { return substr($text, $pos1, $len); } -function myvesta_str_replace_once_between_including_borders() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } - $args_i++; $left=$args[$args_i]; - $args_i++; $right=$args[$args_i]; - $args_i++; $replace_with=$args[$args_i]; - +function myvesta_str_replace_once_between_including_borders(&$text, $left, $right, $replace_with) { $pos1=strpos($text, $left); if ($pos1===false) return $text; $pos2=strpos($text, $right, $pos1+strlen($left)); @@ -144,18 +117,7 @@ function myvesta_str_replace_once_between_including_borders() { return substr($text, 0, $pos1).$replace_with.substr($text, $pos2+strlen($right)); } -function myvesta_str_strip_once_between_including_borders() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } - $args_i++; $left=$args[$args_i]; - $args_i++; $right=$args[$args_i]; - +function myvesta_str_strip_once_between_including_borders(&$text, $left, $right) { $pos1=strpos($text, $left); if ($pos1===false) return $text; $pos2=strpos($text, $right, $pos1+strlen($left)); @@ -163,19 +125,7 @@ function myvesta_str_strip_once_between_including_borders() { return substr($text, 0, $pos1).substr($text, $pos2+strlen($right)); } -function myvesta_str_replace_between_including_borders() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } - $args_i++; $left=$args[$args_i]; - $args_i++; $right=$args[$args_i]; - $args_i++; $replace_with=$args[$args_i]; - +function myvesta_str_replace_between_including_borders($text, $left, $right, $replace_with) { $start=0; $left_len=strlen($left); $right_len=strlen($right); @@ -189,7 +139,7 @@ function myvesta_str_replace_between_including_borders() { return $text; } -function myvesta_str_strip_between_including_borders() { +function myvesta_str_strip_between_including_borders($text, $left, $right) { global $myvesta_stdin; $args=func_get_args(); $args_i=-1; @@ -213,60 +163,22 @@ function myvesta_str_strip_between_including_borders() { return $text; } -function myvesta_str_find() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } - $args_i++; $find=$args[$args_i]; - $args_i++; $quiet=false; if (!empty($args[$args_i])) $quiet=boolval($args[$args_i]); - +function myvesta_str_find($text, $find, $quiet=false) { $pos=strpos($text, $find); if ($pos===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, ""); if ($quiet) return true; return $pos; } -function myvesta_str_uppercase() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } +function myvesta_str_uppercase($text) { return strtoupper($text); } -function myvesta_str_lowercase() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } +function myvesta_str_lowercase($text) { return strtolower($text); } -function myvesta_str_substring() { - global $myvesta_stdin; - $args=func_get_args(); - $args_i=-1; - if ($myvesta_stdin!='') { - $text=$myvesta_stdin; - } else { - $args_i++; $text=$args[$args_i]; - } - $args_i++; $start=$args[$args_i]; - $args_i++; $length=null; if (!empty($args[$args_i])) $length=intval($args[$args_i]); - +function myvesta_str_substring($text, $start, $length=null) { if ($length===null) return substr($text, $start); if ($length!==null) return substr($text, $start, $length); } From 888db2bc72a9951b53051ab32ac25a6eb7341ca8 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 15 Apr 2023 15:50:27 +0200 Subject: [PATCH 194/583] myvesta php replacement for gnu 'grep' (but without regular expression) --- bin/v-php-func | 2 +- func/bash-to-php-interpreter.php | 27 ++++++++++- func/main.php | 83 ++++++++++++++++++++++++++++++-- func/string.php | 34 +++++++++++++ 4 files changed, 140 insertions(+), 6 deletions(-) diff --git a/bin/v-php-func b/bin/v-php-func index f7a73385..0c789863 100644 --- a/bin/v-php-func +++ b/bin/v-php-func @@ -2,7 +2,7 @@ # info: calling myVesta PHP functions # options: FUNCTION # -# The function is calling myVesta PHP functions. +# The function is calling myVesta or standard PHP functions directly from bash #----------------------------------------------------------# # Action # diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 461c1af0..baf9475e 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -11,7 +11,7 @@ stream_set_blocking(STDIN, false); $myvesta_stdin=''; $myvesta_f = fopen( 'php://stdin', 'r' ); while( $myvesta_line = fgets( $myvesta_f ) ) { - $myvesta_stdin .= $myvesta_line; + $myvesta_stdin .= $myvesta_line; } fclose( $myvesta_f ); @@ -27,13 +27,36 @@ if (!function_exists($func)) { if (!function_exists($func)) myvesta_throw_error(2, 'Function does not exists'); } +$insert_stdin_at_position=false; +if ($func=="myvesta_grep") $insert_stdin_at_position=1; + $params=array(); -if ($myvesta_stdin!='') $params[]=$myvesta_stdin; +$added=0; +$stdin_content=''; + $myvesta_stdin_return_not_found=false; +if ($myvesta_stdin!='' && $insert_stdin_at_position===false) {$params[]=$myvesta_stdin; $added++;} + for ($i=2; $i<$counter; $i++) { $argv[$i]=myvesta_fix_backslashes($argv[$i]); + if ($insert_stdin_at_position!==false && $myvesta_stdin=='') if ($insert_stdin_at_position==$added) {$stdin_content=$argv[$i]; $added++; continue;} $params[]=$argv[$i]; + $added++; } +if ($insert_stdin_at_position!=false) { + if ($myvesta_stdin=='') { + $file_or_stdin=$stdin_content; + if (!file_exists($file_or_stdin)) { + $myvesta_stdin_return_not_found=true; + $myvesta_stdin=''; + } else { + $myvesta_stdin=file_get_contents($file_or_stdin); + } + } + if (isset($params[$insert_stdin_at_position])) array_splice($params, $insert_stdin_at_position, 0, array($myvesta_stdin)); + else $params[$insert_stdin_at_position]=$myvesta_stdin; +} +//print_r($params); exit; $r=call_user_func_array($func, $params); if (is_bool($r)) { diff --git a/func/main.php b/func/main.php index 03a501a1..650f52ef 100644 --- a/func/main.php +++ b/func/main.php @@ -14,9 +14,88 @@ function myvesta_echo($str) { echo $str; } -function myvesta_exit($code) { +function myvesta_exit($code, $echo='') { global $SHLVL, $myvesta_echo_done, $myvesta_last_echo; // myvesta_echo ("==================== ".$argv[0].": ".$code." ====================\n"); + if ($echo!='') myvesta_echo($echo); + if ($SHLVL<3 && $myvesta_echo_done==true) { + $last_char=substr($myvesta_last_echo, -1, 1); + if ($last_char!="\n") echo "\n"; + } + exit($code); +} + +$myvesta_current_user=exec('whoami', $myvesta_output, $myvesta_return_var); +if ($myvesta_current_user != 'root') {myvesta_echo ("ERROR: You must be root to execute this script"); myvesta_exit(1);} + +function myvesta_throw_error($code, $message) { + global $myvesta_exit_on_error; + if ($message!=='') myvesta_echo ("ERROR: ".$message); + if ($myvesta_exit_on_error) myvesta_exit($code); + return $code; +} + +function myvesta_fix_backslashes($s) { + $s=str_replace("\\n", "\n", $s); + $s=str_replace("\\r", "\r", $s); + $s=str_replace("\\t", "\t", $s); + return $s; +} + +function myvesta_check_args ($requried_arguments, $arguments) { + global $argv; + $argument_counter=count($argv); + $argument_counter--; + $argv[0]=str_replace('/usr/local/vesta/bin/', '', $argv[0]); + // myvesta_echo ( "-------------------- ".$argv[0]." --------------------\n"); + if ($argument_counter<$requried_arguments) { + $arguments=str_replace(" ", "' '", $arguments); + $arguments="'".$arguments."'"; + return myvesta_throw_error(MYVESTA_ERROR_MISSING_ARGUMENTS, "Usage: $command $arguments"); + } + $argument_arr=explode(" ", $arguments); + $i=1; + foreach ($argument_arr as $argument) { + $GLOBALS[$argument]=myvesta_fix_backslashes($argv[$i]); + $i++; + } +} + +function myvesta_fix_args() { + global $argv; + $i=0; + foreach ($argv as $argument) { + if ($i==0) {$i++; continue;} + $argv[$i]=myvesta_fix_backslashes($argv[$i]); + $i++; + } +} + +function myvesta_test_func () { + $args=func_get_args(); + myvesta_echo ("You said: "); + myvesta_echo (trim(print_r ($args, true))); +} + Date: Sat, 15 Apr 2023 15:53:21 +0200 Subject: [PATCH 195/583] correction for main.php --- func/main.php | 78 --------------------------------------------------- 1 file changed, 78 deletions(-) diff --git a/func/main.php b/func/main.php index 650f52ef..b521ea2e 100644 --- a/func/main.php +++ b/func/main.php @@ -76,81 +76,3 @@ function myvesta_test_func () { myvesta_echo ("You said: "); myvesta_echo (trim(print_r ($args, true))); } - Date: Sat, 15 Apr 2023 16:38:53 +0200 Subject: [PATCH 196/583] myvesta php replacement for gnu 'sed' (but without regular expression) --- func/bash-to-php-interpreter.php | 3 +++ func/main.php | 20 ++++++++++++-------- func/string.php | 26 +++++++++++++++++++++++--- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index baf9475e..09c9c499 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -29,11 +29,13 @@ if (!function_exists($func)) { $insert_stdin_at_position=false; if ($func=="myvesta_grep") $insert_stdin_at_position=1; +if ($func=="myvesta_sed") $insert_stdin_at_position=2; $params=array(); $added=0; $stdin_content=''; +$myvesta_stdin_from_file=''; $myvesta_stdin_return_not_found=false; if ($myvesta_stdin!='' && $insert_stdin_at_position===false) {$params[]=$myvesta_stdin; $added++;} @@ -51,6 +53,7 @@ if ($insert_stdin_at_position!=false) { $myvesta_stdin=''; } else { $myvesta_stdin=file_get_contents($file_or_stdin); + $myvesta_stdin_from_file=$file_or_stdin; } } if (isset($params[$insert_stdin_at_position])) array_splice($params, $insert_stdin_at_position, 0, array($myvesta_stdin)); diff --git a/func/main.php b/func/main.php index b521ea2e..967fb8fb 100644 --- a/func/main.php +++ b/func/main.php @@ -1,6 +1,7 @@ Date: Sat, 15 Apr 2023 18:51:15 +0200 Subject: [PATCH 197/583] MYVESTA_QUIET as export variable --- func/main.php | 2 ++ func/string.php | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/func/main.php b/func/main.php index 967fb8fb..22834d42 100644 --- a/func/main.php +++ b/func/main.php @@ -2,6 +2,8 @@ $myvesta_exit_on_error=true; $myvesta_quiet_mode=0; +if (isset($_SERVER['MYVESTA_QUIET'])) $myvesta_quiet_mode=intval($_SERVER['MYVESTA_QUIET']); + define('MYVESTA_ERROR_PERMISSION_DENIED', 1); define('MYVESTA_ERROR_MISSING_ARGUMENTS', 2); define('MYVESTA_ERROR_FILE_DOES_NOT_EXISTS', 3); diff --git a/func/string.php b/func/string.php index e4ba2a5f..371c643c 100644 --- a/func/string.php +++ b/func/string.php @@ -81,8 +81,8 @@ function myvesta_grep($find, $file_or_stdin, $count=0, $quiet=0) { $myvesta_quiet_mode=$quiet; //echo "find = " . $find."\n"; echo "file_or_stdin = " . $file_or_stdin."\n"; echo "count = " . $count."\n"; echo "quiet = " . $quiet."\n"; exit; if ($myvesta_stdin_return_not_found==true) { - if ($count==1) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, "0"); - return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, ""); + if ($count==1) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "0"); + return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, ""); } $arr=explode("\n", $file_or_stdin); @@ -111,7 +111,7 @@ function myvesta_sed($find, $replace, $file_or_stdin) { global $myvesta_stdin, $myvesta_stdin_return_not_found, $myvesta_stdin_from_file; //echo "find = " . $find."\n"; echo "replace = " . $replace."\n"; echo "file_or_stdin = " . $file_or_stdin."\n"; echo "stdin_from_file = " . $myvesta_stdin_from_file."\n"; exit; if ($myvesta_stdin_return_not_found==true) { - return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, "File not found"); + return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File not found"); } if (strpos($file_or_stdin, $find)===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, "String '$find' not found"); From 502acb44c01a21fe4435d93ed59e1fe605441ac9 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 15 Apr 2023 19:03:11 +0200 Subject: [PATCH 198/583] v-grep and v-sed --- bin/v-grep | 21 +++++++++++++++++++++ bin/v-sed | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 bin/v-grep create mode 100644 bin/v-sed diff --git a/bin/v-grep b/bin/v-grep new file mode 100644 index 00000000..3e467129 --- /dev/null +++ b/bin/v-grep @@ -0,0 +1,21 @@ +#!/bin/bash +# info: calling myvesta_grep PHP function +# options: PARAMETERS +# +# The function is calling myVesta PHP replacement for GNU 'grep' command (but without regular expression) + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + + +if [ -p /dev/stdin ]; then + STDIN=$(cat -) + if [ ! -z "$STDIN" ]; then + echo "$STDIN" | php /usr/local/vesta/func/bash-to-php-interpreter.php 'myvesta_grep' "$@" + exit $? + fi +fi + +php /usr/local/vesta/func/bash-to-php-interpreter.php 'myvesta_grep' "$@" +exit $? diff --git a/bin/v-sed b/bin/v-sed new file mode 100644 index 00000000..9d1a82ee --- /dev/null +++ b/bin/v-sed @@ -0,0 +1,21 @@ +#!/bin/bash +# info: calling myvesta_sed PHP function +# options: PARAMETERS +# +# The function is calling myVesta PHP replacement for GNU 'sed' command (but without regular expression) + +#----------------------------------------------------------# +# Action # +#----------------------------------------------------------# + + +if [ -p /dev/stdin ]; then + STDIN=$(cat -) + if [ ! -z "$STDIN" ]; then + echo "$STDIN" | php /usr/local/vesta/func/bash-to-php-interpreter.php 'myvesta_sed' "$@" + exit $? + fi +fi + +php /usr/local/vesta/func/bash-to-php-interpreter.php 'myvesta_sed' "$@" +exit $? From ae45e4a57198557a47a31ddf5e847dc0579d060b Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 16 Apr 2023 00:10:54 +0200 Subject: [PATCH 199/583] simplifying php code --- func/bash-to-php-interpreter.php | 11 +++++++---- func/string.php | 26 +++++++++++++------------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/func/bash-to-php-interpreter.php b/func/bash-to-php-interpreter.php index 09c9c499..4c1e9dc5 100644 --- a/func/bash-to-php-interpreter.php +++ b/func/bash-to-php-interpreter.php @@ -41,13 +41,15 @@ if ($myvesta_stdin!='' && $insert_stdin_at_position===false) {$params[]=$myvesta for ($i=2; $i<$counter; $i++) { $argv[$i]=myvesta_fix_backslashes($argv[$i]); - if ($insert_stdin_at_position!==false && $myvesta_stdin=='') if ($insert_stdin_at_position==$added) {$stdin_content=$argv[$i]; $added++; continue;} + //if ($insert_stdin_at_position!==false && $myvesta_stdin=='') if ($insert_stdin_at_position==$added) {$stdin_content=$argv[$i]; $added++; continue;} $params[]=$argv[$i]; $added++; } +//print_r($params); exit; + if ($insert_stdin_at_position!=false) { if ($myvesta_stdin=='') { - $file_or_stdin=$stdin_content; + $file_or_stdin=$params[$insert_stdin_at_position]; if (!file_exists($file_or_stdin)) { $myvesta_stdin_return_not_found=true; $myvesta_stdin=''; @@ -55,9 +57,10 @@ if ($insert_stdin_at_position!=false) { $myvesta_stdin=file_get_contents($file_or_stdin); $myvesta_stdin_from_file=$file_or_stdin; } + $params[$insert_stdin_at_position]=$myvesta_stdin; + } else { + array_splice($params, $insert_stdin_at_position, 0, array($myvesta_stdin)); } - if (isset($params[$insert_stdin_at_position])) array_splice($params, $insert_stdin_at_position, 0, array($myvesta_stdin)); - else $params[$insert_stdin_at_position]=$myvesta_stdin; } //print_r($params); exit; diff --git a/func/string.php b/func/string.php index 371c643c..7ada2546 100644 --- a/func/string.php +++ b/func/string.php @@ -74,25 +74,25 @@ function myvesta_strip_in_file_between_including_borders($file, $left, $right) { // --- mixed functions --- -function myvesta_grep($find, $file_or_stdin, $count=0, $quiet=0) { +function myvesta_grep($find, $content, $count=0, $quiet=0) { global $myvesta_stdin, $myvesta_stdin_return_not_found, $myvesta_quiet_mode; if ($count==='-c') {$count=1; $quiet=0;} if ($count==='-q') {$count=0; $quiet=1;} - $myvesta_quiet_mode=$quiet; - //echo "find = " . $find."\n"; echo "file_or_stdin = " . $file_or_stdin."\n"; echo "count = " . $count."\n"; echo "quiet = " . $quiet."\n"; exit; + if ($myvesta_quiet_mode==0) $myvesta_quiet_mode=$quiet; + //echo "find = " . $find."\n"; echo "file_or_stdin = " . $content."\n"; echo "count = " . $count."\n"; echo "quiet = " . $quiet."\n"; exit; if ($myvesta_stdin_return_not_found==true) { if ($count==1) return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "0"); return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, ""); } - $arr=explode("\n", $file_or_stdin); + $arr=explode("\n", $content); - $buf=''; + $buffer=''; $hits=0; foreach ($arr as $line) { if (strpos($line, $find)!==false) { $hits++; - if ($quiet==false && $count==false) $buf.=$line."\n"; + if ($quiet==false && $count==false) $buffer.=$line."\n"; } } if ($count==1) { @@ -104,24 +104,24 @@ function myvesta_grep($find, $file_or_stdin, $count=0, $quiet=0) { return true; } if ($hits==0) return myvesta_exit (MYVESTA_ERROR_STRING_NOT_FOUND, ""); - return $buf; + return $buffer; } -function myvesta_sed($find, $replace, $file_or_stdin) { +function myvesta_sed($find, $replace, $content) { global $myvesta_stdin, $myvesta_stdin_return_not_found, $myvesta_stdin_from_file; - //echo "find = " . $find."\n"; echo "replace = " . $replace."\n"; echo "file_or_stdin = " . $file_or_stdin."\n"; echo "stdin_from_file = " . $myvesta_stdin_from_file."\n"; exit; + //echo "find = " . $find."\n"; echo "replace = " . $replace."\n"; echo "file_or_stdin = " . $content."\n"; echo "stdin_from_file = " . $myvesta_stdin_from_file."\n"; exit; if ($myvesta_stdin_return_not_found==true) { return myvesta_throw_error (MYVESTA_ERROR_FILE_DOES_NOT_EXISTS, "File not found"); } - if (strpos($file_or_stdin, $find)===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, "String '$find' not found"); + if (strpos($content, $find)===false) return myvesta_throw_error (MYVESTA_ERROR_STRING_NOT_FOUND, "String '$find' not found"); - $file_or_stdin=str_replace($find, $replace, $file_or_stdin); + $content=str_replace($find, $replace, $content); if ($myvesta_stdin_from_file!='') { - $r=file_put_contents($myvesta_stdin_from_file, $file_or_stdin); + $r=file_put_contents($myvesta_stdin_from_file, $content); if ($r===false) return false; } else { - myvesta_echo ($file_or_stdin); + myvesta_echo ($content); } return true; } From 22d524cfceb793cf9c1a1f337fa2c58e0a70004e Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 30 Apr 2023 15:15:43 +0200 Subject: [PATCH 200/583] apache templates -FollowSymLinks +SymLinksIfOwnerMatch --- install/debian/10/templates/web/apache2/PHP-FPM-73-public.stpl | 2 +- install/debian/10/templates/web/apache2/PHP-FPM-73-public.tpl | 2 +- install/debian/10/templates/web/apache2/PHP-FPM-73.stpl | 2 +- install/debian/10/templates/web/apache2/PHP-FPM-73.tpl | 2 +- install/debian/11/templates/web/apache2/PHP-FPM-74-public.stpl | 2 +- install/debian/11/templates/web/apache2/PHP-FPM-74-public.tpl | 2 +- install/debian/11/templates/web/apache2/PHP-FPM-74.stpl | 2 +- install/debian/11/templates/web/apache2/PHP-FPM-74.tpl | 2 +- install/debian/8/templates/web/apache2/basedir.stpl | 2 +- install/debian/8/templates/web/apache2/basedir.tpl | 2 +- install/debian/8/templates/web/apache2/default.stpl | 2 +- install/debian/8/templates/web/apache2/default.tpl | 2 +- install/debian/8/templates/web/apache2/hosting.stpl | 2 +- install/debian/8/templates/web/apache2/hosting.tpl | 2 +- install/debian/8/templates/web/apache2/phpcgi.stpl | 2 +- install/debian/8/templates/web/apache2/phpcgi.tpl | 2 +- install/debian/8/templates/web/apache2/phpfcgid.stpl | 2 +- install/debian/8/templates/web/apache2/phpfcgid.tpl | 2 +- install/debian/9/templates/web/apache2/basedir.stpl | 2 +- install/debian/9/templates/web/apache2/basedir.tpl | 2 +- install/debian/9/templates/web/apache2/default.stpl | 2 +- install/debian/9/templates/web/apache2/default.tpl | 2 +- install/debian/9/templates/web/apache2/hosting.stpl | 2 +- install/debian/9/templates/web/apache2/hosting.tpl | 2 +- install/debian/9/templates/web/apache2/phpcgi.stpl | 2 +- install/debian/9/templates/web/apache2/phpcgi.tpl | 2 +- install/debian/9/templates/web/apache2/phpfcgid.stpl | 2 +- install/debian/9/templates/web/apache2/phpfcgid.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.tpl | 2 +- .../for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.tpl | 2 +- .../for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.tpl | 2 +- .../for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.tpl | 2 +- .../for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.tpl | 2 +- .../for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl | 2 +- src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl | 2 +- 56 files changed, 56 insertions(+), 56 deletions(-) diff --git a/install/debian/10/templates/web/apache2/PHP-FPM-73-public.stpl b/install/debian/10/templates/web/apache2/PHP-FPM-73-public.stpl index 9660c234..39777224 100644 --- a/install/debian/10/templates/web/apache2/PHP-FPM-73-public.stpl +++ b/install/debian/10/templates/web/apache2/PHP-FPM-73-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/install/debian/10/templates/web/apache2/PHP-FPM-73-public.tpl b/install/debian/10/templates/web/apache2/PHP-FPM-73-public.tpl index 892c0d1f..b6e306d7 100644 --- a/install/debian/10/templates/web/apache2/PHP-FPM-73-public.tpl +++ b/install/debian/10/templates/web/apache2/PHP-FPM-73-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/install/debian/10/templates/web/apache2/PHP-FPM-73.stpl b/install/debian/10/templates/web/apache2/PHP-FPM-73.stpl index 28224413..902d647a 100644 --- a/install/debian/10/templates/web/apache2/PHP-FPM-73.stpl +++ b/install/debian/10/templates/web/apache2/PHP-FPM-73.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/install/debian/10/templates/web/apache2/PHP-FPM-73.tpl b/install/debian/10/templates/web/apache2/PHP-FPM-73.tpl index 7bec5e73..40df2629 100644 --- a/install/debian/10/templates/web/apache2/PHP-FPM-73.tpl +++ b/install/debian/10/templates/web/apache2/PHP-FPM-73.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/install/debian/11/templates/web/apache2/PHP-FPM-74-public.stpl b/install/debian/11/templates/web/apache2/PHP-FPM-74-public.stpl index fdbc26f9..739cb48d 100644 --- a/install/debian/11/templates/web/apache2/PHP-FPM-74-public.stpl +++ b/install/debian/11/templates/web/apache2/PHP-FPM-74-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/install/debian/11/templates/web/apache2/PHP-FPM-74-public.tpl b/install/debian/11/templates/web/apache2/PHP-FPM-74-public.tpl index 614f20c3..f31ed5a8 100644 --- a/install/debian/11/templates/web/apache2/PHP-FPM-74-public.tpl +++ b/install/debian/11/templates/web/apache2/PHP-FPM-74-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/install/debian/11/templates/web/apache2/PHP-FPM-74.stpl b/install/debian/11/templates/web/apache2/PHP-FPM-74.stpl index df607247..fbc1d9c6 100644 --- a/install/debian/11/templates/web/apache2/PHP-FPM-74.stpl +++ b/install/debian/11/templates/web/apache2/PHP-FPM-74.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/install/debian/11/templates/web/apache2/PHP-FPM-74.tpl b/install/debian/11/templates/web/apache2/PHP-FPM-74.tpl index 7b6e2cb5..aaf8f62c 100644 --- a/install/debian/11/templates/web/apache2/PHP-FPM-74.tpl +++ b/install/debian/11/templates/web/apache2/PHP-FPM-74.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/install/debian/8/templates/web/apache2/basedir.stpl b/install/debian/8/templates/web/apache2/basedir.stpl index 2db1d52c..60a8f7fd 100644 --- a/install/debian/8/templates/web/apache2/basedir.stpl +++ b/install/debian/8/templates/web/apache2/basedir.stpl @@ -14,7 +14,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/basedir.tpl b/install/debian/8/templates/web/apache2/basedir.tpl index 96c94a1b..3b8f875a 100644 --- a/install/debian/8/templates/web/apache2/basedir.tpl +++ b/install/debian/8/templates/web/apache2/basedir.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/default.stpl b/install/debian/8/templates/web/apache2/default.stpl index ec34c279..3fc7e160 100644 --- a/install/debian/8/templates/web/apache2/default.stpl +++ b/install/debian/8/templates/web/apache2/default.stpl @@ -14,7 +14,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/default.tpl b/install/debian/8/templates/web/apache2/default.tpl index 3a227015..464257ec 100644 --- a/install/debian/8/templates/web/apache2/default.tpl +++ b/install/debian/8/templates/web/apache2/default.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/hosting.stpl b/install/debian/8/templates/web/apache2/hosting.stpl index c9c19512..b17014cd 100644 --- a/install/debian/8/templates/web/apache2/hosting.stpl +++ b/install/debian/8/templates/web/apache2/hosting.stpl @@ -14,7 +14,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value upload_max_filesize 10M php_admin_value max_execution_time 20 php_admin_value post_max_size 8M diff --git a/install/debian/8/templates/web/apache2/hosting.tpl b/install/debian/8/templates/web/apache2/hosting.tpl index 1eb26910..34f55b29 100644 --- a/install/debian/8/templates/web/apache2/hosting.tpl +++ b/install/debian/8/templates/web/apache2/hosting.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value upload_max_filesize 10M php_admin_value max_execution_time 20 php_admin_value post_max_size 8M diff --git a/install/debian/8/templates/web/apache2/phpcgi.stpl b/install/debian/8/templates/web/apache2/phpcgi.stpl index ae560dbe..7c1248d4 100644 --- a/install/debian/8/templates/web/apache2/phpcgi.stpl +++ b/install/debian/8/templates/web/apache2/phpcgi.stpl @@ -14,7 +14,7 @@ SSLRequireSSL AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/phpcgi.tpl b/install/debian/8/templates/web/apache2/phpcgi.tpl index c6796d29..603ea8b9 100644 --- a/install/debian/8/templates/web/apache2/phpcgi.tpl +++ b/install/debian/8/templates/web/apache2/phpcgi.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/phpfcgid.stpl b/install/debian/8/templates/web/apache2/phpfcgid.stpl index bc3688d9..98304f2a 100644 --- a/install/debian/8/templates/web/apache2/phpfcgid.stpl +++ b/install/debian/8/templates/web/apache2/phpfcgid.stpl @@ -14,7 +14,7 @@ SSLRequireSSL AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/8/templates/web/apache2/phpfcgid.tpl b/install/debian/8/templates/web/apache2/phpfcgid.tpl index a4c01269..525b1f53 100644 --- a/install/debian/8/templates/web/apache2/phpfcgid.tpl +++ b/install/debian/8/templates/web/apache2/phpfcgid.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/basedir.stpl b/install/debian/9/templates/web/apache2/basedir.stpl index 2db1d52c..60a8f7fd 100644 --- a/install/debian/9/templates/web/apache2/basedir.stpl +++ b/install/debian/9/templates/web/apache2/basedir.stpl @@ -14,7 +14,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/basedir.tpl b/install/debian/9/templates/web/apache2/basedir.tpl index 96c94a1b..3b8f875a 100644 --- a/install/debian/9/templates/web/apache2/basedir.tpl +++ b/install/debian/9/templates/web/apache2/basedir.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/default.stpl b/install/debian/9/templates/web/apache2/default.stpl index ec34c279..3fc7e160 100644 --- a/install/debian/9/templates/web/apache2/default.stpl +++ b/install/debian/9/templates/web/apache2/default.stpl @@ -14,7 +14,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/default.tpl b/install/debian/9/templates/web/apache2/default.tpl index 3a227015..464257ec 100644 --- a/install/debian/9/templates/web/apache2/default.tpl +++ b/install/debian/9/templates/web/apache2/default.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/hosting.stpl b/install/debian/9/templates/web/apache2/hosting.stpl index c9c19512..b17014cd 100644 --- a/install/debian/9/templates/web/apache2/hosting.stpl +++ b/install/debian/9/templates/web/apache2/hosting.stpl @@ -14,7 +14,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value upload_max_filesize 10M php_admin_value max_execution_time 20 php_admin_value post_max_size 8M diff --git a/install/debian/9/templates/web/apache2/hosting.tpl b/install/debian/9/templates/web/apache2/hosting.tpl index 1eb26910..34f55b29 100644 --- a/install/debian/9/templates/web/apache2/hosting.tpl +++ b/install/debian/9/templates/web/apache2/hosting.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value upload_max_filesize 10M php_admin_value max_execution_time 20 php_admin_value post_max_size 8M diff --git a/install/debian/9/templates/web/apache2/phpcgi.stpl b/install/debian/9/templates/web/apache2/phpcgi.stpl index ae560dbe..7c1248d4 100644 --- a/install/debian/9/templates/web/apache2/phpcgi.stpl +++ b/install/debian/9/templates/web/apache2/phpcgi.stpl @@ -14,7 +14,7 @@ SSLRequireSSL AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/phpcgi.tpl b/install/debian/9/templates/web/apache2/phpcgi.tpl index c6796d29..603ea8b9 100644 --- a/install/debian/9/templates/web/apache2/phpcgi.tpl +++ b/install/debian/9/templates/web/apache2/phpcgi.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/phpfcgid.stpl b/install/debian/9/templates/web/apache2/phpfcgid.stpl index bc3688d9..98304f2a 100644 --- a/install/debian/9/templates/web/apache2/phpfcgid.stpl +++ b/install/debian/9/templates/web/apache2/phpfcgid.stpl @@ -14,7 +14,7 @@ SSLRequireSSL AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %sdocroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/install/debian/9/templates/web/apache2/phpfcgid.tpl b/install/debian/9/templates/web/apache2/phpfcgid.tpl index a4c01269..525b1f53 100644 --- a/install/debian/9/templates/web/apache2/phpfcgid.tpl +++ b/install/debian/9/templates/web/apache2/phpfcgid.tpl @@ -13,7 +13,7 @@ ErrorLog /var/log/%web_system%/domains/%domain%.error.log AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch php_admin_value open_basedir %docroot%:%home%/%user%/tmp php_admin_value upload_tmp_dir %home%/%user%/tmp php_admin_value session.save_path %home%/%user%/tmp diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.stpl index eb5631db..a24b368f 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.tpl index cd4e797d..55bc8233 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-56.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.stpl index 38285302..5d944c0f 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.tpl index 7d30d39c..c9378152 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-70.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.stpl index c5d284f7..a718b21f 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.tpl index 695b9937..9f0cf8a7 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-71.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.stpl index 2b4363b4..20792e92 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.tpl index be2ca7ae..89b19147 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-72.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.stpl index 9660c234..39777224 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.tpl index 892c0d1f..b6e306d7 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.stpl index 28224413..902d647a 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.tpl index 7bec5e73..40df2629 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-73.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.stpl index fdbc26f9..739cb48d 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.tpl index 614f20c3..f31ed5a8 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.stpl index df607247..fbc1d9c6 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.tpl index 7b6e2cb5..aaf8f62c 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-74.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.stpl index 4ce4b993..b1335a44 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.tpl index 41a5d506..1b0a610c 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.stpl index f39e9631..fae336fc 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.tpl index b9e32f14..64699c22 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-80.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.stpl index 0d6404ec..4116fd42 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.tpl index f2814063..ee319a20 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.stpl index fb191d03..5822a27a 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.tpl index 1a02ec15..7864b3a4 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-81.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch # # RMode config diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl index 6afebb6e..809e7f33 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl index 03e67a3d..679d1409 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82-public.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl index ed39fad4..e0d04794 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.stpl @@ -17,7 +17,7 @@ AllowOverride All SSLRequireSSL - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch SSLEngine on SSLVerifyClient none diff --git a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl index 789ee9d3..eba95935 100644 --- a/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl +++ b/src/deb/for-download/tools/apache-fpm-tpl/PHP-FPM-82.tpl @@ -16,7 +16,7 @@ AllowOverride All - Options +Includes -Indexes +ExecCGI + Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch From c2511876c2a73489a5885efd5ff38af97babb662 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Tue, 2 May 2023 12:59:16 +0200 Subject: [PATCH 201/583] --retry-connrefused exception for Debian8 --- bin/v-add-letsencrypt-domain | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/v-add-letsencrypt-domain b/bin/v-add-letsencrypt-domain index 7a306ab3..1f1f5a6e 100755 --- a/bin/v-add-letsencrypt-domain +++ b/bin/v-add-letsencrypt-domain @@ -21,6 +21,8 @@ if [[ "$LE_STAGING" = 'yes' ]]; then API='https://acme-staging-v02.api.letsencrypt.org' fi +deb_release=$(cat /etc/debian_version | tr "." "\n" | head -n1) + # Includes source $VESTA/func/main.sh source $VESTA/func/domain.sh @@ -60,7 +62,11 @@ query_le_v2() { # Save http response to file passed as "$4" arg or print to stdout if not provided # http response headers are always sent to stdout local save_to_file=${4:-"/dev/stdout"} - curl --location --user-agent "myVesta" --insecure --retry 5 --retry-connrefused --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" + if [ "$deb_release" -gt 8 ]; then + curl --location --user-agent "myVesta" --insecure --retry 5 --retry-connrefused --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" + else + curl --location --user-agent "myVesta" --insecure --retry 5 --silent --dump-header /dev/stdout --data "$post_data" "$1" --header "$content" --output "$save_to_file" + fi } From ec8e1741588dc9554d07a0d6b2f3a764d461d9d4 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sat, 27 May 2023 19:03:41 +0200 Subject: [PATCH 202/583] Update README.md, fixing < char --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 44d414b8..71d9f5a9 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@
  • src/deb/for-download/php/php.ini
  • web/inc/secure_login.php
-
  • If you didn't set the secret URL during installation, you can do it anytime. Just execute in shell: echo " /usr/local/vesta/web/inc/login_url.php
  • +
  • If you didn't set the secret URL during installation, you can do it anytime. Just execute in shell: echo "<?php \$login_url='MY-SECRET-URL';" > /usr/local/vesta/web/inc/login_url.php
  • We disabled dangerous PHP functions in php.ini, so even if, for example, your customer's CMS gets compromised, hacker will not be able to execute shell scripts from within PHP.
  • From 2afbc2cddfbbc57f296640cb28d89fb29b2526c2 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 4 Jun 2023 16:41:08 +0200 Subject: [PATCH 203/583] Patching exim4.conf for: smtputf8_advertise_hosts --- install/debian/10/exim/exim4.conf.template | 1 + install/debian/11/exim/exim4.conf.template | 1 + install/debian/9/exim/exim4.conf.template | 1 + src/deb/vesta/postinst | 20 ++++++++++++++++++++ 4 files changed, 23 insertions(+) diff --git a/install/debian/10/exim/exim4.conf.template b/install/debian/10/exim/exim4.conf.template index 0e5afaac..8fa12c2d 100644 --- a/install/debian/10/exim/exim4.conf.template +++ b/install/debian/10/exim/exim4.conf.template @@ -11,6 +11,7 @@ disable_ipv6=true add_environment=<; PATH=/bin:/usr/bin keep_environment= +smtputf8_advertise_hosts = domainlist local_domains = dsearch;/etc/exim4/domains/ domainlist relay_to_domains = dsearch;/etc/exim4/domains/ diff --git a/install/debian/11/exim/exim4.conf.template b/install/debian/11/exim/exim4.conf.template index 72e3f668..cbc2e75f 100644 --- a/install/debian/11/exim/exim4.conf.template +++ b/install/debian/11/exim/exim4.conf.template @@ -11,6 +11,7 @@ disable_ipv6=true add_environment=<; PATH=/bin:/usr/bin keep_environment= +smtputf8_advertise_hosts = domainlist local_domains = dsearch;/etc/exim4/domains/ domainlist relay_to_domains = dsearch;/etc/exim4/domains/ diff --git a/install/debian/9/exim/exim4.conf.template b/install/debian/9/exim/exim4.conf.template index 261947d2..c9344903 100644 --- a/install/debian/9/exim/exim4.conf.template +++ b/install/debian/9/exim/exim4.conf.template @@ -11,6 +11,7 @@ disable_ipv6=true add_environment=<; PATH=/bin:/usr/bin keep_environment= +smtputf8_advertise_hosts = domainlist local_domains = dsearch;/etc/exim4/domains/ domainlist relay_to_domains = dsearch;/etc/exim4/domains/ diff --git a/src/deb/vesta/postinst b/src/deb/vesta/postinst index 975d12cd..97df816e 100755 --- a/src/deb/vesta/postinst +++ b/src/deb/vesta/postinst @@ -25,6 +25,26 @@ fi echo "1" > /usr/local/vesta/data/upgrades/show_changelog chmod a=rw /usr/local/vesta/data/upgrades/show_changelog +# Patching exim4.conf for: smtputf8_advertise_hosts +if [ "$release" -gt 8 ]; then + if [ -f "/etc/exim4/exim4.conf.template" ]; then + if ! grep -q 'smtputf8_advertise_hosts' /etc/exim4/exim4.conf.template; then + echo 'Patching exim4.conf for: smtputf8_advertise_hosts' + sed -i "/^domainlist local_domains = dsearch;\/etc\/exim4\/domains\//i smtputf8_advertise_hosts =" /etc/exim4/exim4.conf.template + systemctl restart exim4 + fi + fi +fi + +# Patching exim4.conf for: Helo name contains a ip address +if [ -f "/etc/exim4/exim4.conf.template" ]; then + if grep -q 'drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid' /etc/exim4/exim4.conf.template; then + echo 'Patching exim4.conf for: Helo name contains a ip address' + patch /etc/exim4/exim4.conf.template < /usr/local/vesta/src/deb/for-download/tools/patches/exim_helo_authenticated.patch + sed -i '/telenor\.rs/d' /etc/exim4/exim4.conf.template + systemctl restart exim4 + fi +fi # Making sure yescrypt is disabled if [ "$release" -eq 11 ]; then From c3d0c17c518153a6bcb725b0d6842706206bb814 Mon Sep 17 00:00:00 2001 From: myvesta <38690722+myvesta@users.noreply.github.com> Date: Sun, 4 Jun 2023 17:56:44 +0200 Subject: [PATCH 204/583] Redesign of hosting panel --- bin/v-list-user-log | 8 +- bin/v-update-sys-rrd-la | 4 +- web/add/user/index.php | 2 +- web/css/styles.fix.css | 1001 ++++++ web/css/styles.fix.css.map | 1 + web/css/styles.min.css | 3491 ++++++++++----------- web/images/myvesta-large-white-130.png | Bin 0 -> 5284 bytes web/images/sprite.png | Bin 57521 -> 35005 bytes web/images/vesta_logo.png | Bin 5902 -> 5438 bytes web/inc/main.php | 5 +- web/js/fix.js | 157 + web/js/init.js | 20 +- web/templates/admin/list_dns_rec.html | 2 +- web/templates/admin/list_server_info.html | 6 +- web/templates/admin/list_user.html | 19 +- web/templates/admin/list_weblog.html | 6 +- web/templates/admin/panel.html | 25 +- web/templates/footer.html | 3 - web/templates/header.html | 15 +- web/templates/login.html | 2 +- web/templates/reset_1.html | 6 +- web/templates/reset_2.html | 6 +- web/templates/reset_3.html | 6 +- web/templates/scripts.html | 161 + web/templates/user/list_dns_rec.html | 2 +- web/templates/user/list_user.html | 2 +- web/templates/user/panel.html | 23 +- 27 files changed, 3143 insertions(+), 1830 deletions(-) create mode 100644 web/css/styles.fix.css create mode 100644 web/css/styles.fix.css.map create mode 100644 web/images/myvesta-large-white-130.png create mode 100644 web/js/fix.js diff --git a/bin/v-list-user-log b/bin/v-list-user-log index ca317f7d..6be9f9ae 100755 --- a/bin/v-list-user-log +++ b/bin/v-list-user-log @@ -12,6 +12,7 @@ # Argument definition user=$1 format=${2-shell} +limit=${3-300} # Includes source $VESTA/func/main.sh @@ -34,6 +35,9 @@ json_list() { "TIME": "'$TIME'", "DATE": "'$DATE'" }' + if [ "$limit" -gt 0 ] && [ "$i" = "$limit" ]; then + break; + fi if [ "$i" -lt "$objects" ]; then echo ',' else @@ -83,7 +87,7 @@ csv_list() { # Verifications # #----------------------------------------------------------# -check_args '1' "$#" 'USER [FORMAT]' +check_args '1' "$#" 'USER [FORMAT] [LIMIT]' is_format_valid 'user' is_object_valid 'user' 'USER' "$user" @@ -93,7 +97,7 @@ is_object_valid 'user' 'USER' "$user" #----------------------------------------------------------# # Parsing history log -logs=$(tail -n 300 $USER_DATA/history.log 2>/dev/null) +logs=$(tail -n $limit $USER_DATA/history.log | tac) case $format in json) json_list ;; diff --git a/bin/v-update-sys-rrd-la b/bin/v-update-sys-rrd-la index c8266626..860bdec6 100755 --- a/bin/v-update-sys-rrd-la +++ b/bin/v-update-sys-rrd-la @@ -74,7 +74,7 @@ rrdtool graph $RRD/la/$period-la.png \ -c "SHADEA#ffffff" \ -c "SHADEB#ffffff" \ -c "FONT#555555" \ - -c "CANVAS#302c2d" \ + -c "CANVAS#F2F2F2" \ -c "GRID#666666" \ -c "MGRID#AAAAAA" \ -c "FRAME#777777" \ @@ -82,7 +82,7 @@ rrdtool graph $RRD/la/$period-la.png \ DEF:la=$RRD/la/la.rrd:LA:AVERAGE \ DEF:pr=$RRD/la/la.rrd:PR:AVERAGE \ COMMENT:'\r' \ - AREA:la#C8EA2E:"LA * 100"\ + AREA:la#00CD2E:"LA * 100"\ GPRINT:la:'LAST: Current\:''%8.0lf' \ GPRINT:la:'MIN: Min\:''%8.0lf' \ GPRINT:la:'MAX: Max\:''%8.0lf\j' \ diff --git a/web/add/user/index.php b/web/add/user/index.php index 1ed521e3..04043484 100644 --- a/web/add/user/index.php +++ b/web/add/user/index.php @@ -100,7 +100,7 @@ if (!empty($_POST['ok'])) { // Flush field values on success if (empty($_SESSION['error_msg'])) { $_SESSION['ok_msg'] = __('USER_CREATED_OK',htmlentities($_POST['v_username']),htmlentities($_POST['v_username'])); - $_SESSION['ok_msg'] .= " / " . __('login as') ." ".htmlentities($_POST['v_username']). ""; + $_SESSION['ok_msg'] .= " / " . __('login as') ." ".htmlentities($_POST['v_username']). ""; unset($v_username); unset($v_password); unset($v_email); diff --git a/web/css/styles.fix.css b/web/css/styles.fix.css new file mode 100644 index 00000000..5fbdb6ec --- /dev/null +++ b/web/css/styles.fix.css @@ -0,0 +1,1001 @@ +body { + background: #f0f3f5; + color: #58666f; + font-family: 'Source Sans Pro', sans-serif; +} +b, strong { + color: #58666f; +} +.l-percent { + border-bottom: none; + margin-top: 1px; + width: 200px; + background: #e4eaed; +} +.l-percent__fill { + background-color: #2ac34e; + bottom: 0; +} +.to-top { + z-index: 100; + top: unset; + bottom: 30px; + right: 85px; +} +.to-shortcuts { + z-index: 100; + top: unset; + bottom: 30px; + right: 130px; +} +.shortcuts { + right: calc(50% - 400px); + bottom: calc(50% - 213px); +} +.l-separator { + display: none; +} +.l-header { + position: fixed; + width: calc(100% - 40px); + z-index: 99; + background: #fff; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); + color: #58666f; + height: 50px; + padding: 0 20px; + margin-bottom: unset; +} +.l-header a { + color: #58666f; + font-size: 14px; +} +.l-header a:hover { + color: #58666f; +} +.l-header .l-center { + max-width: none !important; +} +.l-header .l-center .l-logo { + background-position: -65px -182px; + /* background-position: -125px -478px; */ + background-repeat: no-repeat; + display: block; + height: 40px; + margin-top: 0; + width: 80px; + /* width: 42px; */ + margin-left: 0; + background-size: 235px 325px; + position: relative; + top: 5px; + left: 0; + float: left; + padding-right: 20px; +} +.l-header .l-center .l-menu { + position: unset; + margin-left: unset; +} +.l-header .l-center .l-menu .l-menu__item a { + line-height: 50px; + padding: 0 18px; + display: inline-block; +} +.l-header .l-center .l-menu .l-menu__item a:hover { + background-color: rgba(0, 0, 0, 0.05); +} +.l-header .l-center .l-menu .l-menu__item a:active { + background-color: rgba(0, 0, 0, 0.05); +} +.l-header .l-center .l-menu .l-menu__item.l-menu__item--active a { + color: unset; + font-size: unset; + font-weight: unset; + text-transform: unset; + background-color: rgba(0, 0, 0, 0.05); +} +.l-header .l-center .l-profile .l-profile__notifications { + margin-top: 13px; +} +.l-header .l-center .l-profile .l-profile__notifications:hover { + background-color: rgba(0, 0, 0, 0.05); +} +.l-header .l-center .l-profile .l-profile__username { + padding: 15px 0 0 10px; +} +.l-header .l-center .l-profile .l-profile__logout { + padding: 15px 0 0 10px; +} +.l-header > .l-center { + margin-left: 200px; +} +.l-content { + position: relative; + top: 50px; +} +.l-content + div { + right: 100px !important; + top: unset !important; + bottom: 40px !important; +} +.l-content + div div { + background-color: #e4eaed !important; + padding: 10px; + border-radius: 5px; +} +.l-content .l-center { + max-width: none !important; +} +.l-content .l-center .l-stat { + display: block; + position: fixed; + z-index: 100; + padding-top: 0 !important; + width: 200px; + height: 100%; + top: 0; + margin-top: 0; + background: #1c2b35; + overflow-y: scroll; + scrollbar-width: thin; + /* Firefox */ + -ms-overflow-style: scrollbar; + /* Internet Explorer 10+ */ + /* width */ +} +.l-content .l-center .l-stat::-webkit-scrollbar { + display: block; + width: 7px; + /* Track */ +} +.l-content .l-center .l-stat::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0); + /* Handle */ +} +.l-content .l-center .l-stat::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.15); +} +.l-content .l-center .l-stat:hover { + /* Handle on hover */ +} +.l-content .l-center .l-stat:hover::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.4); +} +.l-content .l-center .l-stat .l-stat__col--active ul { + display: block !important; +} +.l-content .l-center .l-stat .l-stat__col--active { + background: #131e27; +} +.l-content .l-center .l-stat .l-stat__col--active a { + border-bottom: 2px solid #131e27; +} +.l-content .l-center .l-stat .l-stat__col--active a .l-stat__col-title { + background: #16232d; + color: white !important; + font-size: 20px; + font-weight: 400; + margin-top: unset; + letter-spacing: unset; + margin-right: unset; +} +.l-content .l-center .l-stat .l-stat__col--active span { + display: none; +} +.l-content .l-center .l-stat .focus { + background: #5e5e5e; +} +.l-content .l-center .l-stat .focus a { + border-bottom: 2px solid #131e27; +} +.l-content .l-center .l-stat .focus a ul li { + color: #c2e5ff !important; +} +.l-content .l-center .l-stat .focus a .l-stat__col-title { + background: #5e5e5e; + color: #c4d0d8; + font-size: 20px; + font-weight: 400; + margin-top: unset; + letter-spacing: unset; + margin-right: unset; +} +.l-content .l-center .l-stat .l-stat__col { + display: block; + float: unset; +} +.l-content .l-center .l-stat .l-stat__col:hover .l-stat__col-title { + color: #fff; +} +.l-content .l-center .l-stat .l-stat__col:hover .l-stat__col-title:after { + color: #fff; +} +.l-content .l-center .l-stat .l-stat__col a { + height: unset !important; + min-height: unset !important; + display: block; + width: unset; + border-bottom: 2px solid #131e27; + background-color: transparent; + padding-left: unset; + padding-bottom: 10px; + padding-top: unset; + margin-top: unset; +} +.l-content .l-center .l-stat .l-stat__col a .l-stat__col-title { + min-height: unset !important; + color: #869fb2; + font-size: 20px; + font-weight: 400; + padding: 15px 15px 15px 20px; + margin-bottom: 0; + margin-top: 0 !important; +} +.l-content .l-center .l-stat .l-stat__col a .l-stat__col-title:after { + font-family: 'Font Awesome 5 Free'; + font-weight: bold; + content: "\f054"; + float: right; + font-size: 10px; + color: #5c798f; + margin-top: 8px; + margin-right: 26px; +} +.l-content .l-center .l-stat .l-stat__col a .l-stat__col-title:before { + font-family: 'Font Awesome 5 Free'; + font-weight: bold; + content: "\f233"; + padding-right: 10px; + font-size: 17px; +} + +.l-content .l-center .l-stat .l-stat__col--active a .l-stat__col-title:after { + margin-right: 26px; +} + +.l-content .l-center .l-stat .l-stat__col a ul { + margin: 0; + display: none; +} +.l-content .l-center .l-stat .l-stat__col a ul li { + color: #92adc2; + margin-bottom: unset; + padding: 10px 20px 10px 20px; + font-size: 14px; +} +.l-content .l-center .l-stat .l-stat__col a ul li span { + float: right; + padding: 3px 5px 4px 5px; + font-size: 13px; + color: #fff; + background-color: #27c54e; + font-weight: 700; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); + display: inline-block; + min-width: 10px; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 0.25em; + left: 140px; +} +.l-content .l-center .l-stat .l-stat__col a ul li:first-child span { + float: right; + padding: 3px 5px 4px 5px; + font-size: 13px; + color: #fff; + background-color: #34b5dd; + font-weight: 700; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); + display: inline-block; + min-width: 10px; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: 10px; +} +.l-content .l-center .l-stat .l-stat__col a ul li:before { + font-family: 'Font Awesome 5 Free'; + font-weight: bold; + content: "\f03a"; + padding-right: 15px; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(1) a .l-stat__col-title:before { + content: "\f500"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(1) a ul li:nth-of-type(1):before { + content: "\f0a0"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(1) a ul li:nth-of-type(2):before { + content: "\f75b"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(1) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(2) a .l-stat__col-title:before { + content: "\f233"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(2) a ul li:nth-of-type(1):before { + content: "\f0ac"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(2) a ul li:nth-of-type(2):before { + content: "\f0c5"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(2) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(3) a .l-stat__col-title:before { + content: "\f6ff"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(3) a ul li:nth-of-type(1):before { + content: "\f0ac"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(3) a ul li:nth-of-type(2):before { + content: "\f303"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(3) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(4) a .l-stat__col-title:before { + content: "\f674"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(4) a ul li:nth-of-type(1):before { + content: "\f0ac"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(4) a ul li:nth-of-type(2):before { + content: "\f2bb"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(4) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(5) a .l-stat__col-title:before { + content: "\f1c0"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(5) a ul li:nth-of-type(1):before { + content: "\f1c0"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(5) a ul li:nth-of-type(2):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(5) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(6) a .l-stat__col-title:before { + content: "\f120"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(6) a ul li:nth-of-type(1):before { + content: "\f120"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(6) a ul li:nth-of-type(2):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(6) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(7) a .l-stat__col-title:before { + content: "\f019"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(7) a ul li:nth-of-type(1):before { + content: "\f019"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(7) a ul li:nth-of-type(2):before { + content: "\f05e"; +} +.l-content .l-center .l-stat .l-stat__col:nth-of-type(7) a ul li:nth-of-type(3):before { + content: "\f05e"; +} +.l-content .l-center .l-sort { + padding: 0 20px; + position: relative; + z-index: 98; + width: auto; + margin-top: unset !important; + background-color: #f6f8f8; + border-bottom: 1px solid #dee5e8; + margin-bottom: 30px; +} +.l-content .l-center .l-sort .l-sort__create-btn { + bottom: -20px; +} +.l-content .l-center .l-sort .context-menu { + top: 77px; +} +.l-content .l-center .l-sort .l-sort-toolbar { + padding: 24px 0 22px 0; + color: #98a6ac; +} +.l-content .l-center .l-sort .l-sort-toolbar .l-select { + border-radius: 3px 0 0 3px; + background: #fff; + border: 1px solid #dee5e8; +} +.l-content .l-center .l-sort .l-sort-toolbar .l-sort-toolbar__filter-apply { + border-radius: 0 3px 3px 0; +} +.l-content .l-center .l-sort .l-sort-toolbar table tbody tr .l-sort-toolbar__search-box form .search-input { + border-radius: 3px 0 0 3px; + border: 1px solid #dee5e8; +} +.l-content .l-center .l-sort .l-sort-toolbar table tbody tr .l-sort-toolbar__search-box form .l-sort-toolbar__search { + border-radius: 0 3px 3px 0; +} +.l-content .l-center .l-sort .l-sort-toolbar table tbody tr .sort-by { + padding-left: 30px; +} +.l-content .l-center .l-unit { + padding: 0 0 0 15px; + overflow: hidden; + margin: 0px 20px 20px 20px; + background: #fff; + border-radius: 3px; + border-bottom: none !important; + border-left: none !important; + color: #98a6ac; + font-size: 14px; +} +.l-content .l-center .l-unit.selected { + background-color: #e4eaed; +} +.l-content .l-center .l-unit--suspended { + background-color: #eaeaea !important; +} +.l-content .l-center .l-unit.selected .l-percent { + border-bottom: none; + margin-top: 1px; + width: 200px; + background: #cbd3d7; +} +.l-content .l-center .l-unit .l-unit-toolbar .l-unit-toolbar__col.l-unit-toolbar__col--right { + position: relative; + top: 20px; + right: 20px; + display: block; +} +.l-content .l-center .l-unit .l-unit-toolbar .l-unit-toolbar__col.l-unit-toolbar__col--right .actions-panel__col { + margin-left: 10px; + border-radius: 3px; + overflow: hidden; + border-right: none; + background-color: #dde6e8; +} +.l-content .l-center .l-unit .l-unit-toolbar .l-unit-toolbar__col.l-unit-toolbar__col--right .actions-panel__col a { + font-weight: 500; +} +.l-content .l-center .l-unit .l-unit-toolbar .l-unit-toolbar__col .check-label:before { + z-index: 97; +} +.l-content .l-center .l-unit .l-unit__col .l-unit__name { + color: #34b5dd; + font-weight: 500; + font-size: 24px; + margin-bottom: unset; +} +.l-content .l-center .l-unit .l-unit__col .l-unit__ip { + font-size: 18px; +} +.l-content .l-center .l-unit .l-unit__col .l-unit__date { + letter-spacing: unset; + display: inline-block; + border-bottom: solid 10px #ffeb0087; + line-height: 3px; + padding: 0 0px; + margin-bottom: 30px; + font-weight: 400; + font-size: 16px; +} +.l-content .l-center .l-unit .l-unit__col .l-unit__stats td { + height: 27px; +} +.l-content .l-center .io-box { + overflow: hidden; + margin: 20px 20px 0px 20px; + color: #98a6ac; +} +.l-content .l-center .io-box .io-box-left { + float: left; + width: calc(100% - 800px); + min-width: 410px; + text-align: center; +} +.l-content .l-center .io-box .io-box-left .io-box-left-items { + float: left; + width: calc(50% - 20px); + height: 137px; + margin-right: 20px; + margin-bottom: 20px; + background: #fff; + border-radius: 3px; +} +.l-content .l-center .io-box .io-box-left .io-box-left-items a { + display: block; + font-size: 36px; + font-weight: 300; + margin-top: 32px; +} +.l-content .l-center .io-box .io-box-left .io-1-homepage-block { + color: #98a6ac; +} +.l-content .l-center .io-box .io-box-left .io-1-homepage-block a { + color: #34b5dd; +} +.l-content .l-center .io-box .io-box-left .io-2-homepage-block { + color: #b4efc2; + background-color: #27c54e; +} +.l-content .l-center .io-box .io-box-left .io-2-homepage-block a { + color: #ecfff1; +} +.l-content .l-center .io-box .io-box-left .io-3-homepage-block { + color: #b0e1f1; + background-color: #34b5dd; +} +.l-content .l-center .io-box .io-box-left .io-3-homepage-block a { + color: #dcf2f8; +} +.l-content .l-center .io-box .io-box-left .io-4-homepage-block { + color: #98a6ac; +} +.l-content .l-center .io-box .io-box-left .io-4-homepage-block a { + color: #58666f; +} +.l-content .l-center .io-box .io-box-left .io-5-homepage-block { + width: calc(100% - 20px); + color: #98a6ac; + background: #e4eaed; +} +.l-content .l-center .io-box .io-box-left .io-5-homepage-block a { + color: #27c54e; +} +.l-content .l-center .io-box .io-box-left .io-5-homepage-block:before { + font-family: 'Font Awesome 5 Free'; + font-weight: bold; + font-size: 32px; + background: #dde6e8; + height: 121px; + width: 115px; + line-height: 90px; + content: "\f581"; + color: #fff; + float: left; + border-radius: 5px 0 0 5px; + padding-top: 16px; +} +.l-content .l-center .io-box .io-box-right { + float: right; + width: 800px; + background: #fff; + height: 450px; + overflow: hidden; + border-radius: 3px; + text-align: center; +} +.l-content .l-center .io-box .io-box-right img { + margin-top: 8px; + width: 767px; + height: 433px; + position: relative; +} +.l-content .l-center .l-unit-ft { + padding: 0 0 37px 15px; + overflow: hidden; + margin: 0px 20px 19px 20px; + background: #e4eaed; + border-radius: 3px; + border-bottom: none !important; + border-left: none !important; + position: relative; + color: #a6b0b4; + font-weight: bold; + text-transform: uppercase; + font-size: 11px; +} +.l-content .l-center .l-unit-ft:before { + font-family: "Font Awesome 5 Free"; + font-weight: bold; + font-size: 32px; + background: #dde6e8; + height: 100%; + width: 90px; + line-height: 108px; + content: "\f05a"; + color: #fff; + float: left; + border-radius: 5px 0 0 5px; + position: absolute; + left: 0; + text-align: center; +} +.l-content .l-center .l-unit-ft .data { + margin: 0 0 50px 0; +} +.l-content .l-center #vstobjects { + padding: 0 0 0 15px; + overflow: hidden; + margin: 0px 20px 20px 20px; + background: #fff; + border-radius: 3px; + border-bottom: none !important; + border-left: none !important; + color: #98a6ac; + font-size: 14px; +} +.l-content .l-center #vstobjects .data-date { + color: #98A6AC; + letter-spacing: unset; + display: inline-block; + border-bottom: solid 10px #ffeb0087; + line-height: 3px; + padding: 0 0px; + margin-bottom: 30px; + font-weight: 400; + font-size: 16px; +} +.l-content .l-center .vst-text.step-top.helper-container { + margin-bottom: unset; + margin-top: 0; + float: unset; + height: auto; + width: auto; +} +.l-content .l-center .vst-text.step-top.helper-container #tabs.cron-helper-tabs { + padding: 0 0 0 15px; + overflow: hidden; + margin: 0 20px 20px 20px; + background: #fff; + border-radius: 3px; + border-bottom: none !important; + border-left: none !important; + color: #98a6ac; + font-size: 14px; + border: none !important; +} +.l-content > .units.l-center::before { + content: ''; + display: block; + height: 0; +} +.l-content > .l-center { + margin-left: 200px; + margin-right: 40px; +} +.l-content > .l-center:first-child { + margin-left: 0; +} +.l-content #vstobjects > .l-center { + margin-left: 200px; + margin-right: 40px; + padding-top: 0; + padding-bottom: 1px; +} +.l-content .io-log { + color: #58666f; + border-left: 1px solid #dee5e8; + width: 240px; + position: fixed; + display: block; + /*overflow-scrolling: auto;*/ + z-index: 98; + top: 50px; + right: -200px; + background: #fff; + word-break: break-word; + overflow: hidden; + border-right: 10px solid #e3e3e3; + box-sizing: border-box; + /* Firefox */ + /* width */ +} +.l-content .io-log::-webkit-scrollbar { + width: 7px; + /* Track */ +} +.l-content .io-log::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0); + /* Handle */ +} +.l-content .io-log::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.15); + border-radius: 7px; + /* Handle on hover */ +} +.l-content .io-log::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.4); + border-radius: 7px; +} +.l-content .io-log > * { + margin: 0 20px; +} +.l-content .io-log h2 { + margin: 0 0 20px 0; + padding-left: 20px; + font-size: 24px; + font-weight: 300; + line-height: 60px; + color: #98a6ac; + border-bottom: 1px solid #dee5e8; + cursor: pointer; +} +.l-content .io-log h2:before { + font-family: "Font Awesome 5 Free"; + font-weight: bold; + content: "\f15c"; + padding-right: 10px; + font-size: 17px; +} +.l-content .io-log > div { + /* border-left: solid 1px #dee5e8; */ + padding-left: 15px; + position: relative; + margin-left: 25px; +} +.l-content .io-log > div > div { + position: relative; + margin-bottom: 25px; +} +.l-content .io-log > div > div > div:nth-of-type(2) { + color: #98a6ac; + font-size: 13px; + margin-bottom: 5px; +} +.l-content .io-log > div > div > div:nth-of-type(3) { + color: #98a6ac; + font-size: 13px; + margin-bottom: 5px; +} +.l-content .io-log > div > div:before { + content: ''; + position: absolute; + height: 100%; + width: 7px; + border-radius: 10px; + border: solid 1px #dee5e8; + background: #e0fff9; + left: -20px; +} +.l-content .io-log > div > div:first-child(1n):before { + background: #e0fff9; +} +.l-content .io-log > div > div:nth-child(2n):before { + background: #fbffe0; +} +.l-content .io-log > div > div:nth-child(3n):before { + background: #fbffe0; +} +.l-content .io-log > div > div:nth-child(4n):before { + background: #fbffe0; +} +.l-content .io-log > div > div:nth-child(5n):before { + background: #fbffe0; +} + + +.l-content .io-log2 { + color: #58666f; + border-left: 1px solid #dee5e8; + border-top: 1px solid #cecece; + width: 240px; + position: fixed; + height: 100%; + display: block; + /*overflow-scrolling: auto;*/ + z-index: 98; + top: 380px; + right: -200px; + background: #fff; + word-break: break-word; + overflow-y: scroll; + scrollbar-width: thin; + box-sizing: border-box; + /* Firefox */ + /* width */ +} +.l-content .io-log2::-webkit-scrollbar { + width: 7px; + /* Track */ +} +.l-content .io-log2::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0); + /* Handle */ +} +.l-content .io-log2::-webkit-scrollbar-thumb { + background: rgba(0, 0, 0, 0.15); + border-radius: 7px; + /* Handle on hover */ +} +.l-content .io-log2::-webkit-scrollbar-thumb:hover { + background: rgba(0, 0, 0, 0.4); + border-radius: 7px; +} +.l-content .io-log2 > * { + margin: 0 20px; +} +.l-content .io-log2 h2 { + margin: 0 0 20px 0; + padding-left: 20px; + font-size: 24px; + font-weight: 300; + line-height: 60px; + color: #98a6ac; + border-bottom: 1px solid #dee5e8; + cursor: pointer; +} +.l-content .io-log2 h2:before { + font-family: "Font Awesome 5 Free"; + font-weight: bold; + content: "\f15c"; + padding-right: 10px; + font-size: 17px; +} +.l-content .io-log2 > div { + border-left: solid 1px #dee5e8; + padding-left: 15px; + position: relative; + margin-left: 25px; +} +.l-content .io-log2 > div > div { + position: relative; + margin-bottom: 25px; +} +.l-content .io-log2 > div > div > div:nth-of-type(2) { + color: #98a6ac; + font-size: 12px; + margin-bottom: 5px; +} +.l-content .io-log2 > div > div:before { + content: ''; + position: absolute; + height: 100%; + width: 7px; + border-radius: 10px; + border: solid 1px #dee5e8; + background: #fff; + left: -20px; +} +.l-content .io-log2 > div > div:nth-child(2n):before { + border: solid 1px #27c54e; +} +.l-content .io-log2 > div > div:nth-child(3n):before { + border: solid 1px #27bbc5; +} +.l-content .io-log2 > div > div:nth-child(4n):before { + border: solid 1px #275bc5; +} +.l-content .io-log2 > div > div:nth-child(5n):before { + border: solid 1px #ffcc00; +} + + +#tooltip { + background-color: #34b5dd; +} +.l-sort__create-btn.edit:hover #tooltip { + background-color: #49c8ef; +} +.l-sort__create-btn.edit:active #tooltip { + background-color: #00d8ff !important; +} +.l-sort__create-btn:active #tooltip { + background-color: #00d8ff; +} +.body-login, .body-reset { + background-color: #f0f3f5; +} +.body-login .login, .body-reset .login { + font-family: Arial, Helvetica, sans-serif; + border: 1px solid #e7ecee; + border-radius: 10px; + overflow: hidden; + position: relative; + padding: 35px 35px 10px 35px; + display: block; + width: 420px; + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); +} +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1), .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1) { + position: absolute; + text-align: center; + width: calc(100% - 46px); +} +/* +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1) a, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1) a { + background-image: url(/images/sprite.png?1446554103); + background-position: -65px -182px; + background-repeat: no-repeat; + display: inline-block; + height: 40px; + margin-top: 0; + width: 80px; + margin-left: 0; + background-size: 235px 325px; + position: relative; +} +*/ +/* +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1) a img, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(1) a img { + display: none; +} +*/ +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2), .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) { + position: relative; + padding: 65px 0 0 0 !important; +} +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .vst-input, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .vst-input { + padding: 5px 10px; + margin: 0; + width: 320px !important; + margin-top: 7px; + border-radius: 3px; + border: solid 1px #d3d9e2; +} +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .button, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .button, .body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .button:hover, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .button:hover, .body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .button:active, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(1) > td:nth-of-type(2) .button:active { + width: 100% !important; + border: 1px solid #27c54e; + background-color: #27c54e; + color: #f4f3f9; + margin-bottom: 20px; +} +.body-login .login > tbody > tr > td > table > tbody > tr:nth-of-type(2) .login-bottom, .body-reset .login > tbody > tr > td > table > tbody > tr:nth-of-type(2) .login-bottom { + width: auto; + text-align: center; + padding-bottom: unset; + padding: 0; +} +.body-login .login-box .vst-advanced, .body-reset .login-box .vst-advanced { + color: #34b5dd; +} +.body-web-log .l-header > .l-center { + margin-left: 0; +} +.l-stat__col span { + padding: 4px 0; + font-size: 15px; + position: fixed; + display: inline-block; + left: 159px; +} +.l-sort__create-btn2 { + background-image: url("/images/sprite.png?1446554103"); + background-position: -331px -107px; + background-repeat: no-repeat; + display: inline-block; + height: 45px; + width: 45px; +} +/* +.ui-resizable-handle { + background-color: #333 !important; +} +*/ +/* +div.ui-dialog div { + background-color: #333 !important; +} +*/ +div.ui-dialog > div { + background-color: #333 !important; +} +div.ui-dialog > div div { + background-color: #333 !important; +} +/* +div.ui-dialog > div > div { + background-color: #333 !important; +} +div.ui-dialog + div { + background-color: #333 !important; +} +div.ui-dialog + div div{ + background-color: #333 !important; +} +*/ +/* +.ui-dialog-titlebar { + background-color: #333 !important; +} +.ui-dialog-buttonpane { + background-color: #333 !important; +} +*/ diff --git a/web/css/styles.fix.css.map b/web/css/styles.fix.css.map new file mode 100644 index 00000000..c6718a78 --- /dev/null +++ b/web/css/styles.fix.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["styles.fix.scss"],"names":[],"mappings":";AAAA;EACI;EACA;EACA;;;AAMJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;AAOJ;EACI;EACA;EACA;EACA;;AAOJ;EACI;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AAEA;EACI;EACA;;AAEA;EACI;;AAMR;EACI;;AAEA;EACI;AACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAII;EACI;EACA;EACA;;AAEA;EACI;;AAEJ;EACI;;AAMJ;EACI;EACA;EACA;EACA;EACA;;AAQZ;EACI;;AAEA;EACI;;AAIR;EACI;;AAGJ;EACI;;AAKZ;EACI;;;AAQR;EACI;EACA;;AAEA;EACI;;AAEA;EACI;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAyCA;EAEA;AAAwB;EACxB;AAAgC;AAEhC;AAMA;AAKA;;AAVA;EACI;EACA;;AAIJ;EACI;;AAIJ;EACI;;AAIJ;AACI;;AACA;EACI;;AAKR;EAEI;EAKA;EACA;EACA;EACA;EACA;EAGA;EACA;;AAIJ;EACI;;AAEA;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAQZ;EACI;EACA;;AAII;EACI;;AAEA;EACI;;AAMZ;EACI;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAEA;EAEI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EAEA;EACA;EACA;EAEA;;AA8BA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EAEA;EACA;EACA;EAEA;;AAIR;EACI;EACA;EACA;EACA;;AASR;EACI;;AAKA;EACI;;AAEJ;EAEI;;AAEJ;EACI;;AAQR;EACI;;AAKA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAQR;EACI;;AAKA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAQR;EACI;;AAKA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAQR;EACI;;AAKA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAQR;EACI;;AAKA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAQR;EACI;;AAKA;EACI;;AAEJ;EACI;;AAEJ;EACI;;AAWxB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAcJ;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;;AAiBgB;EACI;EACA;;AAGJ;EACI;;AAqCZ;EACI;;AAmBxB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEI;;AAOI;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAUR;EACI;;AAQZ;EACI;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOJ;EACI;;AAYZ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAQR;EACI;;AAEA;EACI;;AAGR;EACI;EAEA;;AAEA;EACI;;AAGR;EACI;EACA;;AAEA;EACI;;AAGR;EACI;;AAEA;EACI;;AAGR;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAII;EACA;EACA;;AAKZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKZ;EACI;EACA;EACA;;AAEJ;EACI;EACA;;AAEA;EACI;;AAUJ;EACI;EACA;EACA;EACA;;AA0BR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;EACA;EACA;EAQA;EAEA;AAAwB;AAExB;AAKA;AAKA;AAMA;;AAfA;EACI;;AAIJ;EACI;;AAIJ;EACI;EACA;;AAIJ;EACI;EACA;;AAGJ;EACI;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAKR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIA;EACI;;AAKJ;EACI;;AAKJ;EACI;;AAKJ;EACI;;;AA8CxB;EACI;;;AAGJ;EACI;;;AAEJ;EACI;;;AAGJ;EACI;;;AAIJ;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAQwB;EACI;EACA;EACA;;AAEA;EACI;EACA;AACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA;EACA;EACA;;AAEA;EACI;;AAIZ;EACI;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;;AAKR;EACI;EACA;EACA;EACA;;AAUhC;EACI;;;AAMJ;EACI","file":"styles.fix.css"} \ No newline at end of file diff --git a/web/css/styles.min.css b/web/css/styles.min.css index edc706d5..5f63b030 100644 --- a/web/css/styles.min.css +++ b/web/css/styles.min.css @@ -149,20 +149,20 @@ * `em` units. */ html { - font-family: sans-serif; - /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; - /* 2 */ + font-family: sans-serif; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ } /** * Remove default margin. */ body { - margin: 0; - background-color: #fff; + margin: 0; + background-color: #fff; } /* HTML5 display definitions @@ -173,34 +173,19 @@ body { * and Firefox. * Correct `block` display not defined for `main` in IE 11. */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; +article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { + display: block; } /** * 1. Correct `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ -audio, -canvas, -progress, -video { - display: inline-block; - /* 1 */ - vertical-align: baseline; - /* 2 */ +audio, canvas, progress, video { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ } /** @@ -208,61 +193,55 @@ video { * Remove excess height in iOS 5 devices. */ audio:not([controls]) { - display: none; - height: 0; + display: none; + height: 0; } /** * Address `[hidden]` styling not present in IE 8/9/10. * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ -[hidden], -template { - display: none; +[hidden], template, .hidden { + display: none; } -.hidden { - display: none; -} /* Links ========================================================================== */ /** * Remove the gray background color from active links in IE 10. */ a { - background-color: transparent; + background-color: transparent; +} +a:active, a:hover { + outline: 0; } /** * Improve readability when focused and also mouse hovered in all browsers. */ -a:active, a:hover { - outline: 0; -} - /* Text-level semantics ========================================================================== */ /** * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { - border-bottom: 1px dotted; + border-bottom: 1px dotted; } /** * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ -b, -strong { - font-weight: bold; - color: #5f5f5f; +b, strong { + font-weight: bold; + color: #5f5f5f; } /** * Address styling not present in Safari and Chrome. */ dfn { - font-style: italic; + font-style: italic; } /** @@ -270,42 +249,45 @@ dfn { * contexts in Firefox 4+, Safari, and Chrome. */ h1 { - font-size: 2em; - margin: 0.67em 0; + font-size: 2em; + margin: 0.67em 0; } /** * Addresses styling not present in IE 8/9. */ mark { - background: #ff0; - color: #000; + background: #ff0; + color: #000; } /** * Address inconsistent and variable font size in all browsers. */ small { - font-size: 80%; + font-size: 80%; } /** * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; +sub { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; } sup { - top: -0.5em; + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + top: -0.5em; } sub { - bottom: -0.25em; + bottom: -0.25em; } /* Embedded content @@ -315,14 +297,14 @@ sub { * 2. Improves image quality when scaled in IE 7. */ img { - border: 0; + border: 0; } /** * Correct overflow not hidden in IE 9/10/11. */ svg:not(:root) { - overflow: hidden; + overflow: hidden; } /* Grouping content @@ -331,34 +313,31 @@ svg:not(:root) { * Address margin not present in IE 8/9 and Safari. */ figure { - margin: 1em 40px; + margin: 1em 40px; } /** * Address differences between Firefox and other browsers. */ hr { - box-sizing: content-box; - height: 0; + box-sizing: content-box; + height: 0; } /** * Contain overflow in all browsers. */ pre { - overflow: auto; + overflow: auto; } /** * Address odd `em`-unit font size rendering in all browsers. * Correct font family set oddly in IE 6, Safari 4/5, and Chrome. */ -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; +code, kbd, pre, samp { + font-family: monospace, monospace; + font-size: 1em; } /* Forms @@ -374,24 +353,23 @@ samp { * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. * 4. Improves appearance and consistency in all browsers. */ -button, -input, -optgroup, -select, -textarea { - color: inherit; - /* 1 */ - font: inherit; - /* 2 */ - margin: 0; - /* 3 */ +button, input, optgroup, select, textarea { + color: inherit; + /* 1 */ + font: inherit; + /* 2 */ + margin: 0; + /* 3 */ } /** * Address `overflow` set to `hidden` in IE 8/9/10/11. */ button { - overflow: visible; + overflow: visible; + text-transform: none; + /*color: transparent !important;*/ + text-shadow: 0 0 0 #555 !important; } /** @@ -400,11 +378,10 @@ button { * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. * Correct `select` style inheritance in Firefox. */ -button, select { - text-transform: none; - /*color: transparent !important;*/ - text-shadow: 0 0 0 #555 !important; + text-transform: none; + /*color: transparent !important;*/ + text-shadow: 0 0 0 #555 !important; } /** @@ -416,93 +393,92 @@ select { * 4. Removes inner spacing in IE 7 without affecting normal text inputs. * Known issue: inner spacing remains in IE 6. */ -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; - /* 2 */ - cursor: pointer; - /* 3 */ +button, html input[type=button] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ +} + +input[type=reset], input[type=submit] { + -webkit-appearance: button; + /* 2 */ + cursor: pointer; + /* 3 */ } /** * Re-set default cursor for disabled elements. */ -button[disabled], -html input[disabled] { - cursor: default; +button[disabled], html input[disabled] { + cursor: default; } /** * Remove inner padding and border in Firefox 4+. */ -button::-moz-focus-inner, +button::-moz-focus-inner { + border: 0; + padding: 0; +} + +input { + line-height: normal; +} input::-moz-focus-inner { - border: 0; - padding: 0; + border: 0; + padding: 0; +} +input[type=checkbox], input[type=radio] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} +input[type=number]::-webkit-inner-spin-button, input[type=number]::-webkit-outer-spin-button { + height: auto; +} +input[type=search] { + -webkit-appearance: textfield; + /* 1 */ + /* 2 */ + box-sizing: content-box; +} +input[type=search]::-webkit-search-cancel-button, input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; } /** * Address Firefox 4+ setting `line-height` on `input` using `!important` in * the UA stylesheet. */ -input { - line-height: normal; -} - /** * 1. Address box sizing set to `content-box` in IE 8/9/10. * 2. Remove excess padding in IE 8/9/10. * Known issue: excess padding remains in IE 6. */ -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; - /* 1 */ - padding: 0; - /* 2 */ -} - /** * Fix the cursor style for Chrome's increment/decrement buttons. For certain * `font-size` values of the `input`, it causes the cursor style of the * decrement button to change from `default` to `text`. */ -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - /** * 1. Address `appearance` set to `searchfield` in Safari and Chrome. * 2. Address `box-sizing` set to `border-box` in Safari and Chrome * (include `-moz` to future-proof). */ -input[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - /* 2 */ - box-sizing: content-box; -} - /** * Remove inner padding and search cancel button in Safari and Chrome on OS X. * Safari (but not Chrome) clips the cancel button when the search input has * padding (and `textfield` appearance). */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - /** * Define consistent border, margin, and padding. */ fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; } /** @@ -512,17 +488,17 @@ fieldset { * 4. Corrects alignment displayed oddly in IE 6/7. */ legend { - border: 0; - /* 1 */ - padding: 0; - /* 2 */ + border: 0; + /* 1 */ + padding: 0; + /* 2 */ } /** * Remove default vertical scrollbar in IE 8/9/10/11. */ textarea { - overflow: auto; + overflow: auto; } /** @@ -530,7 +506,7 @@ textarea { * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ optgroup { - font-weight: bold; + font-weight: bold; } /* Tables @@ -539,2249 +515,2248 @@ optgroup { * Remove most spacing between table cells. */ table { - border-collapse: collapse; - border-spacing: 0; + border-collapse: collapse; + border-spacing: 0; } -td, -th { - padding: 0; +td, th { + padding: 0; } * { - -webkit-tap-highlight-color: transparent; + -webkit-tap-highlight-color: transparent; } body { -/* -webkit-touch-callout: none; - -webkit-text-size-adjust: none; - -webkit-user-select: none; */ + /* -webkit-touch-callout: none; + -webkit-text-size-adjust: none; + -webkit-user-select: none; */ } -html, -input, -textarea, -select, -button { - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +html, input, textarea, select, button { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } html { - height: 100%; + height: 100%; } body { - font-family: arial; - overflow-x: hidden; - font-size: 14px; - height: 100%; - color: #929292; + font-family: arial; + overflow-x: hidden; + font-size: 14px; + height: 100%; + color: #929292; } .body-login, .body-reset { - height: auto; - padding-top: 10%; - /*background: url(/images/edit_bg.png);*/ - background-color: #eee; + height: auto; + padding-top: 10%; + /*background: url(/images/edit_bg.png);*/ + background-color: #eee; } a { - text-decoration: none; - color: #929292; + text-decoration: none; + color: #929292; } .disabled { - text-decoration: line-through; + text-decoration: line-through; } -.clearfix:before, -.clearfix:after { - content: ''; - display: table; +.clearfix:before { + content: ""; + display: table; } - .clearfix:after { - clear: both; + content: ""; + display: table; + clear: both; } .text-right { - text-align: right; + text-align: right; } .text-center { - text-align: center; + text-align: center; } .check-label { - display: inline-block; - cursor: pointer; - position: relative; - line-height: 16px; - padding-left: 26px; + display: inline-block; + cursor: pointer; + position: relative; + line-height: 16px; + padding-left: 26px; } - .check-label:before { - content: ''; - width: 16px; - height: 16px; - position: absolute; - left: 0; - top: 0; - display: inline-block; - background-image: url("/images/sprite.png?1446554103"); - background-size: 450px auto; - background-repeat: no-repeat; - background-position: -232px -9px; - z-index: 99; + content: ""; + width: 16px; + height: 16px; + position: absolute; + left: 0; + top: 0; + display: inline-block; + background-image: url("/images/sprite.png?1446554103"); + background-size: 450px auto; + background-repeat: no-repeat; + background-position: -232px -9px; + z-index: 99; } -input[type="checkbox"] { - display: none; +input[type=checkbox] { + display: none; } -.clicked-on.check-label:before, -.selected .check-label:before { - content: ''; - display: inline-block; - width: 27px; - height: 27px; - background-position: -225px -42px; - left: -6px; - top: -6px; + +.clicked-on.check-label:before, .selected .check-label:before { + content: ""; + display: inline-block; + width: 27px; + height: 27px; + background-position: -225px -42px; + left: -6px; + top: -6px; } .l-center { - margin: 0 auto; - max-width: 998px; + margin: 0 auto; + max-width: 998px; } .l-logo { - background-image: url("/images/sprite.png?1446554103"); - background-position: -117px -7px; -/* background-position: -125px -478px; */ - background-repeat: no-repeat; - display: inline-block; - float: left; - height: 22px; - margin-top: 4px; - width: 73px; -/* width: 42px; */ - margin-left: -2px; + background-image: url("/images/sprite.png?1446554103"); + background-position: -117px -7px; + /* background-position: -125px -478px; */ + background-repeat: no-repeat; + display: inline-block; + float: left; + height: 22px; + margin-top: 4px; + width: 73px; + /* width: 42px; */ + margin-left: -2px; } .l-header { - background-color: #5d5d5d; - overflow: hidden; - margin-bottom: 28px; - position: fixed; - width: 100%; - z-index: 100; - height: 34px + background-color: #5d5d5d; + overflow: hidden; + margin-bottom: 28px; + position: fixed; + width: 100%; + z-index: 100; + height: 34px; } .l-header a { - font-size: 12px; -} - -.l-menu__item--active { - //background-color: #fff; + font-size: 12px; } .l-menu__item.l-menu__item--active a { - color: #ff6701; - font-size: 10px; - font-weight: bold; - text-transform: uppercase; - background-color: #fff; + color: #9c8cff; + font-size: 10px; + font-weight: bold; + text-transform: uppercase; + background-color: #fff; } .l-menu { - float: left; - position: fixed; - margin-left: 70px; + float: left; + position: fixed; + margin-left: 70px; } + .l-menu__item { - float: left; + float: left; } .l-menu__item a { - color: #f7f7f7; - position: relative; - line-height: 34px; - padding: 11px 18px; + color: #f7f7f7; + position: relative; + line-height: 34px; + padding: 11px 18px; } .l-menu__item a:hover { - background-color: #f79b44; - color: #fff; + background-color: #f79b44; + color: #fff; } .l-menu__item a:active { - color: #fff; - background-color: #ff6701; + color: #fff; + background-color: #9c8cff; } .l-menu.active .l-menu__item.focus a { - text-decoration: underline; - color: #5edad0; + text-decoration: underline; + color: #5edad0; } .l-menu.active .l-menu__item.focus a:hover { - background-color: #f79b44; - color: #fff; + background-color: #f79b44; + color: #fff; } +.lang-ua .l-menu__item a, .lang-nl .l-menu__item a, .lang-fr .l-menu__item a, .lang-ru .l-menu__item a { + padding: 11px 18px; +} -.lang-ua .l-menu__item a, -.lang-nl .l-menu__item a, -.lang-fr .l-menu__item a, -.lang-ru .l-menu__item a { - padding: 11px 18px; -} -.lang-el .l-menu__item a, -.lang-tr .l-menu__item a { - padding: 11px 15px; +.lang-el .l-menu__item a, .lang-tr .l-menu__item a { + padding: 11px 15px; } + .lang-ar .l-menu__item a { - padding: 11px 11px; -} -.lang-ar .l-menu__item a { - line-height: 35px; + padding: 11px 11px; + line-height: 35px; } .lang-de .l-menu__item a { - padding: 11px 12px; + padding: 11px 12px; } .lang-tw .l-menu__item a { - padding: 13px 18px; + padding: 13px 18px; } .l-profile { - overflow: hidden; - float: right; + overflow: hidden; + float: right; } + .l-profile__username { - float: left; - color: #a4abad; - font-weight: 700; - padding: 10px 0 0 10px; - margin-right: 12px; + float: left; + color: #a4abad; + font-weight: 700; + padding: 10px 0 0 10px; + margin-right: 12px; } .l-profile__username:hover { - color: #ffd62e; + color: #ffd62e; } .l-profile__username:active { - color: #f79b44; + color: #f79b44; } - .l-profile__logout { - float: left; - color: #fff; -/* margin-left: 40px; */ - padding: 10px 0 0 10px; + float: left; + color: #fff; + /* margin-left: 40px; */ + padding: 10px 0 0 10px; } .l-profile__logout:hover { - color: #C0E60E; + color: #C0E60E; } .l-profile__logout:active { - color: #ffd62e; + color: #ffd62e; } -.lang-cn .l-profile__logout { - padding: 8px 5px; -} -.lang-tw .l-profile__logout { - padding: 8px 5px; + +.lang-cn .l-profile__logout, .lang-tw .l-profile__logout { + padding: 8px 5px; } .l-profile__notifications { - background: url("/images/sprite.png?1446554103") no-repeat scroll -129px -135px; - border-radius: 30px; - color: #fff; - cursor: pointer; - float: left; - font-weight: bold; - height: 15px; - margin-right: 4px; - margin-top: 5px; - padding: 10px 5px 0; - width: 15px; + background: url("/images/sprite.png?1446554103") no-repeat scroll -129px -135px; + border-radius: 30px; + color: #fff; + cursor: pointer; + float: left; + font-weight: bold; + height: 15px; + margin-right: 4px; + margin-top: 5px; + padding: 10px 5px 0; + width: 15px; } .l-profile__notifications.active { - background-color: #454545; + background-color: #454545; } .l-profile__notifications:hover { - background-color: #333; + background-color: #333; } .l-profile__notifications:active { - background-color: #c4da5e; + background-color: #c4da5e; } .l-profile__notifications.updates { - background-position: -202px -135px; + background-position: -202px -135px; } .notification-container { - background-color: #454545; - box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.3); - list-style-type: none; - margin: 0; - overflow: hidden; - padding-left: 0; - position: fixed; - top: 34px; - width: 351px; - z-index: 200; - font-size: 12px; - padding: 0; - color: #7f7f7f; + background-color: #454545; + box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.3); + list-style-type: none; + margin: 0; + overflow: hidden; + padding-left: 0; + position: fixed; + top: 34px; + width: 351px; + z-index: 200; + font-size: 12px; + padding: 0; + color: #7f7f7f; } .notification-container .unseen { - color: #ABABAB; + color: #ABABAB; } - - .notification-container li { - border-bottom: 1px solid #555; - padding: 10px 15px 24px; + border-bottom: 1px solid #555; + padding: 10px 15px 24px; } .notification-container .mark-seen { - background-color: #abc04b; - border: 2px solid #454545; - border-radius: 10px; - cursor: pointer; - display: none; - float: right; - height: 7px; - margin-right: -5px; - margin-top: 0; - width: 7px; + background-color: #abc04b; + border: 2px solid #454545; + border-radius: 10px; + cursor: pointer; + display: none; + float: right; + height: 7px; + margin-right: -5px; + margin-top: 0; + width: 7px; } .notification-container .mark-seen:hover { - background-color: #333; - border-color: #abc04b; + background-color: #333; + border-color: #abc04b; } .notification-container .mark-seen:active { - background-color: #777; - border-color: #777; + background-color: #777; + border-color: #777; } -.notification-container .unseen .mark-seen{ - display: inline-block; +.notification-container .unseen .mark-seen { + display: inline-block; } .notification-container .title { - color: #9e9e9e; - font-weight: bold; - line-height: 30px; - padding: 0; - text-transform: none; - float: none; - display: block; + color: #9e9e9e; + font-weight: bold; + line-height: 30px; + padding: 0; + text-transform: none; + float: none; + display: block; } .notification-container .title a { - color: #9e9e9e; + color: #9e9e9e; } - -.notification-container .unseen .title a, .notification-container .unseen .title { - color: #C4DA5E; + color: #C4DA5E; +} +.notification-container .unseen .title a { + color: #C4DA5E; } .notification-container .unseen .title a:hover { - color: #ffcc00; + color: #ffcc00; } .notification-container .unseen .title a:active { - color: #dacf2e; + color: #dacf2e; } - .notification-container a { - color: #5ABDB5;/* #eee;*/ + color: #5ABDB5; + /* #eee;*/ } .notification-container a:hover { - color: #2CA99B; + color: #2CA99B; } .notification-container a:active { - color: #00C0C0; + color: #00C0C0; } - .notification-container .icon { - display: inline-block; - width: 0; + display: inline-block; + width: 0; } .notification-container .icon.filemanager { - display: inline-block; - width: 22px; - background: url("/images/flat_icons.png") repeat scroll -31px -100px; + display: inline-block; + width: 22px; + background: url("/images/flat_icons.png") repeat scroll -31px -100px; } .notification-container .icon.starred { - display: inline-block; - width: 21px; - background: url("/images/sprite.png?1446554103") repeat scroll -184px 556px; + display: inline-block; + width: 21px; + background: url("/images/sprite.png?1446554103") repeat scroll -184px 556px; } - - .l-stat { - margin: 0 auto; - margin: 34px auto; - position: fixed; - background-color: #fff; - z-index: 100; - padding-top: 30px; - width: 100%; - overflow: hidden; + margin: 0 auto; + margin: 34px auto; + position: fixed; + background-color: #fff; + z-index: 100; + padding-top: 30px; + width: 100%; + overflow: hidden; } + .l-stat__col { - display: block; - vertical-align: top; - float: left; + display: block; + vertical-align: top; + float: left; } .l-stat__col a { - display: inline-block; - padding-bottom: 36px; - min-height: 111px; - width: 138px; - border-bottom: 3px solid #fff; - overflow: hidden; - background-color: #fff; - padding-top: 3px; - margin-top: -3px; - padding-left: 5px; + display: inline-block; + padding-bottom: 36px; + min-height: 111px; + width: 138px; + border-bottom: 3px solid #fff; + overflow: hidden; + background-color: #fff; + padding-top: 3px; + margin-top: -3px; + padding-left: 5px; } .l-stat__col a:hover { - border-bottom: 3px solid #ff8e61; + border-bottom: 3px solid #ff8e61; } .l-stat__col a:active { - border-bottom: 3px solid #f72b44; + border-bottom: 3px solid #796cc7; } + .l-stat__col--active a { - border-bottom: 3px solid #ff6e42; + border-bottom: 3px solid #ff6e42; } .l-stat.active .l-stat__col.focus a { - border-bottom: 3px solid #5edad0; + border-bottom: 3px solid #5edad0; } .l-stat.active .l-stat__col.focus a .l-stat__col-title { - color: #36B3A9; + color: #36B3A9; } - - .l-stat__col a:hover .l-stat__col-title { - color: #ff6701; + color: #9c8cff; } .l-stat__col a:active .l-stat__col-title { - color: #f72b44; + color: #796cc7; } - - .l-stat__col ul { - list-style-type: none; - font-size: 12px; - padding-left: 0; + list-style-type: none; + font-size: 12px; + padding-left: 0; } .l-stat__col li { - color: #a0a0a0; - margin-bottom: 8px; - text-transform: lowercase; + color: #a0a0a0; + margin-bottom: 8px; + text-transform: lowercase; } .l-stat__col span { - padding-left: 15px; -} -.l-stat__col-title { - text-transform: uppercase; - font-weight: 700; - color: #212134; - min-height: 21px; -} -.l-stat__col--active .l-stat__col-title { - color: #ff6701; - font-size: 24px; - margin-top: -7px; - letter-spacing: -1px; - margin-right: -8px; + padding-left: 15px; +} + +.l-stat__col-title { + text-transform: uppercase; + font-weight: 700; + color: #212134; + min-height: 21px; +} + +.l-stat__col--active .l-stat__col-title { + color: #9c8cff; + font-size: 24px; + margin-top: -7px; + letter-spacing: -1px; + margin-right: -8px; } -.l-separator.selected, .l-separator { - height: 1px; - background-color: #ddd; + height: 1px; + background-color: #ddd; +} +.l-separator.selected { + height: 1px; + background-color: #ddd; } div.l-content > div.l-separator:nth-of-type(2) { - margin-top: 214px; - width: 100%; - position: fixed; - z-index: 120; + margin-top: 214px; + width: 100%; + position: fixed; + z-index: 120; } - div.l-content > div.l-separator:nth-of-type(4) { - margin-top: 259px; - width: 100%; - position: fixed; - z-index: 100; + margin-top: 259px; + width: 100%; + position: fixed; + z-index: 100; } .l-sort { - position: fixed; - width: 998px; - background-color: #fff; - z-index: 110; - margin-top: 215px; + position: fixed; + width: 998px; + background-color: #fff; + z-index: 110; + margin-top: 215px; } + .l-sort__create-btn { - background-image: url("/images/sprite.png?1446554103"); - background-position: -331px -107px; - background-repeat: no-repeat; - bottom: -23px; - display: inline-block; - height: 45px; - left: 30px; - position: absolute; - width: 45px; - z-index: 3; + background-image: url("/images/sprite.png?1446554103"); + background-position: -331px -107px; + background-repeat: no-repeat; + bottom: -23px; + display: inline-block; + height: 45px; + left: 30px; + position: absolute; + width: 45px; + z-index: 3; } .l-sort__create-btn:hover { - background-position: -378px -107px; + background-position: -378px -107px; } .l-sort__create-btn:active { - background-position: -425px -107px; + background-position: -425px -107px; } + .l-sort__create-btn--active { - background-position: -425px -107px; + background-position: -425px -107px; } .l-sort__create-btn.restore { - background-position: -331px -250px; - bottom: -22px; + background-position: -331px -250px; + bottom: -22px; } -.l-sort__create-btn.restore:hover { - background-position: -331px -250px; +.l-sort__create-btn.restore:hover, .l-sort__create-btn.restore:active { + background-position: -331px -250px; } -.l-sort__create-btn.restore:active { - background-position: -331px -250px; -} - .l-sort__create-btn.edit { - background-position: -331px -154px; - bottom: -22px; + background-position: -331px -154px; + bottom: -22px; } .l-sort__create-btn.edit:hover { - background-position: -378px -154px; + background-position: -378px -154px; } .l-sort__create-btn.edit:active { - background-position: -425px -154px; + background-position: -425px -154px; } .context-menu.sort-order { - display: inline-block; - position: absolute; - z-index: 3; - left: 397px; - margin: 0; - overflow: hidden; - top: 42px; - width: 201px; - background-color: #5c5c5c; - list-style-type: none; - padding-left: 0; - box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.3); + display: inline-block; + position: absolute; + z-index: 3; + left: 397px; + margin: 0; + overflow: hidden; + top: 42px; + width: 201px; + background-color: #5c5c5c; + list-style-type: none; + padding-left: 0; + box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.3); } .context-menu.sort-order li { - padding: 0; + padding: 0; } .context-menu li { - border-bottom: 1px solid #777; - color: #fff; - cursor: pointer; - font-size: 12px; - padding: 12px; + border-bottom: 1px solid #777; + color: #fff; + cursor: pointer; + font-size: 12px; + padding: 12px; } .context-menu.sort-order span.name { - background: url("/images/sprite.png?1446554103") no-repeat scroll -292px -361px rgba(0, 0, 0, 0); - display: inline-block; - padding: 12px 28px 12px 12px; - width: 117px; - text-transform: uppercase; - font-weight: bold; + background: url("/images/sprite.png?1446554103") no-repeat scroll -292px -361px rgba(0, 0, 0, 0); + display: inline-block; + padding: 12px 28px 12px 12px; + width: 117px; + text-transform: uppercase; + font-weight: bold; } .context-menu.sort-order span.up { - background: url("/images/sprite.png?1446554103") no-repeat scroll -434px -417px rgba(0, 0, 0, 0); - display: inline-block; - padding: 12px 14px; - width: 16px; + background: url("/images/sprite.png?1446554103") no-repeat scroll -434px -417px rgba(0, 0, 0, 0); + display: inline-block; + padding: 12px 14px; + width: 16px; } .context-menu.sort-order span.active { - background-color: #FFD437; - color: #555; + background-color: #FFD437; + color: #555; } .context-menu.sort-order span:hover { - background-color: #777; - color: #fff; + background-color: #777; + color: #fff; } .context-menu.sort-order span:active { - background-color: #ffcc00; + background-color: #ffcc00; } - - - .l-sort-toolbar { - float: right; - padding: 7px 0 7px 0; - width: 100%; + float: right; + padding: 7px 0 7px 0; + width: 100%; } -.l-sort-toolbar table{ - float: right; +.l-sort-toolbar table { + float: right; } - .l-sort-toolbar td.toggle-all { - padding-top: 7px; - padding-right: 20px; + padding-top: 7px; + padding-right: 20px; } - .l-sort-toolbar .sort-by { - cursor: pointer; - padding-top: 7px; - padding-left: 40px; + cursor: pointer; + padding-top: 7px; + padding-left: 40px; } .l-sort-toolbar .sort-by:hover { - color: #555; + color: #555; } .l-sort-toolbar .sort-by:hover b { - color: #555; + color: #555; } .l-sort-toolbar .sort-by:active { - color: #55c9c0; + color: #23b7e5; } .l-sort-toolbar .sort-by:active b { - color: #55c9c0; + color: #23b7e5; } - .l-sort-toolbar .sort-by b { - text-transform: uppercase; - padding-left: 3px; - font-size: 12px; + text-transform: uppercase; + padding-left: 3px; + font-size: 12px; } - .l-sort-toolbar .toggle-all:hover { - color: #555; + color: #555; } .l-sort-toolbar .toggle-all:active { - color: #55c9c0; + color: #23b7e5; } - .l-sort-toolbar .l-select { - float: left; + float: left; } .l-sort-toolbar td { - vertical-align: middle; + vertical-align: middle; } - -.l-sort-toolbar.subtitle { - padding-left: 96px; +.l-sort-toolbar.subtitle { + padding-left: 96px; } - - .l-sort-toolbar td:first-of-type { - padding-left: 40px; + padding-left: 40px; } - - .l-sort-toolbar td.step-right:first-of-type { - padding-right: 20px; + padding-right: 20px; } - .l-sort-toolbar td:nth-of-type(2) { -/* /// padding-right: 60px;*/ - padding-right: 20px; + /* /// padding-right: 60px;*/ + padding-right: 20px; } .l-sort-toolbar td:last-of-type { -/* /// padding-left: 40px; */ + /* /// padding-left: 40px; */ } + .l-sort-toolbar__filter-apply { - float: left; - width: 30px; - height: 30px; - background-image: url("/images/sprite.png?1446554103"); - background-position: -333px -1px; - border: none; + float: left; + width: 30px; + height: 30px; + background-image: url("/images/sprite.png?1446554103"); + background-position: -333px -1px; + border: none; } .l-sort-toolbar__filter-apply:hover { - background-position: -368px -1px; - border-color: #afafac; + background-position: -368px -1px; + border-color: #afafac; } .l-sort-toolbar__filter-apply:active { - background-position: -404px -1px; - border-color: #afafac; + background-position: -404px -1px; + border-color: #afafac; } + .l-sort-toolbar__filter-apply--active { - background-position: -404px -1px; - border-color: #50bdb5; + background-position: -404px -1px; + border-color: #50bdb5; } .l-sort-toolbar__search { - float: left; - width: 25px; - height: 25px; - background-image: url("/images/sprite.png?1446554103"); - background-position: -333px -37px; - border: none; + float: left; + width: 25px; + height: 25px; + background-image: url("/images/sprite.png?1446554103"); + background-position: -333px -37px; + border: none; } .l-sort-toolbar__search:hover { - background-position: -368px -37px; - border-color: #afafac; + background-position: -368px -37px; + border-color: #afafac; } .l-sort-toolbar__search:active { - background-position: -404px -37px; - border-color: #50bdb5; + background-position: -404px -37px; + border-color: #50bdb5; } + .l-sort-toolbar__search--active { - background-position: -404px -37px; - border-color: #50bdb5; + background-position: -404px -37px; + border-color: #50bdb5; } + .l-sort-toolbar .vst { - padding: 0 12px; - color: #777; - text-transform: uppercase; - font-size: 11px; - font-weight: bold; - line-height: 30px; + padding: 0 12px; + color: #777; + text-transform: uppercase; + font-size: 11px; + font-weight: bold; + line-height: 30px; } .l-sort-toolbar .vst:hover { - color: #ff6701; + color: #9c8cff; } .l-sort-toolbar .vst:active { - color: #55C9C0; + color: #23b7e5; } .l-sort-toolbar .vst.selected { - color: #ff6701; -// color: #92af0b; + color: #9c8cff; } - - .l-select { - width: 178px; - height: 28px; - border: 1px solid #ddd; - border-radius: 0; - overflow-x: hidden; - position: relative; - display: inline-block; - border-style: solid none solid solid; + width: 178px; + height: 28px; + border: 1px solid #ddd; + border-radius: 0; + overflow-x: hidden; + position: relative; + display: inline-block; + border-style: solid none solid solid; } + .lang-ru .l-select { - width: 199px; + width: 199px; } .l-select:after { - pointer-events: none; - background-image: url("/images/sprite.png?1446554103"); - background-position: -245px -175px; - width: 7px; - height: 4px; - margin-top: -2px; - content: ''; - position: absolute; - right: 10px; - top: 50%; + pointer-events: none; + background-image: url("/images/sprite.png?1446554103"); + background-position: -245px -175px; + width: 7px; + height: 4px; + margin-top: -2px; + content: ""; + position: absolute; + right: 10px; + top: 50%; } .l-select select { - border: 0; - background-color: transparent; - line-height: 28px; - height: 28px; - min-width: 208px; - padding-left: 4px; - appearance:none; - -moz-appearance:none; - -webkit-appearance:none; - padding-left: 10px; + border: 0; + background-color: transparent; + line-height: 28px; + height: 28px; + min-width: 208px; + padding-left: 4px; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + padding-left: 10px; } .l-select select:focus { - border: 0; - outline: 0; + border: 0; + outline: 0; } + .lang-ru .l-select select { - min-width: 215px; + min-width: 215px; } + .l-select select option { - padding: 7px; + padding: 7px; } .l-unit { - color: #888; - padding: 0 0 0 15px; - overflow: hidden; - font-size: 13px; -} -.units .l-unit { - border-bottom: 1px solid #ddd; - border-left: 2px solid #fff; -} -.units .l-unit.l-unit--starred { - border-left: 2px solid #ff6701; -} -.units.active .l-unit.focus { - border-left: 2px solid #5edad0; -} -.units.active .l-unit.focus .l-unit__name { - color: #36b3a9; -} -.units.active .l-unit.focus .l-unit-toolbar__col--right { - display: block; + color: #888; + padding: 0 0 0 15px; + overflow: hidden; + font-size: 13px; } +.units .l-unit { + border-bottom: 1px solid #ddd; + border-left: 2px solid #fff; +} +.units .l-unit.l-unit--starred { + border-left: 2px solid #9c8cff; +} +.units.active .l-unit.focus { + border-left: 2px solid #5edad0; + background: #f4faff; +} +.units.active .l-unit.focus .l-unit__name { + color: #36b3a9; +} +.units.active .l-unit.focus .l-unit-toolbar__col--right { + display: block; +} .units > div:last-child { - border-bottom: none; + border-bottom: none; } .l-unit-ft { - color: #929292; - padding: 0 0 0 15px; + color: #929292; + padding: 0 0 0 15px; } .l-unit:hover .l-unit-toolbar__col--right { - display: block; + display: block; } + .l-unit--blue { - border-left: 2px solid #55c9c0; + border-left: 2px solid #23b7e5; } .l-unit--suspended { - background-color: #eaeaea; - color: #c0c0c0; + background-color: #eaeaea; + color: #c0c0c0; } - .units .l-unit.l-unit--outdated { - background-color: #ffcaca; - color: #555; - border-left: 5px solid #ff6f6f; - border-bottom: 1px solid #fff; + background-color: #ffcaca; + color: #555; + border-left: 5px solid #ff6f6f; + border-bottom: 1px solid #fff; } -.l-unit--suspended .l-unit__name, -.l-unit--suspended b, -.l-unit--outdated .l-unit__name, -.l-unit--outdated b { - color: #c0c0c0; +.l-unit--suspended .l-unit__name, .l-unit--suspended b { + color: #c0c0c0; } +.l-unit--outdated .l-unit__name, .l-unit--outdated b { + color: #c0c0c0; +} .l-unit--outdated .l-unit__name { - color: #333; + color: #333; } .l-unit--outdated b { - color: #555; + color: #555; } .l-unit--suspended .l-percent { - border-color: #fff; + border-color: #fff; } .l-unit--suspended .l-percent__fill { - background-color: #fff; + background-color: #fff; +} +.l-unit--suspended .l-unit__name { + color: #ADADAD; } -.l-unit--suspended .l-unit__name, .l-unit--suspended .l-unit__name span { - color: #ADADAD; + color: #ADADAD; } - -.l-unit--suspended.selected .l-unit__name, -.l-unit--suspended.selected .l-unit__name span { - color: #777; -} - .l-unit--suspended.selected { - background-color: #f2eab8 !important; - color: #b2ac87 !important; + background-color: #f2eab8 !important; + color: #b2ac87 !important; +} +.l-unit--suspended.selected .l-unit__name { + color: #777; +} +.l-unit--suspended.selected .l-unit__name span { + color: #777; } .l-unit--outdated.selected { - background: #765D5D !important; - color: #333 !important; + background: #765D5D !important; + color: #333 !important; } +.l-unit--suspended.selected .l-unit__name, .l-unit--suspended.selected b { + color: #333 !important; +} +.l-unit--outdated.selected .l-unit__name, .l-unit--outdated.selected b { + color: #333 !important; +} -.l-unit--suspended.selected .l-unit__name, -.l-unit--suspended.selected b, -.l-unit--outdated.selected .l-unit__name, -.l-unit--outdated.selected b, -.l-unit--suspended.selected .l-percent, -.l-unit--suspended.selected .l-percent__fill, -.l-unit--suspended.selected .l-unit__name, +.l-unit--suspended.selected .l-percent, .l-unit--suspended.selected .l-percent__fill { + color: #333 !important; +} +.l-unit--suspended.selected .l-unit__name { + color: #333 !important; +} .l-unit--suspended.selected .l-unit__name span { - color: #333 !important; + color: #333 !important; } .l-unit.selected .l-percent { - border-bottom: 1px dotted #777; + border-bottom: 1px dotted #777; } - .l-unit--selected { - background-color: #d1eddc; + background-color: #d1eddc; } -.l-unit-toolbar{ - height: 39px; + +.l-unit-toolbar { + height: 39px; } .l-unit label { - margin-bottom: 20px; + margin-bottom: 20px; } + .l-unit__columns { - display: table; - width: 100%; + display: table; + width: 100%; } + .l-unit__col { - display: table-cell; - padding-top: 1px; - vertical-align: top; + display: table-cell; + padding-top: 1px; + vertical-align: top; } + .l-unit__col--left { - width: 124px; - padding-right: 10px; + width: 124px; + padding-right: 10px; } + .units.compact .l-unit__col--left { - vertical-align: top; + vertical-align: top; } .l-unit__col--left.step-left { - padding-left: 30px; + padding-left: 30px; } .l-unit__col--right.total { - padding-left: 16px; + padding-left: 16px; } - .l-unit__col--right.back { - padding-left: 78px + padding-left: 78px; } .l-sort-toolbar .step-left { - padding-left: 40px; + padding-left: 40px; } + .step-right { - padding-right: 40px; + padding-right: 40px; } .l-unit__date { - font-size: 12px; - letter-spacing: 1px; - margin-top: 10px; - padding-bottom: 30px; + font-size: 12px; + letter-spacing: 1px; + margin-top: 10px; + padding-bottom: 30px; } .l-unit__suspended { - display: none; - font-size: 11px; - font-weight: bold; - letter-spacing: 3px; - margin-top: 36px; - text-transform: uppercase; - margin-bottom: 14px; + display: none; + font-size: 11px; + font-weight: bold; + letter-spacing: 3px; + margin-top: 36px; + text-transform: uppercase; + margin-bottom: 14px; } .units.compact .l-unit__suspended { - margin-top: 1px; + margin-top: 1px; } -.l-unit--outdated .l-unit__suspended, -.l-unit--suspended .l-unit__suspended { - display: block; +.l-unit--outdated .l-unit__suspended, .l-unit--suspended .l-unit__suspended { + display: block; +} + +.l-unit-ft .subtitle { + color: #9c8cff; + font-size: 12px; + font-weight: bold; + margin: 20px 0 18px 129px; + text-transform: uppercase; } -.l-unit-ft .subtitle, .l-unit .subtitle { - color: #ff6701; - font-size: 12px; - font-weight: bold; - margin: 20px 0 18px 129px; - text-transform: uppercase; + color: #9c8cff; + font-size: 12px; + font-weight: bold; + margin: 20px 0 18px 129px; + text-transform: uppercase; } - .l-unit.l-unit--outdated .l-unit__date { - color: #d24c4c; - font-size: 10px; - letter-spacing: 3px; - text-transform: uppercase; - font-weight: bold; + color: #d24c4c; + font-size: 10px; + letter-spacing: 3px; + text-transform: uppercase; + font-weight: bold; } .l-unit__name { - color: #111; - font-size: 32px; - margin-bottom: 10px; + color: #111; + font-size: 32px; + margin-bottom: 10px; } -.l-unit__stats.separate, + +.l-unit__stats.separate { + padding-bottom: 15px; +} + .l-unit__name.separate { - padding-bottom: 15px; + padding-bottom: 15px; } - .l-unit__name.small { - font-size: 19px; + font-size: 19px; } - .l-unit__name.small-2 { - font-size: 24px; + font-size: 24px; } - - .l-unit__name span { - color: #999; - margin-left: 30px; - font-size: 14px; - font-style: italic; + color: #999; + margin-left: 30px; + font-size: 14px; + font-style: italic; } .l-unit__name span:first-of-type { - margin-left: 39px; + margin-left: 39px; } .l-unit__name b { - font-weight: normal; - font-style: italic; + font-weight: normal; + font-style: italic; } .l-unit__ip { - margin-bottom: 26px; - font-size: 12px; - letter-spacing: 1px; + margin-bottom: 26px; + font-size: 12px; + letter-spacing: 1px; } .l-unit__ip span { - padding-left: 3px; - padding-right: 3px; + padding-left: 3px; + padding-right: 3px; } + .display-ip { - font-size: 12px; - letter-spacing: 1px; + font-size: 12px; + letter-spacing: 1px; } .display-ip span { - padding-left: 3px; - padding-right: 3px; + padding-left: 3px; + padding-right: 3px; } .l-unit__stats { - margin-bottom: 50px; + margin-bottom: 50px; } .l-unit__stats table { - width: 100%; - table-layout: fixed; + width: 100%; + table-layout: fixed; } .l-unit__stats td { - height: 22px; - padding-bottom: 3px; - vertical-align: top; + height: 22px; + padding-bottom: 3px; + vertical-align: top; } + .l-unit__stat-col--left { - float: left; - width: 124px; + float: left; + width: 124px; } .l-unit__stat-col--left.compact { - width: 70px; + width: 70px; } .l-unit__stat-col--left.compact-2 { - width: 95px; + width: 95px; } .l-unit__stat-col--left.wide { - width: 190px; + width: 190px; } .l-unit__stat-col--left.wide-2 { - width: 230px; + width: 230px; } .l-unit__stat-col--left.wide-3 { - width: 250px; + width: 250px; } .l-unit__stat-col--left.wide-4 { - width: 550px; + width: 550px; } - - .l-unit__stat-col--left.small-2 { - line-height: 11px; + line-height: 11px; } - .l-unit__stat-col--left.tiny { - font-size: 11px; + font-size: 11px; } - .l-unit__stat-col--left.tiny b { - font-size: 18px; + font-size: 18px; } - .l-unit__stat-col--right { - float: left; - max-width: 152px; + float: left; + max-width: 152px; } .l-unit-toolbar__col--left { - float: left; - margin-left: -15px; - margin-top: 0; - padding-bottom: 0px;/* 8px */ - padding-left: 15px; - padding-top: 15px; - width: 30px; - cursor: pointer; + float: left; + margin-left: -15px; + margin-top: 0; + padding-bottom: 0px; + /* 8px */ + padding-left: 15px; + padding-top: 15px; + width: 30px; + cursor: pointer; } .l-unit-toolbar__col--right { - float: right; - display: none; + float: right; + display: none; } body.mobile .l-unit-toolbar__col--right { - display: block; + display: block; } .l-unit-toolbar .shortcut { - display: none; + display: none; } .units.active .l-unit.focus .l-unit-toolbar .shortcut { - display: block; - background-color: #69a298; - border-radius: 13px; - color: #fff; - cursor: pointer; - display: block; - font-size: 12px; - font-weight: 700; - line-height: 25px; - padding-left: 7px; - padding-right: 9px; - position: absolute; - right: 3px; - top: 3px; + display: block; + background-color: #69a298; + border-radius: 13px; + color: #fff; + cursor: pointer; + display: block; + font-size: 12px; + font-weight: 700; + line-height: 25px; + padding-left: 7px; + padding-right: 9px; + position: absolute; + right: 3px; + top: 3px; } .units.active .l-unit.focus .l-unit-toolbar .shortcut.delete { - font-size: 10px; - padding-left: 2px; - padding-right: 5px; - text-transform: capitalize; + font-size: 10px; + padding-left: 2px; + padding-right: 5px; + text-transform: capitalize; } .units.active .l-unit.focus .l-unit-toolbar .shortcut.enter { - font-size: 17px; - padding-left: 1px; - padding-right: 7px; + font-size: 17px; + padding-left: 1px; + padding-right: 7px; } .units.active .l-unit.focus .l-unit-toolbar i { - background: none; + background: none; } .l-unit__stat-col.volume { - font-size: 12px; - line-height: 17px; - float: right; + font-size: 12px; + line-height: 17px; + float: right; } .actions-panel__col { - float: left; - min-width: 95px; - min-height: 31px; - text-transform: uppercase; - background-color: #dfdedd; - border-right: 1px solid #d8d7d7; - position: relative; + float: left; + min-width: 95px; + min-height: 31px; + text-transform: uppercase; + background-color: #dde6e9; + border-right: 1px solid #dde6e9; + position: relative; } + .selected .actions-panel__col { - -webkit-filter: contrast(80%); - filter: contrast(80%); + -webkit-filter: contrast(80%); + filter: contrast(80%); } + .actions-panel__col i { - background-image: url("/images/sprite.png?1446554103"); - background-repeat: no-repeat; - display: inline-block; - float: right; - content: ''; - width: 31px; - height: 31px; - position: absolute; - top: 0; - right: 0; + background-image: url("/images/sprite.png?1446554103"); + background-repeat: no-repeat; + display: inline-block; + float: right; + content: ""; + width: 31px; + height: 31px; + position: absolute; + top: 0; + right: 0; } .actions-panel__col a { - line-height: 31px; - color: #777; - font-weight: 700; - font-size: 12px; - padding-left: 13px; - display: block; - cursor: pointer; - position: relative; - padding-right: 36px; -} -.lang-ru .actions-panel__col a { - font-size: 11px; - padding-top: 1px; -} -.lang-tw .actions-panel__col a { - font-size: 15px; - font-weight: normal; - line-height: 29px; -} -.lang-ar .actions-panel__col a { - font-size: 15px; - font-weight: normal; - line-height: 31px; + line-height: 31px; + color: #777; + font-weight: 700; + font-size: 12px; + padding-left: 13px; + display: block; + cursor: pointer; + position: relative; + padding-right: 36px; } +.lang-ru .actions-panel__col a { + font-size: 11px; + padding-top: 1px; +} + +.lang-tw .actions-panel__col a { + font-size: 15px; + font-weight: normal; + line-height: 29px; +} + +.lang-ar .actions-panel__col a { + font-size: 15px; + font-weight: normal; + line-height: 31px; +} .actions-panel__favorite a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__favorite i { - background-position: -39px -85px; + background-position: -39px -85px; } .actions-panel__edit i { - background-position: -1px -169px; + background-position: -1px -169px; } .actions-panel__edit:hover a { - background-color: #9fbf0c; - color: #fff; + background-color: #27c24c; + color: #fff; } .actions-panel__edit:active a { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .actions-panel__edit:hover a i { - background-position: -41px -169px; + background-position: -41px -169px; } .actions-panel__edit:active a i { - background-position: -81px -169px; + background-position: -81px -169px; } + .actions-panel__edit--active a { - background-color: #c0e60f; - color: #fff; + background-color: #32f360; + color: #fff; } .actions-panel__edit--active i { - background-position: -78px -169px; + background-position: -78px -169px; } .actions-panel__restart i { - background-position: -1px -520px; + background-position: -1px -520px; } .actions-panel__restart:hover a { - background-color: #9fbf0c; - color: #fff; + background-color: #27c24c; + color: #fff; } .actions-panel__restart:active a { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .actions-panel__restart:hover a i { - background-position: -41px -520px; + background-position: -41px -520px; } .actions-panel__restart:active a i { - background-position: -81px -520px; + background-position: -81px -520px; } + .actions-panel__restart--active a { - background-color: #c0e60f; - color: #fff; + background-color: #32f360; + color: #fff; } .actions-panel__restart--active i { - background-position: -78px -520px; + background-position: -78px -520px; } .actions-panel__add i { - background-position: -1px -285px; + background-position: -1px -285px; } .actions-panel__add:hover a { - background-color: #9fbf0c; - color: #fff; + background-color: #27c24c; + color: #fff; } .actions-panel__add:active a { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .actions-panel__add:hover a i { - background-position: -41px -285px; + background-position: -41px -285px; } .actions-panel__add:active a i { - background-position: -81px -285px; + background-position: -81px -285px; } .actions-panel__add--active a { - background-color: #c0e60f; - color: #fff; + background-color: #32f360; + color: #fff; } .actions-panel__add--active i { - background-position: -78px -285px; + background-position: -78px -285px; } .actions-panel__update i { - background-position: -1px -481px; + background-position: -1px -481px; } .actions-panel__update:hover a { - background-color: #9fbf0c; - color: #fff; + background-color: #27c24c; + color: #fff; } .actions-panel__update:active a { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .actions-panel__update:hover a i { - background-position: -41px -481px; + background-position: -41px -481px; } .actions-panel__update:active a i { - background-position: -81px -481px; + background-position: -81px -481px; } + .actions-panel__update--active a { - background-color: #c0e60f; - color: #fff; + background-color: #32f360; + color: #fff; } .actions-panel__update--active i { - background-position: -78px -481px; + background-position: -78px -481px; } .actions-panel__logs i { - background-position: -2px -130px; + background-position: -2px -130px; } .actions-panel__logs:hover a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__logs:active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__logs:hover a i { - background-position: -42px -130px; + background-position: -42px -130px; } .actions-panel__logs:active a i { - background-position: -82px -130px; + background-position: -82px -130px; } + .actions-panel__logs--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__logs--active i { - background-position: -79px -130px; + background-position: -79px -130px; } .actions-panel__db i { - background-position: -2px -363px; + background-position: -2px -363px; } .actions-panel__db:hover a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__db:active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__db:hover a i { - background-position: -42px -363px; + background-position: -42px -363px; } .actions-panel__db:active a i { - background-position: -82px -363px; + background-position: -82px -363px; } + .actions-panel__db--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__db--active i { - background-position: -79px -362px; + background-position: -79px -362px; } .actions-panel__suspend i { - background-position: -1px -51px; + background-position: -1px -51px; } .actions-panel__suspend:hover a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__suspend:active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__suspend:hover a i { - background-position: -41px -51px; + background-position: -41px -51px; } .actions-panel__suspend:active a i { - background-position: -81px -51px; + background-position: -81px -51px; } + .actions-panel__suspend--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__suspend--active i { - background-position: -78px -51px; + background-position: -78px -51px; } .actions-panel__unsuspend i { - background-position: -1px -12px; + background-position: -1px -12px; } .actions-panel__unsuspend:hover a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__unsuspend:active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__unsuspend:hover a i { - background-position: -41px -12px; + background-position: -41px -12px; } .actions-panel__unsuspend:active a i { - background-position: -81px -12px; + background-position: -81px -12px; } + .actions-panel__unsuspend--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__unsuspend--active i { - background-position: -78px -12px; + background-position: -78px -12px; } - .actions-panel__loginas i { - background-position: -1px -245px; + background-position: -1px -245px; } .actions-panel__loginas:hover a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__loginas:active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__loginas:hover a i { - background-position: -41px -245px; + background-position: -41px -245px; } .actions-panel__loginas:active a i { - background-position: -81px -245px; + background-position: -81px -245px; } + .actions-panel__loginas--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__loginas--active i { - background-position: -78px -245px; + background-position: -78px -245px; } .actions-panel__download i { - background-position: -1px -402px; + background-position: -1px -402px; } .actions-panel__download:hover a { - background-color: #9fbf0c; - color: #fff; + background-color: #27c24c; + color: #fff; } .actions-panel__download:active a { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .actions-panel__download:hover a i { - background-position: -41px -402px; + background-position: -41px -402px; } .actions-panel__download:active a i { - background-position: -81px -402px; + background-position: -81px -402px; } + .actions-panel__download--active a { - background-color: #c0e60f; - color: #fff; + background-color: #32f360; + color: #fff; } .actions-panel__download--active i { - background-position: -78px -402px; + background-position: -78px -402px; } .actions-panel__configure i { - background-position: -1px -442px; + background-position: -1px -442px; } .actions-panel__configure:hover a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__configure:active a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__configure:hover a i { - background-position: -81px -442px; + background-position: -81px -442px; } .actions-panel__configure:active a i { - background-position: -41px -442px; + background-position: -41px -442px; } + .actions-panel__configure--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__configure--active i { - background-position: -78px -442px; + background-position: -78px -442px; } .actions-panel__.l-icon-starmail i { - background-position: -1px -324px; + background-position: -1px -324px; } + .actions-panel__mail:hover a { - background-color: #afafac; - color: #fff; + background-color: #afafac; + color: #fff; } .actions-panel__mail:active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__mail:hover a i { - background-position: -41px -324px; + background-position: -41px -324px; } .actions-panel__mail:active a i { - background-position: -81px -324px; + background-position: -81px -324px; } + .actions-panel__mail--active a { - background-color: #55c9c0; - color: #fff; + background-color: #23b7e5; + color: #fff; } .actions-panel__mail--active i { - background-position: -78px -324px; + background-position: -78px -324px; } .actions-panel__delete i { - background-position: -1px -207px; + background-position: -1px -207px; } .actions-panel__delete:hover a { - background-color: #ff3438; - color: #fff; + background-color: #ff3438; + color: #fff; } .actions-panel__delete:active a { - background-color: #ff5f5f; - color: #fff; + background-color: #ff5f5f; + color: #fff; } .actions-panel__delete:hover a i { - background-position: -41px -207px; + background-position: -41px -207px; } .actions-panel__delete:active a i { - background-position: -81px -207px; + background-position: -81px -207px; } + .actions-panel__delete--active a { - background-color: #ff5f5f; - color: #fff; + background-color: #ff5f5f; + color: #fff; } .actions-panel__delete--active i { - background-position: -78px -207px; + background-position: -78px -207px; } .actions-panel__stop i { - background-position: -1px -561px; + background-position: -1px -561px; } .actions-panel__stop:hover a { - background-color: #ff3438; - color: #fff; + background-color: #ff3438; + color: #fff; } .actions-panel__stop:active a { - background-color: #ff5f5f; - color: #fff; + background-color: #ff5f5f; + color: #fff; } .actions-panel__stop:hover a i { - background-position: -41px -561px; + background-position: -41px -561px; } .actions-panel__stop:active a i { - background-position: -81px -561px; + background-position: -81px -561px; } + .actions-panel__stop--active a { - background-color: #ff5f5f; - color: #fff; + background-color: #ff5f5f; + color: #fff; } .actions-panel__stop--active i { - background-position: -78px -561px; + background-position: -78px -561px; } .actions-panel__start i { - background-position: -1px -482px; + background-position: -1px -482px; } .actions-panel__start:hover a { - background-color: #9fbf0c; - color: #fff; + background-color: #27c24c; + color: #fff; } .actions-panel__start:active a { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .actions-panel__start:hover a i { - background-position: -41px -482px; + background-position: -41px -482px; } .actions-panel__start:active a i { - background-position: -81px -482px; + background-position: -81px -482px; } + .actions-panel__start--active a { - background-color: #c0e60f; - color: #fff; + background-color: #32f360; + color: #fff; } .actions-panel__start--active i { - background-position: -78px -482px; + background-position: -78px -482px; } - .l-icon-up-arrow, .l-icon-down-arrow, .l-icon-star, .l-icon-to-top, .l-icon-shortcuts, .l-icon-star-orange, .l-icon-star-blue { - display: inline-block; - vertical-align: middle; - background-image: url("/images/sprite.png?1446554103"); + display: inline-block; + vertical-align: middle; + background-image: url("/images/sprite.png?1446554103"); } .l-icon-down-arrow { - width: 7px; - height: 15px; - background-position: -280px -128px; + width: 7px; + height: 15px; + background-position: -280px -128px; } .l-icon-up-arrow { - width: 7px; - height: 15px; - background-position: -299px -129px; + width: 7px; + height: 15px; + background-position: -299px -129px; } - .l-icon-star { - width: 36px; - height: 36px; - background-position: -216px 560px; - cursor: pointer; - visibility: hidden; + width: 36px; + height: 36px; + background-position: -216px 560px; + cursor: pointer; + visibility: hidden; } + .l-unit--starred .l-icon-star { - background-position: -174px 560px; - visibility: visible; + background-position: -174px 560px; + visibility: visible; } + .selected .l-icon-star { - filter: contrast(70%); - -webkit-filter: contrast(70%); + filter: contrast(70%); + -webkit-filter: contrast(70%); } .units.compact .l-icon-star { - margin-top: -14px; + margin-top: -14px; } .l-icon-star:hover { - background-position: 0px 560px; + background-position: 0px 560px; } - .l-icon-star:active { - -background-position: -174px 560px; - background-position: -80px 562px; + -background-position: -174px 560px; + background-position: -80px 562px; } .l-unit:hover .l-icon-star { - visibility: visible; + visibility: visible; } - .l-icon-to-top { - width: 35px; - height: 35px; - background-position: -330px -68px; + width: 35px; + height: 35px; + background-position: -330px -68px; } .l-icon-to-top:hover { - background-position: -366px -68px; + background-position: -366px -68px; } .l-icon-to-top:active { - background-position: -402px -68px; + background-position: -402px -68px; } .l-icon-shortcuts { - width: 35px; - height: 35px; - background-position: -240px -281px; - border-radius: 18px; + width: 35px; + height: 35px; + background-position: -240px -281px; + border-radius: 18px; } .l-icon-shortcuts:hover { - background-position: -160px -281px; + background-position: -160px -281px; } .l-icon-shortcuts:active { - background-position: -198px -281px; + background-position: -198px -281px; } -body.mobile .l-icon-to-top, -body.mobile .l-icon-shortcuts { - display: none; +body.mobile .l-icon-to-top, body.mobile .l-icon-shortcuts { + display: none; } - .l-icon-star-orange { - width: 13px; - height: 13px; - background-position: -178px -97px; + width: 13px; + height: 13px; + background-position: -178px -97px; } .l-icon-star-blue { - width: 13px; - height: 13px; - background-position: -134px -97px; + width: 13px; + height: 13px; + background-position: -134px -97px; } .media-top { - vertical-align: top; + vertical-align: top; } .l-unit__stat-cols { - padding-right: 10px; + padding-right: 10px; } .l-unit__stat-cols.last { - padding-right: 0; + padding-right: 0; } .l-unit__stat-cols.graph { - width: 200px; + width: 200px; } .l-unit__stat-cols.tiny { - font-size:11px; - line-height: 19px; + font-size: 11px; + line-height: 19px; } .l-percent { - border-bottom: 1px dotted #ccc; - margin-top: 1px; - width: 200px; + border-bottom: 1px dotted #ccc; + margin-top: 1px; + width: 200px; } + .l-percent__fill { - background-color: #aacc0d; - height: 3px; - position: relative; - bottom: -1px; + background-color: #aacc0d; + height: 3px; + position: relative; + bottom: -1px; } .to-top { - display: inline-block; - position: fixed; - top: 92%; - right: 1%; + display: inline-block; + position: fixed; + top: 92%; + right: 1%; } .to-shortcuts { - display: inline-block; - position: fixed; - top: 92%; - right: 4%; + display: inline-block; + position: fixed; + top: 92%; + right: 4%; } - /* #vstobjects { margin-top: -1px; } */ - #vstobjects .l-center { - padding-top: 20px; - padding-bottom: 30px; - font-size: 12px; + padding-top: 20px; + padding-bottom: 30px; + font-size: 12px; } .timer-container { - margin-top: 4px; + margin-top: 4px; } - .timer-container .refresh-timer { - border: 2px solid #9f9f9f; - border-radius: 14px; - height: 14px; - width: 14px; - float: left; - margin: 2px 10px 0 0; + border: 2px solid #9f9f9f; + border-radius: 14px; + height: 14px; + width: 14px; + float: left; + margin: 2px 10px 0 0; } .timer-container .refresh-timer.paused { - border: 2px solid #9f9f9f; + border: 2px solid #9f9f9f; } -.timer-container .refresh-timer.paused .loader-half.right, -.timer-container .refresh-timer.paused .loader-half.dark { - background-color: #9d9f9f; +.timer-container .refresh-timer.paused .loader-half.right, .timer-container .refresh-timer.paused .loader-half.dark { + background-color: #9d9f9f; } .timer-container .loader-half { - border-radius: 0 14px 14px 0; - height: 14px; - width: 7px; - float: left; + border-radius: 0 14px 14px 0; + height: 14px; + width: 7px; + float: left; } .timer-container .loader-half.left { - border-radius: 14px 0 0 14px; - background-color: #fff; + border-radius: 14px 0 0 14px; + background-color: #fff; } .timer-container .loader-half.right { - margin-left: 7px; - background-color: #9f9f9f; + margin-left: 7px; + background-color: #9f9f9f; } .timer-container .loader-half.dark { - background-color: #9f9f9f; + background-color: #9f9f9f; } .timer-container .movement { - float: left; - width: 14px; - height: 14px; - position: absolute; + float: left; + width: 14px; + height: 14px; + position: absolute; } .timer-container .movement.left { - z-index: 10; + z-index: 10; } .timer-container .movement.right { - transform: rotate(180deg); - -webkit-transform: rotate(180deg); + transform: rotate(180deg); + -webkit-transform: rotate(180deg); } .timer-container .timer-button { - cursor: pointer; - text-decotation: underline; - margin: 7px 0 0 38px; - width: 15px; - float: left; - height: 10px; + cursor: pointer; + text-decotation: underline; + margin: 7px 0 0 38px; + width: 15px; + float: left; + height: 10px; } .timer-container .timer-button.pause { - background: url(/images/pause.png) no-repeat ; + background: url(/images/pause.png) no-repeat; } .timer-container .timer-button.play { - background: url(/images/start.png) no-repeat; + background: url(/images/start.png) no-repeat; } .uppercase { - text-transform: uppercase; -} - -.title b, -.title { - color: #ff6701; - font-size: 12px; - font-weight: bold; - padding: 0 30px 0px 73px; - line-height: 30px; - text-transform: uppercase; + text-transform: uppercase; } .title { - display: inline-block; - float: left; + color: #9c8cff; + font-size: 12px; + font-weight: bold; + padding: 0 30px 0px 73px; + line-height: 30px; + text-transform: uppercase; + display: inline-block; + float: left; +} +.title b { + color: #9c8cff; + font-size: 12px; + font-weight: bold; + padding: 0 30px 0px 73px; + line-height: 30px; + text-transform: uppercase; } - - - /* form styles */ - - - .vst-error { - color: #BE5ABF; - font-weight: bold; - display: inline-block; - height: 17px; - overflow: hidden; - padding-top: 6px; - width: 593px; + color: #BE5ABF; + font-weight: bold; + display: inline-block; + height: 17px; + overflow: hidden; + padding-top: 6px; + width: 593px; } .vst-ok { - color: #9fbf0c; - font-weight: bold; - display: inline-block; - height: 17px; - overflow: hidden; - padding-top: 6px; - max-width: 600px; + color: #27c24c; + font-weight: bold; + display: inline-block; + height: 17px; + overflow: hidden; + padding-top: 6px; + max-width: 600px; } - .vst-ok a { - color: #2c9491; + color: #27c24c; } .vst-ok a:hover { - color: #ff6701; + color: #9c8cff; } .vst-ok a:active { - color: #f72b44; + color: #796cc7; } - - - .data { - margin: 0 0 90px 0; + margin: 0 0 90px 0; } + .data-col1 { - width: 148px; + width: 148px; } - .data-col1 td { - padding: 10px 0 0 5px; + padding: 10px 0 0 5px; } - .data-col1 tr:first-child td { - padding: 59px 0 0 5px; + padding: 59px 0 0 5px; } -.login-box td, -.data td { - color: #555; - font-size: 15px; - padding-bottom: 3px; - font-weight: bold; +.login-box td, .data td { + color: #555; + font-size: 15px; + padding-bottom: 3px; + font-weight: bold; } + .input-label { - padding-top: 20px; + padding-top: 20px; } -.data input[type="checkbox"] { - display: inline; - cursor: pointer; + +.data input[type=checkbox] { + display: inline; + cursor: pointer; } + .step-top { - padding-top: 42px; + padding-top: 42px; } + .step-top-small { - padding-top: 22px; + padding-top: 22px; } + .jump-top { - margin-top: -60px; + margin-top: -60px; } + .jump-small-top { - margin-top: -12px; + margin-top: -12px; } + .float-right { display: inline-block; float: right; } .data a { - text-decoration: none; -} -label { - cursor: pointer; + text-decoration: none; } +label { + cursor: pointer; +} label:hover { - color: #333; + color: #333; } .vst-input { - background-color: #fff; - border: 1px solid #cfcfcf; - border-radius: 0px; - color: #555; - font-family: Arial; - font-size: 19px; - height: 28px; - margin: 2px 6px 0 0; - padding: 7px 3px 9px 14px; - width: 360px; - font-weight: normal; + background-color: #fff; + border: 1px solid #dee5e7; + border-radius: 3px; + color: #555; + font-family: Arial; + font-size: 19px; + height: 28px; + margin: 2px 6px 0 0; + padding: 7px 3px 9px 14px; + width: 360px; + font-weight: normal; } .vst-input:hover { - border: 1px solid #909090; + border: 1px solid #909090; } .vst-input:focus { - border: 1px solid #55C9C0; - background-color: #D7F9FF; - color: #333; + border: 1px solid #23b7e5; + background-color: #fff; + color: #333; +} +.vst-input:disabled { + background-color: #e0e0e0; } -.vst-input:disabled, .vst-list:disabled { - background-color: #e0e0e0; + background-color: #e0e0e0; } + .vst-input:focus:disabled { - border-color: #f1f1f1; - background-color: #f1f1f1; + border-color: #f1f1f1; + background-color: #f1f1f1; } .vst-input.long { - width: 832px; + width: 100%; } .vst-input.short { - width: 200px; + width: 200px; } .vst-list { - background-color: #fff; - border: 1px solid #ccc; - border-radius: 0; - color: #555; - font-family: Arial,Helvetica,sans-serif; - font-size: 19px; - font-weight: normal; - height: 43px; - cursor: pointer; - margin: 2px 6px 0 0; - min-width: 138px; - padding: 8px 1px 6px 10px; - background-image: url("/images/sprite.png?1446554103"); - background-position: -185px -604px; - width: 270px; - appearance:none; - -moz-appearance:none; - -webkit-appearance:none; - text-shadow: 0 0 0 #555; + background-color: #fff; + border: 1px solid #dee5e7; + border-radius: 3px; + color: #555; + font-family: Arial, Helvetica, sans-serif; + font-size: 19px; + font-weight: normal; + height: 43px; + cursor: pointer; + margin: 2px 6px 0 0; + min-width: 138px; + padding: 8px 1px 6px 10px; + background-image: url("/images/sprite.png?1446554103"); + background-position: -185px -604px; + width: 270px; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + text-shadow: 0 0 0 #555; } - .vst-list.long-2 { - width: 486px; - background-position: 502px -604px; + width: 486px; + background-position: 502px -604px; } .vst-list option { - padding: 6px 1px 6px 15px; + padding: 6px 1px 6px 15px; } .vst-list:hover { - border: 1px solid #909090; + border: 1px solid #909090; } .vst-list:focus { - border: 1px solid #55C9C0; - color: #333; + border: 1px solid #23b7e5; + color: #333; } - .vst-list.flat { - border: 1px solid #fff; - color: #2c9491; - text-transform: uppercase; - font-weight: bold; - font-size: 11px; - margin-left: -14px; - background-position: -210px -604px; - text-shadow: none !important; + border: 1px solid #fff; + color: #27c24c; + text-transform: uppercase; + font-weight: bold; + font-size: 11px; + margin-left: -14px; + background-position: -210px -604px; + text-shadow: none !important; } .vst-list.flat:hover { - color: #ff6701; + color: #9c8cff; } .vst-list.flat option { - color: #555; + color: #555; } -a.vst-text, -a.vst-text b{ - color: #2c9491; +a.vst-text { + color: #27c24c; } -a.vst-text:hover, -a.vst-text:hover b{ - color: #ff6701; +a.vst-text b { + color: #27c24c; } -a.vst-text:active, -a.vst-text:active b{ - color: #ff6701; +a.vst-text:hover, a.vst-text:active { + color: #9c8cff; +} +a.vst-text:hover b, a.vst-text:active b { + color: #9c8cff; } .vst-textinput { - background-color: #fff; - border: 1px solid #cfcfcf; - border-radius: 0px; - color: #555; - font-size: 19px; - padding: 5px; - width: 560px; - height: 90px; - font-family:Arial, Helvetica, sans-serif; - padding: 9px 1px 6px 14px; - font-weight: normal; + background-color: #fff; + border: 1px solid #dee5e7; + border-radius: 3px; + color: #555; + font-size: 19px; + padding: 5px; + width: 560px; + height: 90px; + font-family: Arial, Helvetica, sans-serif; + padding: 9px 1px 6px 14px; + font-weight: normal; } .vst-textinput:hover { - border: 1px solid #909090; + border: 1px solid #909090; } .vst-textinput:focus { - border: 1px solid #55C9C0; - background-color: #D7F9FF; - color: #333; + border: 1px solid #23b7e5; + background-color: #fff; + color: #333; } .vst-textinput:disabled { - background-color: #f1f1f1; + background-color: #f1f1f1; } -.vst-textinput.console{ - font-size: 13px; - width: 630px; - height: 300px; - font-family:"Lucida Console", Monaco, monospace; - white-space: pre; +.vst-textinput.console { + font-size: 13px; + width: 630px; + height: 300px; + font-family: "Lucida Console", Monaco, monospace; + white-space: pre; } .vst-textinput.short { - width: 360px; + width: 360px; } -#advanced-options .console{ - width: 833px; - height: 600px; + +#advanced-options .console { + width: 833px; + height: 600px; } + .generate { - color: #2C9491; - text-decoration: underline; - cursor: pointer; - margin-left: -3px; - padding: 0 3px; + color: #27c24c; + text-decoration: underline; + cursor: pointer; + margin-left: -3px; + padding: 0 3px; } .generate:hover { - background-color: #ff6701; - border-color: #ff6701; - color: #fff; + background-color: #9c8cff; + border-color: #9c8cff; + color: #fff; } .generate:active { - background-color: #F7D616; - border-color: #F7D616; + background-color: #F7D616; + border-color: #F7D616; } + .vst-advanced { - border-bottom: 1px solid #2c9491; - color: #2c9491; - font-size: 11px; - letter-spacing: 1px; - padding: 2px 2px 0; - text-decoration: none; - text-transform: uppercase; + border-bottom: 1px solid #27c24c; + color: #27c24c; + font-size: 11px; + letter-spacing: 1px; + padding: 2px 2px 0; + text-decoration: none; + text-transform: uppercase; } + .login-box .vst-advanced:hover { - color: #ff6701; - background-color: transparent; - border-color: transparent; + color: #9c8cff; + background-color: transparent; + border-color: transparent; } .vst-advanced:hover { - color: #fff; - background-color: #ff6701; - border-color: #ff6701; + color: #fff; + background-color: #9c8cff; + border-color: #9c8cff; } -.login-box .vst-advanced:active, -.vst-advanced:active { - color: #fff; - background-color: #F7D616; - border-color: #F7D616; +.login-box .vst-advanced:active, .vst-advanced:active { + color: #fff; + background-color: #F7D616; + border-color: #F7D616; } .login-box .vst-advanced { - border-bottom: none; - color: #2c9491; - font-size: 10px; - letter-spacing: 1px; - padding: 2px 2px 0; - text-decoration: none; - text-transform: uppercase; + border-bottom: none; + color: #27c24c; + font-size: 10px; + letter-spacing: 1px; + padding: 2px 2px 0; + text-decoration: none; + text-transform: uppercase; } + .vst-checkbox { - font-size: 19px; - margin: 2px 6px 0 3px; - padding: 5px; + font-size: 19px; + margin: 2px 6px 0 3px; + padding: 5px; } + .lets-encrypt-note { - color: #89a40a !important; - font-style: italic; - font-weight: normal !important; - height: 30px; - padding-top: 10px; - vertical-align: top; + color: #89a40a !important; + font-style: italic; + font-weight: normal !important; + height: 30px; + padding-top: 10px; + vertical-align: top; } .additional-control { - margin-left: 17px; - color: #2C9491; - border-bottom: 1px solid #2C9491; - font-size: 11px; - letter-spacing: 1px; - cursor: pointer; - text-transform: uppercase; - font-weight: bold; - padding: 2px 2px 0; + margin-left: 17px; + color: #27c24c; + border-bottom: 1px solid #27c24c; + font-size: 11px; + letter-spacing: 1px; + cursor: pointer; + text-transform: uppercase; + font-weight: bold; + padding: 2px 2px 0; } .additional-control:hover { - background-color: #ff6701; - border-color: #ff6701; - color: #fff; + background-color: #9c8cff; + border-color: #9c8cff; + color: #fff; } .additional-control:active { - color: #fff; - background-color: #aaa; + color: #fff; + background-color: #aaa; } - .additional-control.ftp-remove-user { - padding: 2px 0 0 0; + padding: 2px 0 0 0; } - -.additional-control.delete:hover, -.additional-control.ftp-remove-user:hover { - background-color: #FF3438; - border-color: #FF3438; +.additional-control.delete:hover, .additional-control.ftp-remove-user:hover { + background-color: #FF3438; + border-color: #FF3438; } -.additional-control.delete:active, -.additional-control.ftp-remove-user:active { - background-color: #FF5F5F; - border-color: #FF5F5F; +.additional-control.delete:active, .additional-control.ftp-remove-user:active { + background-color: #FF5F5F; + border-color: #FF5F5F; } .additional-control.add:hover { - background-color: #9FBF0C; - border-color: #9FBF0C; + background-color: #27c24c; + border-color: #27c24c; } -.additional-control.add:active{ - background-color: #c0e60f; - border-color: #c0e60f; +.additional-control.add:active { + background-color: #32f360; + border-color: #32f360; } - .additional-control.remove-ns { - display: none; + display: none; } .data .step-left { - padding-left: 50px; + padding-left: 50px; } + .hide-password { - color: #2361a1; - margin-left: -36px; - padding-left: 3px; - z-index: 1; + color: #2361a1; + margin-left: -36px; + padding-left: 3px; + z-index: 1; } + .toggle-psw-visibility-icon { - cursor: pointer; - opacity: 1; + cursor: pointer; + opacity: 1; } + .show-passwords-enabled-action { - opacity: 0.4; -} -.ftp-path-value, -.hint, -td.hint { - color: #777; - font-size: 15px; - font-style: italic; - font-weight: normal; -} -.ftp-path-prefix { padding-top: 7px; } - -.ui-button, -.button { - filter:chroma(color=#000); - cursor: pointer; - border-radius: 3px 3px 3px 3px; - font-size: 13px; - font-weight: bold; - padding: 1px 16px 3px 16px; - width: 108px; - height: 34px; - color: #fafafa; - border: 1px solid #9FBF0C; - background-color: #9FBF0C; -} -.ui-button:hover, -.button:hover { - color: #555; - border: 1px solid #C0E60F; - background-color: #C0E60F; -} -.ui-button:active, -.button:active { - border: 1px solid #D1D70D !important; - background-color: #D1D70D !important; + opacity: 0.4; } -.ui-button:focus, -.button:focus { - border: 1px solid #90AD0D; - background-color: #90AD0D; +.ftp-path-value, .hint, td.hint { + color: #777; + font-size: 15px; + font-style: italic; + font-weight: normal; } -.ui-button.cancel, -.button.cancel { - color: #777; - border: 1px solid #DFDEDD; - background-color: #DFDEDD; +.ftp-path-prefix { + padding-top: 7px; } -.ui-button.cancel:hover, -.button.cancel:hover { - color: #fff; - border: 1px solid #999; - background-color: #999; + +.ui-button, .button { + filter: chroma(color=#000); + cursor: pointer; + border-radius: 3px 3px 3px 3px; + font-size: 13px; + font-weight: bold; + padding: 1px 16px 3px 16px; + width: 108px; + height: 34px; + color: #fafafa; + border: 1px solid #27c24c; + background-color: #27c24c; } -.ui-button.cancel:active, -.button.cancel:active { - border: 1px solid #D1D70D; - background-color: #D1D70D; + +.ui-button:hover, .button:hover { + color: #555; + border: 1px solid #32f360; + background-color: #32f360; } + +.ui-button:active, .button:active { + border: 1px solid #54ca70 !important; + background-color: #54ca70 !important; +} + +.ui-button:focus, .button:focus { + border: 1px solid #25af49; + background-color: #25af49; +} + +.ui-button.cancel, .button.cancel { + color: #777; + border: 1px solid #dde6e9; + background-color: #dde6e9; +} + +.ui-button.cancel:hover, .button.cancel:hover { + color: #fff; + border: 1px solid #999; + background-color: #999; +} + +.ui-button.cancel:active, .button.cancel:active { + border: 1px solid #54ca70; + background-color: #54ca70; +} + a.button.cancel { - padding: 8px 38px; - text-transform: capitalize; + padding: 8px 38px; + text-transform: capitalize; } - .ui-dialog button.cancel { - color: #000; - border: 1px solid #555; - background-color: #555; + color: #000; + border: 1px solid #555; + background-color: #555; } + /* .ui-dialog button.cancel:hover { color: #fff; @@ -2789,105 +2764,101 @@ a.button.cancel { background-color: #999; } .ui-dialog button.cancel:active { - border: 1px solid #D1D70D; - background-color: #D1D70D; + border: 1px solid #54ca70; + background-color: #54ca70; } */ - - - .ui-button span { - color: #fff; + color: #fff; } .ui-button:hover span { - color: #555 !important; + color: #555 !important; } .ui-button:active span { - color: #555; + color: #555; } .ui-button.cancel span { - color: #777; + color: #777; } -.ui-button:hover span { - color: #fff; -} -.ui-button:active span { - color: #fff; +.ui-button:hover span, .ui-button:active span { + color: #fff; } .ui-dialog button.cancel span { - color: #ccc; + color: #ccc; } - .unlim-trigger { - cursor: pointer; - margin-left: -36px; - padding-left: 3px; - z-index: 1; + cursor: pointer; + margin-left: -36px; + padding-left: 3px; + z-index: 1; } + .optional { - font-size: 12px; - padding: 0 0 0 6px; - font-weight: normal; + font-size: 12px; + padding: 0 0 0 6px; + font-weight: normal; } + .data-active b { - color: #9FBF0C; - font-size: 11px; - letter-spacing: 1px; - text-transform: uppercase; + color: #27c24c; + font-size: 11px; + letter-spacing: 1px; + text-transform: uppercase; } + .data-suspended b { - color: #A3A3A3; - font-size: 11px; - letter-spacing: 3px; - font-weight: bold; - text-transform: uppercase; + color: #A3A3A3; + font-size: 11px; + letter-spacing: 3px; + font-weight: bold; + text-transform: uppercase; } + .data-date { - font-weight: normal; - color: #777; - font-size: 12px; - letter-spacing: 1px; - line-height: 23px; + font-weight: normal; + color: #777; + font-size: 12px; + letter-spacing: 1px; + line-height: 23px; } -.data-dotted { - vertical-align: top; -} -.mail-infoblock-td { - vertical-align: top; + +.data-dotted, .mail-infoblock-td { + vertical-align: top; } + .mail-infoblock { - margin-left: -110px; - font-size: 12px; - color: #777; - border: 1px solid #d9d9d9; - padding: 0px 5px 12px 20px; - margin-top: 64px; - width: 334px; - overflow: hidden; + margin-left: -110px; + font-size: 12px; + color: #777; + border: 1px solid #d9d9d9; + padding: 0px 5px 12px 20px; + margin-top: 64px; + width: 334px; + overflow: hidden; } .mail-infoblock:hover { - overflow: visible; + overflow: visible; } .mail-infoblock td { - color: #777; - font-size: 14px; - height: 18px; - font-weight: normal; + color: #777; + font-size: 14px; + height: 18px; + font-weight: normal; } -.mail-infoblock td:first-child{ - padding-right: 15px; +.mail-infoblock td:first-child { + padding-right: 15px; } .mail-infoblock div { - width: 190px; - white-space: nowrap; + width: 190px; + white-space: nowrap; } .mail-infoblock a { - color: #2c9491; + color: #27c24c; } .mail-infoblock a:hover { - color: #ff6701; + color: #9c8cff; } .additional-info { @@ -2904,489 +2875,467 @@ a.button.cancel { padding-left: 20px; } +:focus { + outline: none; +} - -:focus {outline:none;} -::-moz-focus-inner {border:0;} +::-moz-focus-inner { + border: 0; +} .login { - background-color: #fff; - box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); - font-family: Arial,Helvetica,sans-serif; - margin: 0; - padding: 0; - text-align: left; - vertical-align: top; - width: 550px; + background-color: #fff; + box-shadow: 0 2px 6px rgba(100, 100, 100, 0.3); + font-family: Arial, Helvetica, sans-serif; + margin: 0; + padding: 0; + text-align: left; + vertical-align: top; + width: 500px; +} +.login a.error { + color: #BE5ABF; } -.login a.error { - color: #BE5ABF; -} .vestacp { - color: #505050; - font-size: 10px; - text-align: right; + color: #505050; + font-size: 10px; + text-align: right; } .vestacp:hover { - color: #2c9491; + color: #27c24c; } .vestacp:active { - color: #ff6701; + color: #9c8cff; } + .login-bottom { - height: 50px; - margin: 0; - padding: 0 26px 0 0; - text-align: right; - vertical-align: top; - width: 520px; + height: 50px; + margin: 0; + padding: 0 26px 0 0; + text-align: right; + vertical-align: top; + width: 474px; } .l-unit.selected { - background-color: #feef9a; - color: #555; - border-bottom: 1px solid #c0b990; + background-color: #feef9a; + color: #555; + border-bottom: 1px solid #c0b990; } - -.l-unit.selected b, -.l-unit.selected strong { - color: #555; +.l-unit.selected b, .l-unit.selected strong { + color: #555; } - /* MAIN MENU COLLAPSED */ .collapsed .l-stat { - padding-top: 20px; + padding-top: 20px; } - .collapsed .l-stat__col a { - height: 0; - min-height: 0; - overflow: hidden; + height: 0; + min-height: 0; + overflow: hidden; } - .collapsed .l-stat__col-title { - padding-top: 2px; + padding-top: 2px; } div.l-content.collapsed > div.l-separator:nth-of-type(2) { - margin-top: 93px; - position: fixed; + margin-top: 93px; + position: fixed; } - div.l-content.collapsed > div.l-separator:nth-of-type(4) { - margin-top: 138px; - position: fixed; + margin-top: 138px; + position: fixed; } - div.l-content.collapsed .l-sort { - margin-top: 94px; + margin-top: 94px; } .l-content > .units.l-center::before { - content: ''; - display: block; - height: 260px; + content: ""; + display: block; + height: 260px; } form#vstobjects { - padding-top: 280px; + padding-top: 280px; } - form#vstobjects.suspended { - background-color: #EAEAEA; - padding-bottom: 30px; + background-color: #EAEAEA; + padding-bottom: 30px; } #add-icon { - width: 45px; - height: 45px; - background-image: url("/images/sprite.png?1446554103"); - background-position: -378px -107px; - background-repeat: no-repeat; - display: inline-block; - z-index: 3; + width: 45px; + height: 45px; + background-image: url("/images/sprite.png?1446554103"); + background-position: -378px -107px; + background-repeat: no-repeat; + display: inline-block; + z-index: 3; } + .l-sort__create-btn.restore #add-icon { - background-position: -378px -250px; + background-position: -378px -250px; } .l-sort__create-btn.edit #add-icon { - background-position: -378px -154px; + background-position: -378px -154px; } + #tooltip { - background-color: #aacc0d; - border-radius: 15px; - bottom: 6px; - color: #fff; - font-size: 12px; - font-weight: bold; - height: 26px; - left: 12px; - letter-spacing: 0; - line-height: 25px; - margin-left: 12px; - margin-top: 7px; - padding: 3px 14px 3px 27px; - position: absolute; - text-transform: uppercase; - white-space: nowrap; - word-break: keep-all; - z-index: -1; + background-color: #aacc0d; + border-radius: 15px; + bottom: 6px; + color: #fff; + font-size: 12px; + font-weight: bold; + height: 26px; + left: 12px; + letter-spacing: 0; + line-height: 25px; + margin-left: 12px; + margin-top: 7px; + padding: 3px 14px 3px 27px; + position: absolute; + text-transform: uppercase; + white-space: nowrap; + word-break: keep-all; + z-index: -1; } .l-sort__create-btn:active #add-icon { - background-position: -425px -107px; + background-position: -425px -107px; } .l-sort__create-btn.restore:active #add-icon { - background-position: -425px -250px !important; + background-position: -425px -250px !important; } - .l-sort__create-btn.edit:active #add-icon { - background-position: -425px -154px !important; + background-position: -425px -154px !important; } - .l-sort__create-btn.edit:hover #tooltip { - background-color: #55C9C0; + background-color: #23b7e5; } .l-sort__create-btn.edit:active #tooltip { - background-color: #3BF0E6 !important; + background-color: #3BF0E6 !important; } - - - - .l-sort__create-btn:active #tooltip { - background-color: #D9F210; + background-color: #D9F210; } .noselect { - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } .search-input { - background-color: #fff; - border: 1px solid #ddd; - height: 21px; - line-height: 28px; - padding-left: 7px; - float: left; - width: 74px; -/* visibility: hidden;*/ - -webkit-transition: width .2s ease-out; - -moz-transition: width .2s ease-out; - -o-transition: width .2s ease-out; - transition: width .2s ease-out; -} -.lang-ru .search-input.activated{ - width: 70px; -} -.search-input.activated{ - width: 130px; - visibility: visible; -} -.search-input:focus { -// background-color: #e8fcff; -// border-color: #75c9c2; -// color: #333; + background-color: #fff; + border: 1px solid #ddd; + height: 21px; + line-height: 28px; + padding-left: 7px; + float: left; + width: 74px; + /* visibility: hidden;*/ + -webkit-transition: width 0.2s ease-out; + -moz-transition: width 0.2s ease-out; + -o-transition: width 0.2s ease-out; + transition: width 0.2s ease-out; } +.lang-ru .search-input.activated { + width: 70px; +} + +.search-input.activated { + width: 130px; + visibility: visible; +} .float-left { - float: left; + float: left; } + .float-right { - float: right; + float: right; } + .display-inline-block { - display: inline-block; + display: inline-block; } + .width-100p { - width: 100%; + width: 100%; } .l-sort-toolbar table td { - float: left; + float: left; } + .l-sort-toolbar__search-box { - float: right !important; - padding-top: 3px; - padding-right: 0 !important; + float: right !important; + padding-top: 3px; + padding-right: 0 !important; } + .ui-dialog .ui-dialog-buttonpane button:nth-of-type(2) { - -background-color: #dfdedd; + -background-color: #dde6e9; } .shortcuts { - background: rgba(50, 50, 50, 0.9); - display: inline-block; - position: fixed; - left: 50%; - bottom: 0; - color: #eee; - width: 800px; - border: 1px solid #333; - font-size: 13px; - z-index: 120; - transform: translate(-50%, 0); + background: rgba(50, 50, 50, 0.9); + display: inline-block; + position: fixed; + left: 50%; + bottom: 0; + color: #eee; + width: 800px; + border: 1px solid #333; + font-size: 13px; + z-index: 120; + transform: translate(-50%, 0); } .shortcuts .header { - border-bottom: 1px solid #333; - height: 43px; + border-bottom: 1px solid #333; + height: 43px; } .shortcuts .title { - text-transform: uppercase; - color: #ffcc00; - padding: 7px 0 7px 14px; - display: inline-block; - float: left; - font-size: 11px; - letter-spacing: 3px; + text-transform: uppercase; + color: #ffcc00; + padding: 7px 0 7px 14px; + display: inline-block; + float: left; + font-size: 11px; + letter-spacing: 3px; } .shortcuts .close { - background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px; - cursor: pointer; - display: inline-block; - float: right; - height: 32px; - padding-top: 11px; - width: 46px; + background: url("/images/sprite.png?1446554103") repeat scroll -408px -469px; + cursor: pointer; + display: inline-block; + float: right; + height: 32px; + padding-top: 11px; + width: 46px; } .shortcuts .close:hover { - background-color: #000; + background-color: #000; } .shortcuts .close:active { - background-color: #55c9c0; + background-color: #23b7e5; } .shortcuts ul { - list-style-type: none; - padding: 30px 20px; - display: inline-block; - float: left; - width: 360px; + list-style-type: none; + padding: 30px 20px; + display: inline-block; + float: left; + width: 360px; } .shortcuts ul li { - padding: 5px 20px; + padding: 5px 20px; } .shortcuts ul li.step-top { - padding-top: 30px; + padding-top: 30px; } .shortcuts ul li span { - color: #48F4EF; - display: inline-block; - font-weight: bold; - padding: 0 20px 0 0; - text-align: right; -/* width: 140px;*/ + color: #48F4EF; + display: inline-block; + font-weight: bold; + padding: 0 20px 0 0; + text-align: right; + /* width: 140px;*/ } .shortcuts ul li span.bigger { - font-size: 18px; + font-size: 18px; } .description { - font-weight: normal; - line-height: 25px; - padding-bottom: 45px; - margin-left: 50px; + font-weight: normal; + line-height: 25px; + padding-bottom: 45px; + margin-left: 50px; } -.description ul{ - margin-top: 15px; - list-style: none; - padding-left: 0; +.description ul { + margin-top: 15px; + list-style: none; + padding-left: 0; } - -.description li{ - margin: 10px 0; +.description li { + margin: 10px 0; } - .description a { - line-height: 30px; - text-decoration: underline; - color: #2c9491; + line-height: 30px; + text-decoration: underline; + color: #27c24c; } .description a.purchase { - color: #FFF; - background-color: #9fbf0c; - border: none; - border-radius: 3px; - font-size: 13px; - font-weight: bold; - padding: 7px 15px;; - text-transform: capitalize; - text-decoration: none; + color: #FFF; + background-color: #27c24c; + border: none; + border-radius: 3px; + font-size: 13px; + font-weight: bold; + padding: 7px 15px; + text-transform: capitalize; + text-decoration: none; } .description a.purchase:hover { - background-color: #c0e60f; - color: #555; + background-color: #32f360; + color: #555; } .description a.purchase:active { - background-color: #D9F210; - color: #555; + background-color: #D9F210; + color: #555; } - .description a.cancel { - background-color: #999; - border: none; - border-radius: 3px; - color: #fff; - font-size: 13px; - font-weight: bold; - padding: 7px 15px; - text-transform: capitalize; - text-decoration: none; + background-color: #999; + border: none; + border-radius: 3px; + color: #fff; + font-size: 13px; + font-weight: bold; + padding: 7px 15px; + text-transform: capitalize; + text-decoration: none; } .description a.cancel:hover { - background-color: #2c9491; + background-color: #27c24c; } .description a.cancel:active { - background-color: #5f9491; + background-color: #5f9491; } - .description.cancel-success { - color: #8fac0a; - font-weight: bold; + color: #8fac0a; + font-weight: bold; } - .description .licence { - padding: 20px 0; - color: #2c9491; + padding: 20px 0; + color: #27c24c; } - .description .licence input { - margin-left: 17px; - width: 137px; + margin-left: 17px; + width: 137px; } - .description span { - font-style: italic; - line-height: 45px; - padding-top: 20px; + font-style: italic; + line-height: 45px; + padding-top: 20px; } - .description .twoco { - font-style: italic; - line-height: 15px; - font-size: 12px; + font-style: italic; + line-height: 15px; + font-size: 12px; } .ui-dialog .ui-dialog-content { - padding: 10px 26px 30px !important; + padding: 10px 26px 30px !important; } .helper-container { - float: right; - height: 293px; - margin-bottom: -450px; - margin-top: 459px; - padding-top: 3px; - width: 563px; + float: right; + height: 293px; + margin-bottom: -450px; + margin-top: 459px; + padding-top: 3px; + width: 563px; } .context-helper { - text-transform: uppercase; -# text-decoration: underline; - color: #777; - font-size: 11px; - cursor: pointer; - font-weight: bold; - float: right; + text-transform: uppercase; + color: #777; + font-size: 11px; + cursor: pointer; + font-weight: bold; + float: right; } .context-helper:hover { - color: #55C9C0; + color: #23b7e5; } .context-helper:active { - color: #ff6701; + color: #9c8cff; } - .cron-helper-tabs { -/* margin-top: 30px;*/ - border: 1px solid #d9d9d9 !important; + /* margin-top: 30px;*/ + border: 1px solid #d9d9d9 !important; } - .cron-helper-tabs a { - color: #777; - font-size: 11px; - font-weight: bold; - line-height: 30px; - padding: 0 12px; - text-transform: uppercase; + color: #777; + font-size: 11px; + font-weight: bold; + line-height: 30px; + padding: 0 12px; + text-transform: uppercase; } - .cron-helper-tabs a:hover { - color: #ff6701; + color: #9c8cff; } .cron-helper-tabs a:active { - color: #55C9C0; + color: #23b7e5; } .cron-helper-tabs .ui-tabs-selected a { - color: #ff6701; + color: #9c8cff; } - .cron-helper-tabs select { - font-size: 15px !important; + font-size: 15px !important; } .cron-helper-tabs select.short { - background-position: -388px -604px; - min-width: 30px; - width: 70px; + background-position: -388px -604px; + min-width: 30px; + width: 70px; } - .cron-helper-tabs p { - color: #777; - font-size: 12px; + color: #777; + font-size: 12px; } -.cron-helper-tabs p span{ - padding-right: 15px; - padding-left: 25px; +.cron-helper-tabs p span { + padding-right: 15px; + padding-left: 25px; } -.cron-helper-tabs p span.first{ - display: inline-block; - padding-right: 15px; - width: 100px; - padding-left: 0; +.cron-helper-tabs p span.first { + display: inline-block; + padding-right: 15px; + width: 100px; + padding-left: 0; } - .cron-helper-tabs .button { - width: auto; - background-color: #55C9C0; - border: 1px solid #55C9C0; - text-transform: capitalize; + width: auto; + background-color: #23b7e5; + border: 1px solid #23b7e5; + text-transform: capitalize; } .cron-helper-tabs .button:hover { - background-color: #5BD8CF; - border: 1px solid #5BD8CF; + background-color: #00d8ff; + border: 1px solid #00d8ff; } .cron-helper-tabs .button:active { - background-color: #4FBCB4; - border: 1px solid #4FBCB4; + background-color: #49c8ef; + border: 1px solid #49c8ef; } .context-helper-close { - background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -408px -469px; - cursor: pointer; - display: inline-block; - float: right; - height: 32px; - padding-top: 11px; - width: 46px; - filter: contrast(50%); + background: rgba(0, 0, 0, 0) url("/images/sprite.png?1446554103") repeat scroll -408px -469px; + cursor: pointer; + display: inline-block; + float: right; + height: 32px; + padding-top: 11px; + width: 46px; + filter: contrast(50%); } .context-helper-close:hover { - background-color: #aaa; - filter: none; + background-color: #aaa; + filter: none; } .context-helper-close:active { - background-color: #999; - filter: none; + background-color: #999; + filter: none; } @media screen and (max-width: 950px) { - .helper-container { - display: none; - } + .helper-container { + display: none; + } } diff --git a/web/images/myvesta-large-white-130.png b/web/images/myvesta-large-white-130.png new file mode 100644 index 0000000000000000000000000000000000000000..2007b0bcf7cdd0506f97f510834aee84386c42b8 GIT binary patch literal 5284 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 literal 0 HcmV?d00001 diff --git a/web/images/sprite.png b/web/images/sprite.png index 456ab6f8d441083a881bcfca34a77bb118374c79..061392c3677cc4e7d9659d877a407891e538dde4 100644 GIT binary patch literal 35005 zcma&O2UHWy`!*bUmm(dcccc?~5fPClAS8qyML>u&kzPbPB1JHC1w;^&00E>*uhLaa z=tZg$1nJV>zYlEukrX|M`r==PYZ{J(V zVAFX)d!3B=731fg2x9>vA<`A$1WNvF(9`FsvX?2nh~zJ)U6T*8K3|;(DN`VE@0b}*T)V6YAY>EC}WgJe#ivl~-K~Rx&Ix2H2p;eSeC!?lJbb1R;tfAFR^)P9PJUXrj8r?$kQXgnZ$ogZ zA+?HNflHBN^4`mlRIk;NnG})EreDJbPQ~9K{e!B`S zc>Z}Va8J35PI*S6XPGd>g^#ZW;d62%;F|vP7GA>2My>DS*^OKC#lO4zHJTXK+vIzu zGnE7LAx8$bI((K#am#bf`N6glxkOZYozJL@GX2iZYWbgd3OlXaV3wUjHCXHKn1+SQ z@2=gWrWi@DXIDELkHn6%m zTVs;v+b_O*lz49_wzqq~EG1s1e^I7+P0i=WXUT;HvK@_7?Zb{sm0M4bxfW8MnCA$< zPrX5?^_}fx!Cwd87|OGm<7J}}E@T3<-!CTBVI;(B#ThHF5oJcV-?=TfW=HPvyS~C6 zZ@_yvvoI+s&FbN?)8+dyAQ60UW^Bhugn#|y*csn`u7#f9Z9lqrAeZq08tAxI6^*{{AGFTPR~%Z!oBJI6s*8U@ z0V_j1i}16dgsrYz(I+w+BE>wQ9ya^y<&$;79UC;zgWYdntK8LGvLvw3{2k$~#H8GA zUsG)f&z8O0a$09;us_8zLD!ay_q*8~uYTNI)tpsb^$XS2sNMl@((EjJT6}Z*&4LiQ zmt!Q&c;(6!5Q5f(3|mF{_DO|qO+1k?*)^OROfFE|>7VCAX+b=x%W`4f^^qPFJadp8ftL0Dkn&@PnP1XI{9vtzALcYV7M$*$-Bimzj zkkuCC6*-&zy<4hx8D4`4+;UaE-v}0`F1?4~HZ}c+(^V!-+b5}i`q^6MJ&w;(LYf{P zpdHWTk6=<%@F7#6$EacEUuE@+W7gIu-o-17sC6o6n^IY!;m)a5J-r7ZF2&Jk2v+`< zb<+`9E|RGn0*44b#hq9VJFqE1gSzZJxpL`?9g zn}P19csAUe-X8tOTnokAv1sKstyfylHp>V3>7tx)}9pW;QdY` z-Dvh<#EUJ(i(_kWBq&!Be&x!H`2PBYAQS`J$j;wUvT8f(8rP}}+pMqqz?=&tEFQEe5yfS?&+ zeMerwqH^2*T_|sZ_Jw(oT(0s7^tvqe^MHxwm43)q>Bp~YQy_H+INc-|Oa6)lHi2qu z={IAsL_%1(T$jAfhqpsOIzG-j>iNnrDb;FXMhi|1LD@rEnS=lhD{D$g5vRsTTFpW{ z$?;`JHbK0+7R)f$T~EpXT(6|Um%6}}w5^8PX(xiSCEBP>oB@lCu+NUzt6dHVBtgF1 zYd7i-H8zJ|;kI-968Dzg;m(57Gh#wk zl~~K;X^QTjyf#9&k3W~Hoc^)i4b9>S`J}%cZksQ4flb6I;MCX^QmEW<{lR687>aMB z$-KMyymPj*Duj1lzJ6wREb=ulWr=CNw#iIw@PTZ_KK;>}+tQcLMfVMKglg~|5E^a4)3 zJd!?Z88mu5w-r4X(|*k{s*ayl3jMX{GGM~1We&f&DKwSLk7|7be<59Wtynh34cuui z`EEVCRTZSN?yC#p%8(7Qf*%VsguNz})SkQiLBqdz`kXeXjQmsg(?$ANyH%d;Iz>Kh zv3y@D^qk`P&1+^JM3^tcuww2A@wOaBnD8xqVa3&3Sio4UeYgK6$iKbBCa(9lq9H(OF@+67>4(@pA2X zYA<-~&nI0oiT_py3+$Bk@n;Ix2Gx4ywQ9cH1h#>ealLT7;p$~?bTZ3=qfpnG#nirZ zg9kd)o(4l5NkcMam7b3~HWq9<3ZWjHtUWjNJa#nK79=fZY2%cNfbV&(L5K~%$bzxR5rk7mNVgfY2{VWXWLFAhfdRp00iP<=;0hd*zLE-Kdtc z@66w{K~@I$QdQm@VNeZ0R%lB)X0}Tx7|&2gt`qva5}s4QU+vy2O`EfP%W29pu%qP~j1dO?oE_HFWoO+oZQn{#@Er^&){0;j6eK+(==| z(-36M(WonH@1gOJUWBi0XWLP$@F(`rb0e+Iv3*Ib7Uu{5LGEo&I_y~V^g9t)pT41~ z8`dy>m@nXkexCq*7O(qyne(AAjH^ZbPyY+gN&@Ifo@Dpb?TN>C%i+zxkRe^Ox)oO4 z9aAlPc2@lGX0I`lg(Tf$)V&1{?chUK0DP_u5M{+iB897mc&I*+nzYk8wH{hM;R(ht zG`#^;1O>!KPYQTA-seTka}K?Eq(xY0JF|h)?YtyLldip?%))OASb+v6+>4_8hCeSm z$Db{A=Z92GoY;A!WH*$M6ZT}J#dSYC8B^N?=jNk-$thSN;HN*)2QT>>?~W|aB7g;T z%E_gijtJi=t;){ZzMg7ysYhQ{eJKrM#}bwKt#qCp_flebltMnnxM3@qZ9&uq-=8vC z6IR)Vx^fPoOMX)7Q9%av4Br^jC~h-^=iTJFP5BMZItASw`Eu(Sv4HY%l?sAxV{rwJ zpQ*s~kzuCS2Np2k`jp%#Yl6Rah9sSq=(dkgcp6~glOYVo-MHtgDK1&gUzEj)u9g9WHYB1GzF z)s0zi4~@d?MpK*%Khi$<=t2h_z5#&-?~i8Q+*l1CYijGyF6}q02t7M~aojM+0*}ed z&_-E}Xaz-ATx}V_?j>I1wtn#i)dE2_yxuSTl5@bYK(B~BQ^8iS!k$PUglS<<{TanH zh_KKBc}t}Fv$F_&gIR{ESM9;FUG6*t$7lTu$LpIhcB{}J2L=p4FQ>+AMcDXw@Xu!Na{sb(NZGrxq@3&EByr0HZSd|}R%64D{4oeFQb0Fd|7=Zm zd9{7aZ{>qcc5naZr5CMg#)m<_{a&e-L02o~6*+$V=ltT;z6A3_<~}*Se%$Pn8&dOPvb%F=^N3C_kPpUZ=N_XIhbOaYk~UzPefN zw+{cJU4ec^f|vC@N0oDuWXo5u44$GJ-D&UlmqBF@D%MbPsePxdz86-O3|7c4FrHNW zbd3t3ZM#9TdsaH8+H&#G*^yw{a>moL2IlYd9pE>u;4y&{o%)-*b&cl%!x!cUB+0Dn zR)~@ysk|MuM7&$gDM1IDn7%O>l@-YBW6pt=S7!9h7flh6R&#=^h}`4p>MDwVQAv!E z9zUh$zAvQe{a%{3BD8V9*ZX)z9hzBqG~?=-M6;Cf=7}d8k`*KO+<8$}f*tPnY2(Q} zpI|qUB>l}hUyn@>8@^7yiZYO&`70yYf7uxwILkZUb5EbityY=aulCg!cIjWFD8H5` zajp;wE2S>aYnBK?qcv32sbKF|P8B|i{g=V>B}dy(d)|{q1f98?rgbowwLDV@OnCS8 zhBzjHJt{Me2A;&)CV^y)m4ucvjX4Coat+_$gz*OdAd=H)!YOD6&|y|R0?nseJThIw zUkk$qXfi|i_SQ&7zEW?DpfG~mUgo=R-?VOeiL`dkH`S%iz1A~M5{R6sQn|LI^{t>j z1^hkYU6S5;lUdj@2!G=oPK3GRR;U)TFTOBXJ^Xuc#G(Ty0poa!+1fgNZ4LM^STMAA zDiS}hgE9-lu83P>soE>LOKAqGhXL307q*>q-;ghN;$4d|MrRp5TJJ@*6 zm4l|~YdmZ}@ruq}_PKOipt0%h!6h^OC$4?GBr@3q`zA??c-*%C;V;+p$eN-b`D~G# zP`9?=c0IOd`-i_4wxk4KAF6u!l3|L9)Vp76hIBn+8PMGEon4`Z<+D$T)^1*5i*~t(_6euP{FE^U~<%XnQ*t_8!G>;}x~h562k3DMJz{xwtYB zdh8^xu7UXf``DTSJ@$>@{5J9A;Y$UpVH?TgI|C7W{a5<+MoeER6)mvy2ls^#Pt{K< zvyGm+Qni>`cF%iljyXKJ?Rgwo>k*Smc2wh0*S8pM-_nxc7j7!35Co_biOQe*wNDJvFTYOd6Z%EtqH%XBP}>4$)CBfcf4_jK=TuS0pf9&gjzu3lIl3|KRBi>p2d=Tnu@*Pg&C9pkM&p_hF(jzdkf ztl(k7@C_$T17q52joBv~sAFPGCGvxTO3BB>vj)BgcRrEB#>%JW0rs@NU%tIA0W)=| zp79ldML1aEPj$y;3WOx{Hm#j96K3ha zkOXrlEACWRXI-F{AqpZw{47 zu6*3*EqTF~9#RY;iobi<7^jgKYRR*e*SOr_w$#1k;0CtxgSBk%j|i+XjR;S*DkL>! zO-q)oyuUOsrnzLjWVcW$!3A%w{5VyOhKFtU@sE^8)`Sd{t{S(Y=x)EkBcX5*|N(Yum~CR5J}8t5<1E8F8m zDCkABYnr^^cBZeG}`9YrqF zKn(>4iql}LPF&`n1)()(=Y>4X(gN~kc?VWW$)zFOl3h+r&s)FN>LpR1QG93fS8<%$ zw|x`*R`v*Haf{erI>?DG%k!nlr>uAG*7C>PCf38LM2O`8!RnDOFOiw-Sm?rwiPZ=F zC?i_ff%Zoc_%dTF>iON5i99Tre)gLUKg`=NPRo+1rA@2(3$}fc2@;>7&HG2NkQ0yI zSM0$<2@*!ZJsf0s`cJ>mA3Q|+J;vOoK+wdr0*@E|=PBkGp%WtqW=4c0&lN ztpKLy`Cn_rv9pY_Dbx~FPl+v{z6AZY1bAq5r_h&IfI6~6^rU~h;JY>qFn&ry=?T(@ibn?kMDAuT zpE2M1Bmyt`((0-m_FmjhaPfsn+s&dUGEX+hE$VOfSj1o42gFOvI^+4q+=zQ6^&7ht zyqfs5YR?oc>XqWUbyEq7PZvEZrUm_`PhH$M*c4N*}NrAJT)5m&`wJ5x3J_ z6ufkTs7pjH`mP!;yAOd80vdcJiAmU_pXkZSZ7%eFrY*$q;&cu!Xlf8>1;p;W9 zupJs&vhehVTR{%s%-i~X?Tw()1#Q+EFiW=O%&$tGqbusGD3Bb}CV1R{=S zOLHd0&!xXqQFSzg?sIi5b;o(!TpfYAje591Yx? zB5oO!8~O7B#a$%mX_S~Pdr+6mJ^2ZxFS%&OJK2jN2k1vZtQiybQF=wBI|Js#rrqz? zkAgn{%I_j0$ZNh9f-j3WlHvGZhc%Ie%N1UX7hu00UKTG(1#9TD(g9OK!^`FyLs!Gz z?8I!;!|m~;xJ(k+G75mwHN?*`lA4e)ezQs2jU!*hkhgRC8`B=V52SRLGC0zW@`Xmh z>C{DH2euggSC*KQH9jD6W`$&k^lNvA7d;0L-i3p)<~^J%vRF=b4j`IlCfG-W_5ZP@ z0>VEFo6-V1OrM*CK-uQ5W1AoH^TrUq zeI8_7_7vF`#2m!h@NSszt@$IiAo6@CLUS~q*sEj{l@u@uwj`%FhX`gdpx9@kAB~sVQ|+evkG{xIFS+{3fO7V@#m5f!uYK zLZ@zvto!+E-j~cE2!gyN0`2t1)j60|(Ep!O;qGw+=IJrYbI97~43qVB+i!0)<};lFXL zM#;2F4+s7}R2*X;+_$)6d%im`Ta?(;n$VS*{2)FnB!p|TIYy&R$yfXR;PvCTy&qOz z-pniv$R!fLPnHg~lj1}AcqP})LZ=9a;iIq^gTyd+0kV{To$4@dnA0dqZ{QAN?7eoobmKujksh`1W zjTR3lcT4Lk>H;8NTdXAEufBXV$*cRW=kwD^CUHZmh-FJtuGZ8}VHZ`mxdfg{-*2v6 z-pZyjbU|NlJsE~9pHb;_7PrTQz~ri@e+CL7GLZLMI+2yOcg z`?kT-XkRA6%vsx5%W6Y?7TIDIxhl7m{^?!1%veExcvfinbU^5funN)Gh-+-j7VgYwr^X>!y=czf{crrsz1?Yz#9}nqhgyk$Z2$v zCB%WdJo4up*f4nwoQh-tq>Bo_=$BXKZM?w|?#!^Hl1Xo0Z>f6DYhY6>kI5`231)SL z(UjYV)$rmtrf1MvEC@l1Roj`p&cOT`8ueajn%j=1Jl3p+8oK}cH~yBlTwo$k)8pe> z`xjesfpq2BQ=cDCTx1zO{hm40UNgUTW3WoKp4IME{AI)PwAR}@2}^okn_3>p1XYG= z#vQO-am}*fW%m#n;gd<*;6F%X8yKtpbh~F(QK;mF>kBr614Hy!b(7OWaW`J{cFmYQ z8x@qif**!%OC`r>n28%|)W3g#-M&^Vwlyyjg{Xxc!@C&TcVao=nj#~xg=h0Yx^!5z z%L;!b`H9>vZ4ol&$m^tP9ig4JE+)>56EeG!Xk{zc-D#&zQ@1RA zXQkY^IT7t+?%TlV(T9x5e}O(Z#dR@QnzU=&N}y2uSzz*o*=}#;-A^ayf=9mC+4X_Z zhwRv<8FHBQ?o(caBj@iW4&)Nb6ojD`jiFegfvL+5zS&v3lKUMm#qv`4yxNz+k+5%LFY~nhyZA^sd z0T-%WBNG5~wz+ zGYs>>M-|`8$w6}jo3ZTU4ShKl@cO%l2bQkAT+*pvZRN~Hy^=nm=u;G6&4NCEbmjJt z@|S|{!(a-sfR`OlCOM#ps9CyHZ7NKvqjY1gy_~q^fOah7L**(hq}fg7irr2eiqY<} zYZ>bdBMShbl4$TNkp*gZZqx#?K$)X6Kh{5{eyG73zS5F7gpZjCxmBdCua4Q3gnp>? zr8Y%Yn6)qs*&*F@{eXmySyW=n6Tl2X;t&f@%BkG10Ea=JOGo@}?J`qBmS4jvJx#1r z=RSikfRIxZ64GC1z@C_^Yo;S{SY~NWZ~2TcD^yu`v}2JNi+W`BMmhY}pdSd;zja2w zIxS?UECv{0W{my|<(1!hYsq^wF??c|k?VuzH9u?XD+i1#9~7*4Cb0ZTec)*b{mqX^ z36{fMRvt)GUIF1YR5pt)kODL#8f{MZJ!|9nWeQTAiP9xgv^eKmonCh)k@z7$&|4k) z-r&W!8+9bIbdBoJb*AzJ1f{6=!wW0k1&2sDE0h*W8PGD2PFRTt1$8t{o6GFumzJq^ z9@!4Hoj$C25P!2lbw4hSD2vDv(HcYqU|lC{mEjrpSeMa2OxCeyZu%^5B;Q8~>zuk_ zJ$Pf?^9&Cduf~s@Y)7;ssQ{SNbOLL1HO$j-B2%-WmmEfcXxU<|!a3Da`y8S#YyE7< ztA-Yr0ma=g8qfoursZCqX?nlajty?UE|n_R)UK$0zdIT2rM7Pp0Pk|QLtf308DhW`0%o`@n+}9;`3wy0V2qW}ou z3C{ce;5%wTT?9^-dN{bd$(fy>zD*!BWHgvKG&y_ z{10DArGiCeyWQb%sk+iW?s31wz&We0){=CCZQ2x>ErRqBL0^QKp+JnB^EwD2Z%vFa z>WqLS(fR}7KtO?4{JGJOK+YTf=kANH(A$iaXMcLNwZ44yb9q6LDQzG8Hi^*9(w1ZV z2{t2p!8@tC3ydYS-o?Yt39V<6dtn@?$FHPYSR0g0>vJNIrvOfaT;ghC_Rsr1M=TkJ zSx?6&K~x|9zBBG4a!~!Hw_oe%y?Y#;1GW0FtSuRg2>PJvfy7gY4#XbOmnO_Rc)46S zaj#WQLgnia#OoxLT_M&!$r!&~I$!yy=^qa{bB-bW^h-+k?%90Ju7`D^LOVH;U2|9tuJy|C&e<_de^Mi<~*fOa7pC*@N4Bi^|I(Hf*|`rdc8=b9R&hv zai5x;U`)}nspC86g?lhx@X)1?g*A!K8&)BW$O~8zyi>Sr-dey<<#Ye;(9` zXXhSuKQjsdqyp0QKd$>sZL4=(AcnQxy64Qq&{zq?V z-`m{kL>}2BX1|i3k30>B>{d?ty1<1~d34VB58bwj4nI}+lD%hox=XoD-)EXm|EZT( z8ur=Ymd4d9r8=%bb97uvd08JQwHqV{vbIypBG26P<~}Az7OD*?`UCd&so9mq!3i<% zR)avNr)D$klcbpY#Me9*n*UT8{RN~)RHNv8%>j4B>;|_8g8$(O~}A(SR0XkVcizl4&Nqhzi?z@qDPBiuXm&GyLlpB zn?WQf%U6KyrSh7>e!w9OfcPdY{6(mtXTx(-ZcuNpQfv1!iG%OhMX=#QT9a~D8kGVu zp`B|9n9gM$PPyy+Y}ZGx)rZ;xJrLpNj=o=+ z?CoF%>E|dHd|!xqscm<>b{*+F`EVetbh>rT-9q-D@X&6cv=9$#8#VGoYYao7xbRbd)f7O*fdm#v++ws7#ksfa0Wv^d&A6tnZ6Dd2uq0eyaWiN;gTlk5MNkz=& zUMZ=suS4a48@QR3`o{DAhe{*FjCo;~Y{eMl*6j!Wb+SJAddsC$lOwd11Dja&++OKm z66DSfAL3)N3fH0J0@%Srqc^aBe3+l#n)S(aXy zef=PSKZgfK|8YqmT%SP^0@+SnVLPPq1^D@>XIylxQnnFa)I zW*-dCe#~JgB)a{)(#CC158vzQLK-B$aA^yzr~!^AW470Ee3UtNBqp+p+($ipoHDcT zeYu94VUqNIa#$xs##^=jz+(K7@1N%cdc(Sdzet=t@{w6zJ~W*= z`Xb!>*o#9dSvD-&LXq@fQmIAB0}UpXomb70-``RxFR{U;iL*rRcCzZVyKQ#2QK{a4!!vD^O?6G3>OhxymTf7jAb zg$bsEvn2Qabty5oz|Zo|XYtaUeo*<9La(FLtZcpu-mHBk5s)~&#w zOY-m!+cj8^-}IH$LAcz(p24RGJ(a#I{X-p8n-gqDJ@g5~Z{eB&aXvpB{z9{aaD zqXWHD`wHH`pSar{# zhwYmKyugYawRuU8crj}Mbm~3x;g?VU?F%EDI?tKsz(*o~KD}AY!U(|kx?{LH(-ek{ zctaZ2=#`b}<6d2kChRva&Vt9ORvVxYQbPa_3A^Ua&DxlVc=B9Q7o{9y+rP41-hNwU zq^5W+$rPk=as6E@jL!I<>t%~);PHf&28n-w{Z+TqqrF5*j6g@jm{RliSgvHDM9N;r zxvz}EM2K$%!W+tEWQ$_LgAVGEm7;x|MdVUGt!`56`r>!@C+{%UJ9=yH{U=ku1M;7B zg;fvqi~2fJexm)2`~;z*^(>0?i}@AQ2Px|?nErhdOq1pswhx9a;^?7{@b!P@$bdlnun!T+P|c2u1$C7RzPvJ1>RUg8bH+Z}@dUE3 z0&>o>`O9{3Mlt z3}-!W{>NQUC1_3bJ-=08xLKuUNFA4PX|0o9K;&u++iH}t8%X3Y{P6gVPrlN$I^0Y+Lo zPx(t3%9ac5#v%taVT*LDl{Z-u;Pa2teXvc1OhC)(9UWC2Y|Wgr0A(B9_Z$uwM@b{? zfA$waz*qsei4nExhH?_ItESxJy^d2kO(xb5w9YaxKmIFi26*GREFBiYN5#DHmvyaV zrg=xNEC+h%>|F?2@|eoABar-!gf`ESM%wutDj3I`kC!&LFasdqn;cT-tHfil9GCgG z@((U;TuS_iD}Z`qIaJ=$=0vGqpL-l-)878~MNjcw1PuyJj(;|lF=tK$ojv=L@#1%(Hq>(P>#9n3$1LRu8^X$a1(~hF*Auc7#JU|7ZGrj1x=cWTXVW zO(Ou6HS1C9$U3&{$~CiP9V0}*rC@K!grt{@yc4dlKPn?U$UB|F3fa8ve;>oJlwn97 z^M|9H)}px}-1`GoD=XnUqM8Ht9tYQi#!7Zt%9QeQOJV3;?)~As?&mb5Jo|sAE0F|1 zyWB6MP67cXLGcpNBs3w@oA{SZ~iY2WeZCCYgpAxzhCgbNE8_BLJC0upPr$Bo>~_2^faN- zK_VsIu@hki!&)IlPow1fY@(pn@2h?S^i{BOHZTeUegNd)N(SL)>{(pz{3(Mq^b@q5 z<85M5EZE_o1;XqTep>SZvl?Q2jF%muyO*Jc_OG_ROv2!*rWSgJhss&yjdTAYfe&sY zZeEZ;3Goy50(W?tbEyrHB+1L}i@PM@&Jn>|j5nlo!3x;qC&%^l8=F`6)(Kblst&%psA5Y+!gROZer+hzca? zVtO8YrNyKiEx%#NC;+~cI|_xwinGOFNrAd>t7v)S2C-=2QWtV4@oE8a>F)d=T<-|= z!=0<;nj5E!uZp`bw`tzZs&i&!BW01|GU;IDMpLPX5l`At6!d5NE{sz>7~qa@54ay{ z@O@0Hwb|V;Nf>w>0uV|!`y%JTh=R5qtrzy+;bScX>L%@!MrLpCkj!a)?~;wcds}&P zIZAriF)X1d0dJzNUyj>4Y0U<4p;}LNwfTHF5OpIiY?S*z1rw+GQ$LZ}-fz+d1VTbA z5KO}sL(CVtTY$OEZ)*9Xm1{)4Yv7FA`-fU+p`OGWldT=OHtF84-AmwfF+Xs{dUrv~ z#){mS;xE`=p*#ym;Y01|!G5`= z4=r3OSbi_9%%m=Utd~)utqp&IxioWUBhgdWEJK0=&nV4=GF0vK69QWzx8o3w_N9Ol z`!7jCL%yZgKHX0v7I$o#yMPNHs@-T7{6p2X0L2Tr^cXd0(~PN8OJ6<~O<;?(%Ut&z z3chBMZ;VP0cXMgb`p`bU@Jd%kET$^SX&0S~+*!&nex3LM8dHwt-;i z+yK$4Pum}I;-9A-8}9v7-kX=qO+s(Pv_K!oqn9$ZKFEzBpH9Be%it7_geMBO$(yOm z_uVP#vVg~S#gi2zE9#lNdoOxHDAY)yr|jgVW6Flv#g``5S|F_>xGDWqKtSe~tgY!P zpt}!B4#IwB1~BGkKYTiiq4fWWVO3WCx{@LM=bBvTPR=n8VEE?-Y98;qzqgT>0Y zzMu7B9Ba?BdLVD4bh+-<=PGsKYd8eCo6#4aSOXyC6YU3G;(+Y^#-Ygqp{Z>G?a1zt zL0EthdQ2fVaxZ-J(*;aYjezWhpjK=v=F;b(p8LP9O0CdBuJDo@fOC|oF^qzdy87og zO%`=_WJz`CWG>pY0>YPyE136=ae6Z=1!q;T;F|`gEKAmscrtz`qo&`w)~6d>j}J&a ze|h4w9oM%hDVw1!bnf+t<}fAk8A+r_*~JLt$ia%p>3%`5a{)2Y_MF|>yWtQDNzGQ39@V+$J1sg4-{ye|_u7KTh4q_L z_$Ppc#VTXRSobMU=@o8VKDy1(lr(yT6twj#YgO~@t4_U=CnKz|pL^&0t$Fh&xywQL zcEc1`Ar-Iirn#&41yry9xv?$qljpw&o|l?D$7-D{OUqj{n?ryZY%) z{m&D_ZI-3kHm$RubD^J`9M3YM#iM*xzCY$7-?&Oq^8ZVIZ#TYwa!K(V|B#xscXUoW z!0yT%24G@VT~?acN)i@(OrzvpFdhw4LgDo*3>?uM&Ts1~J>z4NZraL!+7|*A8uClS}@ z;r@NIuc<`2ZX9M4(+HB%yAeaRO7)Hm9pq-6ps6%5){EE7g%oddntONWR<(n2P0x=d z4rK42WhT|cWcAZn`0q@jh-sTem?sLCtIzv&znEC^%DK`u>#xua*VAUs-h8I`V;XQW zn24Y`xh1$15XR zoJgP$SibnER6_wuRjDFO=OKC9(H)lVJ?(Bx8tv%rJ$^gfw97|(8hR%FP!i0l_JS#@?8UXN>>!=+YdPamSKTr(9AWki&QwaD@z; z;c{a=u0DP(YPs0?7t`j50Ar%>>P@qR<>2Or4EaqyFEe($aAsbN0;~KIdF&w4c}Kk` z*QMwe5NDX=jW0r~95N%>scvqf!-HU00cQa$)e+P6xuF9 zWaLg{u-w^v%bIbc|IhAcgriZTT{mUK_2fgo!vg<7Q<7tk2tRWWhG(hI%OJR{&5sD$ zYkA=UA%k2gPdJvcJ?%Ku)A{dV#UDE17d)wk79T83dn#hpYLH=cX)>!K$I^UYpfd3B zqo5X#4xA??Wu1G(JX2&Z+5UM5DDc6II3hm^-E2ZyOvu{xG@*1rpay`rEE|_l(6Qetc*BL7Sb;M6(Y72 znp+dehEoZ@a=0Y4$V{K&%br3UDoiXhnK2;kL;8DX zb|AE%gs_ZhRwe+UXLFh~?mBp)IqLJvSn0lqDO+`2xU}%JZEMPPMf2g z@^5hAR+$bE!WemSCkFadr6?e`41pUwu{jlBfIbcEkF~EY2g7!fM)+(sT@W{|0T~$? zOezX|TN}lxVcFFt4D}9b*e3pQrcGLO_j8h@x#q8xdkv=!9$akL3RFBZF}|xP64BK? z@U<){r$j7ArhdN}2Z!Iv1O6388DjYPvu50*hK_;P zfYg&${b|p1 zWV@R9k5lO7uZMn}<3uw4KmujhXk3@^)WlkINb_fpj+$cbii=u3TrqM-<{a+RH|*q& zlql-S3wgP-m?3Yq-``mNz;#AVhS;vv&&w2t)f|UDYf>e3&o2j-6dP>S1M-%zDe1!d zRONpMXlvVp$Bd2#Ds3YXjz0hoqMAq4UhJ1gKWgXIMWj62uG_ z)5kw_lN7odoi%L9j$m!Bu=j9vP$j$K*b3T>;lAis*_=Xbf(>+c zG#Z?MVi6Y*G+>Oj@AXPQoKZlkl*xJ!5D{BhPybQrQHbj0C{BQn9c1Yet$!nCN*T1R zuhne0zJg@(dbIc>3RqONBg1!vC6Q=cI^*m0X0}c%eb;6I!wvIZ`r=#7Kcv{d0-)2T zikg*}e%B3{O10K*d0sb^6-J|b9u_R1ApO2nRNs(BpA78p!Dnq#PVTinYx! z8^veIbBmxP5G>Nj2JtB;j8+V?>7Ov<>|vl;KG^rrIP~=V^P~lz)s_tU*X!Qf0daQ$ z*eH|~(THfWXDtRZ1(lJ)ZK^Bv8@5=LhNVpszU@Z~WEln8OZXwE3YI^mXmZ0z?0pI# zb_h^j@f{CA98{wL)@H%X8#Zjg*Z2Y%Su47LzHXlp?ck&BqgE0{FV)fP~Hmm-womaDVR$yM%VRw@Zxsx8S|6O(zhH6uyL{Q$cqY8dzZgc-yedw`kR`C|AEA zwbmx70({DFZYT{az~NV2xtvmooRd)Yd>(q$N2NJ8Uv5i~MbMt7T2-U%zIx&~*b*h_ zmg42~)s*&qLB@;L#)dwrXU#_=*=!4^MzaShLDm8KXHOwUbU&d)M2cbnf5{UnB^tB% zt>k-mBAPW2$iZeB1Hbj*8_1tGzH-|s#>d!e=v)L|){jp^j$dY-gxI~jrZXMlUeZ4yl0w6N$+L*c_r{He}Z*-=0Sqn{e>!}>mz&-=> zdq&o`gSkvBD)w%wTDgiR?#6zDe%dIDsX7 zaJ=*y`J)pCpWJ2R4rFxrg3g_&g;@wLwg^m@Fk@;Z+smgK^GZ^oUc;PJ9PdeSxxOWXp_ad zZ7a0BrafbGAZ1{fkTM`vQ2&G-RwM;6E29CwP?It{v!jSHZ~gTrA;nA_mxI_TyIM+?9V!o4FE|)_@aR!pWSVUbC%oy%X8eUPqJ&L%*2C(L3Y{_} z*f-P=&sTEDm67vM-uu&R?w4U}8^~(lkxXey4_jjgB;^3d8tVsf$D5t21S!VR1jE>Y z{W2|cJVRV3%p0J!uUEvhOk@!;bGyr3PFLF#P_}mhmp$>3Xqy?}d2d z?tJvim%G2~X#Ep^U>`ky^=(zlCPB!+9GyiGP&Dk6I7;epUgdz0e$#V;NR0j+2mVWJ zax}5&w>_ASGHMnr=g{}dk@d@;jQ5ak+PiLgAx@RLr@+nD3IZo;(m*cDw;q2C;*o@40&%qDfn4iBH9~H z{~<{|QG?ycWU2nI?1xm>is}JxAag0=e);->MKpE#KSVi6labtvWSx9Jk|s&)*JnL% zo-QUgcep0fNECYli8)V)eu1&?CiuR34B>oU2JOoP(gAmkeq9Z@ZU0cRVceoYG{nDx ze_gtHgcX~A@3C1~dWDhef5>;ZIV4p?DYwvm=?s8RO$2ADOS_uGkq9_AtOS~&;YAXg z3FZ9--iS{iz*j*Hs-}3-%h$sjs#h)iaE-L=8C{dU)bonM$Fz|(bVT5qTjHu`UI9`} zR3@+0W8IgP4|!;Xe{&DlkLTKTK7$~Fc#`HGymv)hpU$Fq>dqM`VAmIE&7XD4od`DZ zZi_&`VPa%iaQkn5RV-#TdboV-Xa{=bsc2*tM(2)xesYJ_EN(G9W5vfiVKbF$G^wRZm>3Tp$ML22b15 zfpcf3jo4vl0as~K%pEYZ$M40waH5fO1(I>#K11+Hv0)pjQgPu2OU_>adgg*tqRX)`2rjfIF40dLPkz}u5SB6dwxh{*HvO?zogIjMmX zqw=_l{6)yGxA2*sQfLQC;QK#>t9hPopZRbAKdur0T>kTf;H++5 z0+*bXKzpzDC&oe%d_C?@=w{#p;E5XYx$6DS<3deRJ+v{S6&D>V_UL(SFU`NX8KT#o ztZ6D+v3WBC?MlA*$o0r{B>tm^&k27S`q<g}GawRh^d-)14Um6OPlAPB^|t-@x2Bl5_EEuXp=xYNcJH8_(_vl#j}4usz?Ga{To9 z7t-q%uIw&^xn^u-@j85E*#a>z&HLza4!6*}w zP!W!hS_G#7A|clBxeM~>)y${iRlQ+-b)x5C8Ppa`!;kwuN3=Sl|1WO`sqW zBap$QI}gN$d~dTMT3d}(J`&QR+y^Zh{Kkq04s3UwcL*KMMmGAI0-%Zr2aTUU+{0m$ z;%Rinhsq#%6V0Zd@+dhVAmL|V<_Z2~F;Q-({j>v(t8@vdbVWK($#A8VZa4a7PMrg~ zIafGW^7y@^e$kU+G9{3lNpy(4Y;{U-LgrN2lR~V~VQ}>A-7*7z@vmk81Siu4NX5q* zc>{@5Nu1j`mis_8r{m+4PX-MmXze%aJ2SItt!o635(juY$y<;LCT+rqHLg6;XkY>W zY)U!uBUc9Xc=Qu|uM#q;{b?MSZFd?0jhLEDP(d{kTVyz7egk?aqF%rGhCGuTdZkMz z;dl`B-)FeGD_fHiQVfFQ;s1q&NY?ZIkA+D68HmPfHq(>x=>Y+GJ@E%2vBUpt?p=s< zCbwYoAY`Ojv`^=5vwWpMT&^coih=8HZ-;u<0Q-JXcMs#jJdpH;8?_&#k9qE{g1Am7 zlocfmwL*qd4mt4@i0E%?Ffr2(+!*=G>{2-=jt&7$y_75;{*3_LJbuiRy`qu06cR_m zK>z(m_NHM~H+CmSFk&b8EIv-#!<6yGSxC5ALalKt+z+m%kU$Mp6SS%zy>Hi)QmXTf zJ~*#h{XB0FD-1?`BLa19!qScLORQ+v3N?-{(#2&Wl^hBLymqgM3|)d5cZS_PX*Zev zsryf1YxVHnCK^aCxw-#@Lk;@(rs7jV_&e_=G(qAGC%w7%ZiP_u&$HmSmL5`IqR!y; ztePm9gWX?>#Ti&GdlRZ=gcR^}VeKvRt_ExkxTO*WCqi8#b1cbl$CY6B9DNH0FK-)& zIdE+Vp6LdErFQ0CI)PiFk>1sOmu2iiDx1)RW577j9z?O_y-A7SKQjC)dl5iNzizbl zlW2y0P}*??tMH6jfYDjr)j(KUGSu`EGyx%b;oq`LA44p_Wj|!c8Qx4>^4M#FJt+lR zUUfxH`(FnxU}O>hNTFf7XBd)TQ|Mg{sOK098$)|8=R%4!wJ}>7NMi1SrNWCpo7;DK z5-2sX!vZTDg#1UW8vxy5EGmHXeq(O9uB~RXkT}^nLSlucRsszRNZ8`HuEw2xL{m!h zbnXHS$kBac1GqZQ^vb_e59sZJC7M%yd89sCEG;Wbab`T~Fiz`4qo3Al0zuTjpPjw= zL)_S+7pd6x0J>JhEFgT-2FjByyc<*X*!$tlRuTpvEcy>JwZ3k&vwqf;qWrLxpqlA@ zr-GnAeYR9vO3lcIAa&{ZXpPHo-whN09l(z-fd(c#ZxV{atVr}cYD%$Yz%O)3PG)6- zI%3MVFNh_mOs;a6w8S%&Nzx<^ly5UD?a)C7l*Jr|bi4l4q}wQ9 zks)@xM*bkBy2y4~Ia`WcF{QTVDxso@!+t5(*y%%pfRk~?3jKOpBtbT`Y0c(M=gr_P zQj;{!XI`E^T5s;?#5~mH-WA;y-Q6&E`_SiI6^dt&JL1`#)SSv(dlA0no9Q;F4*BDQ zI-V%)?A)B$^Q2e3w`EmF+Ix%W6vdxz;ELF2IX*nYq?D>zHEe|&I&^FlM*)aG5(HgP zfZsB)OwW;9{@g1SLs;5?10ZO${ig%>e$IQ|rIjq6Ikg$Z{gia znNu&?-I*J_Dw)FqXMTR=GhrFYZm3f6924|#@My-6eQ(c z#Br+S!|GaqXf!E-t?Fy6A10zXXZ7{EU6hc22Mu!}sIZRn7OVxF$xjM(W^Ue5wrV4J ztd^3UH}w5Ifu1{L4%v>LxLAYsgXRz>p83W47%X2kv-V;n{yE=QNF4Wmw8QE@oi04g z)s8RPMsu4WO~?xctelYoT~Egq9y}}uo0*11x2*Dj!)6$Z>qS!*xsO%#|Bf~G%qcty zYe4<2oU-Qii1t5T?e4dzW4!m`e#TJz%H-L!DG|H)zDHEU$`N$F8n+v29lX3{6zsMd zLtSY%-_JJog+89}9x$g`8RujiJCusX@`XAS4J%reSawg3`!xli{E_Q>+b{h4X8Zt9 z^;n#t`rV}X<{F@&F3S**%9U8PWqyVGDa^Uu&JtNW^lJEmBD7;|0*OlS9d=5I=o?nK zjDaUR`+HEEPh5-Gc}X>IjuOqx8mr3IQDGP{{urRNgB*}alHpFY>S|Pw7rOfNsf9>t zkb@EcRBxTNj~bydp@uO}v$3Y?j@wQf5uoa|BKHP9#M2@x`(3a=C5%jyg&yH6$?BJ zgvm-F0X%frNBcJogY4C-A?J2R ztoK_yA~o2d*l_s)a41fu{MMQTntvWTi!T;=S*UxtKD1eb{sZ)3Gn=hAS>4nnp@0$V z%4vJ)B#=0=*Xk>?Nz7uIY5_=9XZub5*!_+?{V2m-xz=R~PwUXEn*d4FgDPY;Hm~N8 zF!bCzH%me*g3}Zepl9GR&^w<0A}U1B0K9;k%|=O(jAT{E*jj>o)wM!DG?R1kLgz`UNNR{@wUIyz_b3WI zgYUiD+bnHz3-D}@q0j<{dv=UP#P+2W3P%Q4ZrotEPDbTf+DQY{NTRsh z)}sEEvFPQW!0`(cO)e9e_@;rGGB;1cHcd9pNIdwh%&n9#D_(Ysil>);^>ZO2%OTVY zxZyr~nlcDA7d)XzfUno+mbZ{rCG1Ijh0*WJWnc=bGo#L(6n>n}Z?-0zD`Vw%nU+~b zd-eEsgGNm?@Kc43th{9d=$}_?07~($Ef6D-SK$h<7djd zk4PJ0Sd~3_Qv$CPgcD3aBMxW{%F|F4)g#YaP-r&${&G*mq4LGDlt3s%jd*d@~Tqm_EbDTqH&^_M+(Z1J63Y z1D#*YQn5{b<{!Xo9HO#6gf>6P6XpXp&wEj8`CvHeNYh+BEA|WKMp-6=FJLdV@q;4g z%}-tOr0oE}j||F51mE|bW@vqgGdnz}1k{L|0d20|8b@L@K`?<)UAThP-DgvR+?n2v z>U?Kc4CLjjfQ9kx%$TMN0^>|L_^yoI5;IKbg)L4z4=6A4?TDW`{fU{2i8$(LhF~@`!b|a_KPyQ7 z>5l;o=x*NKe|#J!ZJR(*hJXH9oL5BI_sU~3GK|BNi=%{Rzqvh($+G~G*0TwLS%RAW zFPi@Jq?%lRtZN`$TJ|iJn@~Ib-%{ZJw;ewsdI{inth@nu`aMFWA^F4+#Ii6cB1wM# zxlkqm5F$7y9_QS=sqeD3!3|y6$AlAWPn1#%Hx2!{PI=LYpfA5c*=hsY~Vc> zMYMWw;9vS|D8~vw8%;X!`Qi50`+W%Ki?@_#0JFJW&4A9gBw=?QE5CWFM|4*I^&?R6 zM-koc&2Cph^NrvIAb`_*Ixi7J`273E?)uuiEjIB^S{xiqpSO-8f&(S~Hw0EKs3`$iOFDs%J6qGuPB5V?#-@{KkmC zJyAbM&LjP&V633gP1y(76*2kIKOQ2b$3nRoRE($cejWUO zAapzwQALPPDMo+a^|u@A|ALn(&>H^?Hu&>d0l+2#ex!uYYB@&96RP(9A3SFN7mxba zTyg)qj^FBCy!Qy8)}`R8TPS4{V2ONM@KXu#baidG%r(hoKWQKi74}=RA;1NID`)&w zP2uCmY97FLNM}v(77-Jw&z;?sK+MKRxPdiGXXZ~+AQ%_Aa_iNF!;c)rK<#m0kw8(; z+zY(T2Q5rXt!kh(+r^J}8nc^^0C1)ifRK2+BTrabH%tr(z)MsFgNbG{p>$WapTF5K?JfeZkT;!uvjG%;{T6ia(i%0v`J;4b|1B7(RQf8J z@Eh0~zluL=j#`#zeAFz>nm_hBC~TAY-1?~=!p!vp_Q)<%`X0jUV5+_8c!~*Ig(~m* z!9!v1Xvhw|bm|W)sa;T=%QKH8$A%C?jW<*KADfn_tJZt&m|O zabu@f<33&iwr?~Wtne&T=R6Vo^2Za1+o{1M?@`~&swMN^=1ff{<*si65AWCj)i6u+ zRO>#zDoJb?b>zr*t2Q8+bkM^{!w;VY|bm}G!$`mFpEfUaVi`NT`{nfv;U z+dE|gcrvenS^MC5;#-WI7aJB|g_dEow)-gxsN02qPVxCHCN2G7@AmtUZl(^@4#wR6 zT@K|&_%8i$9-L}St1MzZp&d^br3T=)nkY1b<$@FYc-qcw8xgCWY=YJZvrI3lW|MU*H#wB|qxm4ZH$YFjP zTfQ$`tvWv9f7K?t>f62@Ws6sIkUL)3>6Bd>dw+YeVV!YA{=Q-(pOz!(`-|Q|yDY4Z zp0NS^haT%`ainG=JNdyxIU_Dt0@98>xBI)W@h(^UubkGrFcI@M3-%>5{Z`!0bHcw} zF_-y%^SW2OU3`Gt^5*5>ESfWq7> z8}sVz@r}br$-Sblu-B@SHqOn}Y-e=7b$L4?&GFkoG-Ik_k2R2|>+H)4o-~M=+5m4c zr7fz`7tPU=6q7+@V>fzCG~(bldg|}(W_n*Dc4uB6E3ql1`DRCv=rgtY-m3T5K%jhr z40V+!Amdf-QjWuJmGExfJR%tt#KnD0QGxG#A7|dGQ2wfRT+}tn1_X^iEWviwAR=Uc6r0_h33|EL;`a0O96CxtaS<<7gSuL`zF31?-=vCm ztDT~$yC0&iqRM(V5vP#k&?%ag0zz`dBO6M>`{!4CXm+h=pB^7jZ%baQce$pJKjH8o zc&qQN16@}D)pt)!7)N>3tBZ%_LxN(%!*d#4N$&y*ow)e|zI7}T1@kDMF*OLe-+y{p z$@Njlf)dHho|VNU|MC|92k@jO>!K5BOYakqi)Y1>!eU6a7am9Pnw#-tCl*`m>4NiJ z_F);QxuRk->t0d{&$(ffi_uo2jsrjpNb+WGK z^KP6-P&#_{`^y{DEt+fGfS*L?TPre>GM%MS*Ph2z*x~7#-IJl^)3l={(hnZXcDj@$ z^fsnB(FrYG3%tGEJc_?Ecyd84)NHd@xB)yaxjB*Tg4gj#7whpu;yb`m!x_LX3GOGs=K$>&@B;$^y3u%n^r-D(u)9Z*E2LqC)Rw8$>>ofRr>wdXh z_tSwodF({7Jl3Xm$_Vwbtv-OI!Tr<(k$h_NbN?K`d<@&VCFmhjyHndA6%<@*+SpV* zuC0~nq=TnQtd5bQ6VWF+?TZ`OBM0&YbB)o}x~F4IT-7y{K6}A_q`$*v zenrFb;=8{7W;e>K6#ZBzGLWaetF-OL(zTvvA*XRp(5@$d(TxL3e44zQd7p!k1u@QD zufkQuzgE4Bzws>Lp@OQvc3LJmU;?2ZlU5E<*jh9BW%;dBw?$p3e~5Ut_^$p`#Xm~4 zo17wwx~WT7DWv!7*b4W#=jGvDGkt{jaitTXMIH~glJT4X?{C|tp$pXMPQx~`9K zJ7nSH4>g}p8FyDb!!?ST#wOARdYYKcX0v4!ru$CrqNU(zHN|gTqfZ)%5cJ{?&&*8n zCP4BWIgpk!2ajGX^=W1%`N=ucS3bpizV8;p!3$0C9v_h3Vq`B1YIN6(32QopA0b`A zHIzmAQ8PylyEohvv)Zc{ehu0QP;x`ipIhe!_?&lBjs7s|e63m+iofdg-T7-=KX%C0 zIXDqMrD3%RNlRM~wga?EimTglLQD8N(My0qnDUumroyQ$OvO(9NK5DE<3sV|-(8|A z+$WWiS4RST?0Sl|$H%Y9<8rFj8-8OJYVxp!wVO>X*2i%I0_6_ek0!Lj*!3wcffz8#wZ;fmYeb|dZ8xLz)8W#((|Mr>1<`ZYeI zN0bT*ckcu^)J~Ds%eZp1?nf^BJ53KPIIOb~LQAS=+b=e6!Va0@&=bpv!5w->Y$yuy@r|Rh>_>NomFG$QK8>yqRYWzk1EDzumRBm<^_pwK@>E z1)oD}pg#3o2n2)WYV*SvwJ+$u$R2UY*kDOry3lP_IR)zX5}qfE^IfqgelJvi+}#}C%=Qq>k|DA;74xQ$-T&sORaY8#U)8%n5fn9aq(!y z=QZc6>bf?0O9q<`!EzbP!y!p{n_BZ(D&_*4ttR=+qB0>knUZf4JhmV@&5QQe^sjYR@4&(6eJV z@|h%!pxMO@o5K`?io*hbe+sB|3{`CW*SFqe=@xGIkU27j#gD-i82~E^=$`p<$Pn1R zQ>Q_NQ+Cpt#ctuZ{Vaae@_l=Oi^6^`tWT0A_d6y1Ru*`FW@n-Cr(<<2JcTeB;@JYk z=<7H~D@e}6nopRgW$YvjBh||>5KL#(!PR1_Z4Y|dM^CbR!!LV`zMk&5!Q4V}mHEa6 zHzEe_oAe9qJQtdE87?sp8@}m6U+m}%e7=9|f?clh%U|@w?T?EkZ5nvOQa5DeG?ClG zQdpbBkdpL?jaTKztDF;d8P&p`0{zaMBec?46Vje59xZ!f+CQBuy`MIRZ5Ae|>?P{S zStht^^hfhyolt%GOs}s}Td6~x zC>?CNdwnoRpBw`6O=t`2U^kM#dG$S8etTkxkK1rv*8^YFicH0Ul2y=l(m3$yRVW|M zdP3)ssb}|b<2R99PGL6`%4;uOy%Vnh_Pp9~X|?UAm`p4m)~nB>y?xE)!)VU3Rj-7DaZ_AWf9NhhSa7g_XKWVpz zeZXzG8dL6V+WEv4u_58O(KNYnQg=k@AmknMOJ?_SBAdbTyS@0>qdoKX73ZDnQ-v;x zPIm<^|4j~+nI!2ao+DJihi?#(=0cmvulLg3eHP+3#MV1LW@5vK<%|;+i`Ty?psYqg z3mr@5Fi@m-)z_od{I9;ziDvJluigbdTfnYuF7bH3SArfBZPgt;S=TB+e#vwR7zhnK z&8l3g;;Z1SRPs$pWYPG82@`dl7NfT|>@8IH-;s&%Au2=nw8QcXqGpWsRl3vW8Xy{w z)gMfglAHB|qx;NzeW6X%v0^{t?qd3sZ(kw#S6_FQ z)9CR_ent3nZTRpO+_!fF*<4@sWI5q9XUf+EOuPBCF~{!NsG*s}W_vt~^TB(5M1N-) z$Ka|MBEK!(04kb!izVmj5*Jdk))w(xEoHUbQ5hO^ql_mnbT}T#CjBJc6FO1|W2ks; zwwld{8vhluQevC&YHdBCs(+}w`zB0uE6b;5DPl7Di8P}Bi@TPm4m+-DWDGB_V01JQ5#k(BW&+uB{wn?Rg$Spq)OwQW~i0J8Nb5-n;anbV~{okLXji-Ak~ZvL=2e$!TQOCDj;8i3 z;MPyr!uy;*+VRb!_ozwmZ>|0czU7=ZoUn;}^>$#QiglYBY2|iI+p9au?<0q=B=2W+_KP z*haG&RX3c_R1lIx=hA)XY-F{VBkgKNzk)}2k>$xW{G<Un2~T%-uP?^3Y= zHB;DW^OSBB&J$jHE1T_g%FS|IAT;ZdVyAW2q!NJ>B}{D)#fQ^ZnMr>re7viHeL+@^ z8q@^S$!T|b)o~y{IAK=lo^?D&I&hafAamCcxKq+rHf}Lqk&cTGuh4w6Tw3cu7Wc*` zLyNb6{?bP;>uwFf+J5VaOAgaNn?spi-)K>XHhj|*y`MAGdB-TiWB z-)E!45$qHzsS8Wi*m$H=QRmx(_W1nT2jd-`viYOcl{;FfpY*46PQ#1^Div1E)jd1 zgD*{$@YWY?=yNV^hk~`BtHorm^gE9pf^fy}#ri^qtvjL>WERGsG>D4$++W7pqT6{N zJ?@n^;+=gpI=bG6_4ndTsI%%$O_{|cl*}e*7j>OX`9(TU->@Ty#C`)XTQqzU55$Xa_doBGa=6@ zL!v7@h|mfV`+2$NZur(^Lp#xraj=S3X;@jCw&#sHSW$Q^EU=SCVzGE$Tadmg!pl~nDZa>-GzJ#k>3*VMjQd_mAb$FcfoEYEH828m^qWp*B z*iu0ns|HuX*!KyWKKtea+jE(2wOppV)v9r;dk0}$oYsZDEfVcJGG%?mspY2jc^Q*= zQYd!CjDwhIW0@DA%Mh%uW!T=#iZMG49M^zs@iFY3KHs|HFT9H^=6q3^p;GK_Dn5h6 zyC?XM!<2mNbmqHlXv7P0w%id`ZF>y$n2x1jd4(AHD-O)EI}s?bR8SfHY|I@=QBBils$K`s9|5OFc=j^nGd)XJ0&b&LtLiBurKXAzQ>tkgqayU3)c&|mE zq}#Vl6Ka`WYnLJIv5RE;ebnV+nJ_XZH+mg`)G9H}rsIU`cm?dcHUJ==?F>h2WoQ`P z0&U;=gg~@pA^PCe$$^%1csEZU1U_r3uX2pi_ujIWhRJ=$$oyPgWLd@fmsABj=r=3D z1aQrn{J!Ehv^#U+Gp1XS_au7Kxz7D(U$mEB&Zo^^4I9YOMJgi579)gFo6&#~vbky* zHrzJUHXJ&P^MP7|w#3~)mV1rP8qhG<(O$B>&7hb5;cqSJ*j2GsBSa3gY}D}l3)Sx1 z;CDALar51R{0R?U%~!0vK^EV{L%}o+stFfx5u?$<>xoge;L4M{7BSb3Y@|PGa=r&m$?+T}U4%^Z{PI=S9KcT~43@E*N1Wx*%*Jml0m2((Ow;<9#h;mu( z)E2|`UdODizsPgRGc&B$SKHg1bDzLz@gXnjVBdWAjh5ad)+Dl^MOk`wR%BTOiamd0 zp9LHbcZtA)!iPCWcCkITU_}=pp9G@&zzJJdIU$Do>pAEsVQ>QPi|YMWuE*fW{JmK< zR+in8N0$oGmIljNS_8Ahc7-q3H@}e|KB;5%QO=+I(lNzI^s1W=F`5|Weq7%aM@46G zDCuI^TPc(_yI7$P4KsqgEE5ox0yi9_zV~>d{q4$nzFpz4PyNmOuLYn!GVZ9owS7%F z<%vS`%+DE{Ug10C3Ch}fOj~+oe#K&9PSf}zTZx`VFcG8>%Tzd>@G{>%2vg){VOcY0+K51SfF_v5>$}(xcfoL^UMkM8FyuqW%iAl$ zJ*~M57FKM-PT~lnz)J*`ic*m1egr{|hcXdmw+4T_2x*}r8YCzYB8Fcuw|yx@a+N;| z-Etu%DvCss5Yh7hV^IvG5ClFZT_%rU=0JX5YSy4;>Chy;(4?As9@2Yi`cJ2N<9EomQ%`--ey7Mk6HmD{rK5R5cUqNK z{%2$!(7#5^BQ5mTyy-ca+dcq~A$m>s-;?c~1I?na5#qX52Ew-YR)r{{q@nU*!ztd^ zz9&%`NvF|7y2ASeZjIufS;j)ZkO(#mP&_kgKw!pr>&$W}u={+1kmM>ucYyk#N-Mi2jE}4!<7%T54s^8l* zyuW&Z145a9f4A$MQANP18hU-YSvzgS=HQJ(pJjrp`uz)>hw4SA2jy=ztM*PCUCoky zi4_9_YFV(eJ?yG>V^!LtqlA;*MX;_;HgFeoJb>~wS@uE=HsH^8aSwq%fVMw*6f8kK zDA6Yv0i0oe@5f)H!(UBWO{gS#Q1@($$}#~Xp(;HqCE4MlMzigqK^FqNU*7k_ZGaM% zTvK+5hR8`@qowLeJ8W0fwK7oMMAOwqhMQb`{t||k-Rz<8IXmitw&AzyuQ&!i=s^SO z4*QpFrX7hBs@clY%wc|z=EOrmf?h0vh!j=Mt`E zmkF&+ZldKOL{D>!*c9ArHTBfUaP=1VE%L|2RjpQcf*FF+orf+*7WGrB(nE+SQZtit z)10m8w4Mu7_k10$XW3ttSeU+sEkk}a>GieD{HIHu%MwHbs)r_Jnh`_3^Lzx+29SJy z@IM`&y&aS#NSW?we8`76{WKE=!7gOV6>{-zCH3b5TE&@6PoTYT&!x=q@JTW8kMv(f z5LpBfSzVr+-jE>NEb-s7_&;`rrGKp9|IJDnFcNzGOwUrzc8FqjiURm7Jn%1YPv}R< z&n0;bwLmfWY+d*K@<(Sk>)s&>?fvKd$lh?Qj+{HO3cCXXOv#!{&hYRjF<~n3OaU~lT~KWldll97`EYQM__Awir$#0Gu}OA zyfq;&{EvB6sg=}eISnbvUDatg?p&GZUWBD<^gUL<q=jLEQge? z-0|<$y^OfaB3Dn+kR)9ydV^oC!&(Thfx1OtHnQ||jdb`;hz&nnOlv*Kv(jgWd-1a! z+!nHu{z)ExFe|_n#|R+`dU_)Rq5>vtq4p1*W0$+JINK59@VpWb4hNQ2_BMYvDh@UlYZ0(M z{x-;Jxej{rvca$rS0hB$6OR<41)h9p;q;HDVAXjsPO+AwLBYk(IX`DnN#at*oH8#E z?)2|vH+5u9O!2#y?7G}rsCW$CrI$MYEbCoCnw2&-tsq~Vid#BCBWN27ClQ`=+4*Tm zG#`ykYIb(^F3s@CxUUigrTxfud*9o|P$tFOR~zCyXXd)?cYlZ|kxL+v@>MQ1F#KFa z);V@4l!fD_-fH9cMGuQ}l<+r2!f6Q%7)f}o?N`V=51*Kzrvlcj@hy^sLVYfdDiO(i ziRMgMd?sdFQ1xQ1>^5R%V6fGGCBu6KP+^Ox;X5a>!v)I~8sBX|Aw^WHAE(R=T`)eI zU1odxpK3Gfgy}5hBXTW>lQ^i`+0=l{WG=qJ!Lg-5>|` z(ODB}vt~YVg%j-UZ05D8?5W^o&XHZyx*1SK6wBS&n~+ow^w2r~t3GVF%gy_)izVo} z2^XC>VuM<>%Y9Q`e-r;b@3uLxfWCZp^DMGxNx3u+@ECCM?T~9d?(sx_DnKcKyxUN! zN?wG-ZL%K1#i#a_Kht_x072RrX3~mo)~E>^#)Kq&eVYtRE~<4QUi9CPp9n{i+})VJ z2+;yu$N6Ks8xvy&^dW5ir*&jR4u>&3EUzDIvnv_jrY9z%fO5?|Re|n^U-f#ZOr+TK zzmeAe%2t+D0i_?xYw`J-$IyXd_-h9Pe!I$+P6zVQnaxb|{f`R5zw*fcK|Ncd5Pjpa z{v(&5Y)Bwj45naQqf!$;k!BDvXiUj1g1VMS#){E2t}F}=CMK|GpZi#gPx}!GA56i! z*W1|`S{IPw+Bj7!Ty+=N)QG+))!f&&&1dA-?z?;u!U|X}xa5ZO%z!TORV#C>O4j;v zL@d|7m@lmm;-Xe^`t7^Ai6Y;oHlZ<@qXcykc^J6@L)-JGUC*YCd54`E`IhX!W6AmZ z=mCG4=IHZ-iNrpWbCjzSnR08PnoB13hvYZrGeq&J~6dzVU|J@u)S_Ux~JoEXga;o|Ux#-E#{5WJ&miMCp<9el_k z2}#f_bTnr9n?Jl%zhACmU|Tpk=}?4JzY}&}+}Oh=F=f30Lj@<*d+?8oya16@zli&n zaf5B){@C6H8N`2a2=FU1Efa~>ElD%7c7WOx8fX=jf)Hij1@ke07=N9W*x}M01@6;D z_WKohUsxR|x*(-dB#-^HAcx?~)b?o11kMAZ)p3zOFzyX|lKjeuZ>?sm*r;MGm02T7 z!0&qr)+3d}t}KXyseWcDd{+lGIpp*_ts8hSMd}m^rk`4wlnuiAJQlX* zu$S>-cBh3tC>$J~mLq^OYRI2BsJ}yMNk(KmSNlp(Odoqw(o&erH{$E#iTv@NM7wvZw^;;Ew+n`t85MzW>vT$yEiuuFhhbEyT8mGDi`l zKA<>Jr2e<&$iJj?{Aa7?zv$*z73ni;3kn#tS}ZLcxkv5b!kHp+fsdQr_Z9*f%a;3n zce%T>!;HWzl?Sw|ZQbv|O3g%nwOtJkLtlxDX<&vxd(iPyDqQToF@SM1c8_3O@hB23 z9U_wZ|EE9vThU}!b*K7Wpf!r5MEBoMAs3#xK5QL7Pgqxm|B5y8zj#}U4y8PKnqhk% zHF@6z@czB6{r_}8FQP5G)utq;&pT`JV~T+&P{JDh;iiJiwPNx;oB}0IhJwfV)i{Sqc(tjX@ literal 57521 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\n' + + '
    \n' + + ' myVesta\n' + + ' website\n' + + '
    \n' + + '
    \n' + + ' Forum\n' + + ' Ask the questions on our forum\n' + + '
    \n' + + '
    \n' + + ' Git\n' + + ' Become our code contributor\n' + + '
    \n' + + '
    \n' + + ' Donate\n' + + ' Buy us a coffe\n' + + '
    \n' + + '
    \n' + + ' Wiki\n' + + ' Find solution in our documentation\n' + + '
    \n' + + ' \n' + + '
    \n' + + ' SysLoad\n' + + '
    \n' + + ' '; + +$(document).ready(function(){ + var sys_height=$(".io-log").height(); + $(".io-log2").css("top", sys_height+50); + setTimeout(function() { + iolog = getCookie("iolog"); + //console.log('cookie: "'+iolog+'"'); + if (iolog === '1') { + showIoLog(0); + return 1; + } + if (iolog === '0') { + //setCookie("iolog", 0, 365); + hideIoLog(0); + return 0; + } + if (iolog == '') { + //console.log('cookie is empty'); + //setCookie("iolog", 1, 365); + showIoLog(0); + return ''; + } + }, 1); + + if (GLOBAL.CURRENT_USER_FINAL == 'admin') $(".body-user .l-content > .l-center.units").first().prepend( iohtml ); + + $(".io-log").on("click", function() { + var showlog=checkCookie(); + //console.log('cookie = "'+iolog+'"'); + if (showlog===1 || showlog=='') { + //console.log('cookie is active or empty, calling hidelog()'); + setCookie("iolog", 0, 365); + hideIoLog(1); + } + if (showlog===0) { + //console.log('cookie is inactive, calling showlog()'); + setCookie("iolog", 1, 365); + showIoLog(1); + } + + }); +}); + diff --git a/web/js/init.js b/web/js/init.js index 6c60ff85..4da9422f 100644 --- a/web/js/init.js +++ b/web/js/init.js @@ -32,15 +32,17 @@ $(document).ready(function(){ // CREATE BUTTON - - $('.l-sort__create-btn').hover(function(){ - $(".l-sort__create-btn").append("
    "); - $(".l-sort__create-btn").append("
    "+$('.l-sort__create-btn').attr('title').replace(' ',' ')+"
    "); - }, function(){ - $("#add-icon").remove(); - $("#tooltip").remove(); - }); - + if ($(".l-sort__create-btn").length>0) { + $(".l-sort__create-btn").append("
    "); + $(".l-sort__create-btn").append("
    "+$('.l-sort__create-btn').attr('title').replace(' ',' ')+"
    "); + $('.l-sort__create-btn').hover(function(){ + $("#tooltip").css('background-color', '#1ca2cc'); + }, function() { + $("#tooltip").css('background-color', '#34b5dd'); + //$("#add-icon").remove(); + //$("#tooltip").remove(); + }); + } // SEARCH BOX diff --git a/web/templates/admin/list_dns_rec.html b/web/templates/admin/list_dns_rec.html index 24f28103..f84b504f 100644 --- a/web/templates/admin/list_dns_rec.html +++ b/web/templates/admin/list_dns_rec.html @@ -105,7 +105,7 @@ v_unit_id="" v_section="dns_rec">
    12 ) echo '...'; ?>
     
    -
    +
    diff --git a/web/templates/admin/list_server_info.html b/web/templates/admin/list_server_info.html index 7a131572..7ff5feec 100644 --- a/web/templates/admin/list_server_info.html +++ b/web/templates/admin/list_server_info.html @@ -5,6 +5,10 @@ Vesta - <?=__($TAB)?> + + + + @@ -12,7 +16,7 @@ - + diff --git a/web/templates/admin/list_user.html b/web/templates/admin/list_user.html index 4ad3daec..1e5a67cc 100644 --- a/web/templates/admin/list_user.html +++ b/web/templates/admin/list_user.html @@ -1,9 +1,9 @@
    '; - } else { + if ($user != 'admin') { + //echo ''; + //} else { echo ''; } ?> @@ -61,12 +61,15 @@
    -

    ".__("What's new:")."


    ".$changelog."
    ".__("This only admin see after myVesta upgrade, and will dissapear on next refresh.")." ".__("If you missed an update, see our previous")." ".__("change logs").".
    ".__("Check out our")." ".__("new site, forum and knowledge base").".


    "; - + if ($user == 'admin') { + echo ''; + } + if (isset($changelog)) { + echo "

    ".__("What's new:")."


    ".$changelog."
    ".__("This only admin see after myVesta upgrade, and will dissapear on next refresh.")." ".__("If you missed an update, see our previous")." ".__("change logs").".
    ".__("Check out our")." ".__("new site, forum and knowledge base").".


    "; + } + foreach ($data as $key => $value) { ++$i; if ($data[$key]['SUSPENDED'] == 'yes') { @@ -176,7 +179,7 @@ sort-bandwidth="" sort-disk="
    -
    :
    +
    :
    diff --git a/web/templates/admin/list_weblog.html b/web/templates/admin/list_weblog.html index b46e7979..08fea512 100644 --- a/web/templates/admin/list_weblog.html +++ b/web/templates/admin/list_weblog.html @@ -5,6 +5,10 @@ Vesta - <?=__('Web Log Manager')?> + + + + @@ -12,7 +16,7 @@ - + diff --git a/web/templates/admin/panel.html b/web/templates/admin/panel.html index b4534ccd..4c1fdaf7 100644 --- a/web/templates/admin/panel.html +++ b/web/templates/admin/panel.html @@ -40,9 +40,10 @@
    +
    -
    +
    • :
    • :
    • @@ -52,7 +53,7 @@
      -
      +
      • :
      • :
      • @@ -64,7 +65,7 @@
        -
        +
        • :
        • :
        • @@ -76,7 +77,7 @@
          -
          +
          -
          -
          myVesta
          Build date:
          -