From dfaaaca89ac0c332fb96085741b91f29b0929ff4 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Sat, 1 Jul 2023 23:08:26 +0500 Subject: [PATCH 001/109] Fix. ScannerQueue.php. Unhandled error on getContentFromURL() fixed during sending FMS logs. --- lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 45b50576f..d987dd7b9 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -2103,13 +2103,24 @@ public function send_results() // phpcs:ignore PSR1.Methods.CamelCapsMethodName. if (is_null($weak_code)) { continue; } + + if (HTTP::getResponseCode($fms_value['url']) !== '200' ) { + //probably needs to handle errors there + continue; + } + + $page_content = HTTP::getContentFromURL($fms_value['url']); + if ( !is_string($page_content) ) { + //probably needs to handle errors there + continue; + } + $weak_code = array_values($weak_code)[0]; $weak_code = htmlspecialchars_decode($weak_code); $weak_code = str_replace("__SPBCT_RED__", "", $weak_code); $weak_code = str_replace("__SPBCT_RED_END__", "", $weak_code); $page_text_arr = []; - $page_content = HTTP::getContentFromURL($fms_value['url']); foreach (preg_split("/((\r?\n)|(\r\n?))/", $page_content) as $line) { $page_text_arr[] = $line; } From 103f226cd0f7af716701bdb844b4256e98797c93 Mon Sep 17 00:00:00 2001 From: Viktor Date: Wed, 5 Jul 2023 09:51:36 +0300 Subject: [PATCH 002/109] Fix. Frontend scanner. Sending logs about scanned frontend malware fixed. (#204) * Fix. Frontend scanner. Sending logs about scanned frontend malware fixed. * Fix. Code. Code style fixed. * Fix. Frontend analysis. Sending logs about checked pages fixed. * Fix. Scanner. Sending frontend malware logs fixed. * Fix. Code. Code style fixed. --- lib/CleantalkSP/SpbctWP/Scanner/Frontend.php | 82 +++++++++++++++++++ .../SpbctWP/Scanner/ScannerQueue.php | 53 +----------- 2 files changed, 86 insertions(+), 49 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php index 01ca2fc7e..27044672b 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php @@ -2,6 +2,7 @@ namespace CleantalkSP\SpbctWP\Scanner; +use CleantalkSP\SpbctWP\API; use CleantalkSP\SpbctWP\Helpers\HTTP; /** @@ -370,4 +371,85 @@ public static function resetCheckResult() return $wpdb->query('DELETE FROM ' . SPBC_TBL_SCAN_FRONTEND . ';'); } + + /** + * Sending logs about scanned frontend malware + * + * @return void + * @throws \Exception + */ + public static function sendFmsLogs() + { + global $spbc, $wpdb; + + $spbc->data['scanner']['last_scan__front_end'] = time(); + + $fms_logs_data = $wpdb->get_results( + 'SELECT page_id, url, weak_spots, dbd_found, redirect_found, signature, csrf' + . ' FROM ' . SPBC_TBL_SCAN_FRONTEND + . ' WHERE approved IS NULL OR approved <> 1;', + ARRAY_A + ); + + $fms_logs_data_prepare = []; + foreach ($fms_logs_data as $fms_value) { + $weak_codes = json_decode($fms_value['weak_spots'], true)['CRITICAL']; + if (is_null($weak_codes)) { + continue; + } + + $page_text_arr = []; + $page_content = HTTP::getContentFromURL($fms_value['url']); + foreach (preg_split("/((\r?\n)|(\r\n?))/", $page_content) as $line) { + $page_text_arr[] = $line; + } + $page_text = implode("\n", $page_text_arr); + + foreach ( $weak_codes as $weak_code ) { + $weak_code = htmlspecialchars_decode($weak_code); + $weak_code = str_replace(array("__SPBCT_RED__", "__SPBCT_RED_END__"), "", $weak_code); + $bad_code_len = 200; + $page_content_before_bad_code = substr($page_text, strpos($page_text, $weak_code) - $bad_code_len, $bad_code_len); + $page_content_after_bad_code = substr($page_text, strpos($page_text, $weak_code) + strlen($weak_code), $bad_code_len); + + // @ToDo check danger_code_type for every $weak_line separately + if ($fms_value['dbd_found']) { + $weak_type = 'DBD'; + } elseif ($fms_value['signature']) { + $weak_type = 'SIG'; + } elseif ($fms_value['csrf']) { + $weak_type = 'CSRF'; + } else { + $weak_type = 'REDIR'; + } + + //[,, <100 before>, <100 after>, , ] + $fms_logs_data_prepare[] = [ + $fms_value['url'], + $weak_code, + $page_content_before_bad_code, + $page_content_after_bad_code, + get_the_modified_date('Y-m-d H:i:s', $fms_value['page_id']), + $weak_type + ]; + } + } + + $scanner_start_local_date = isset($spbc->data['scanner']['scanner_start_local_date']) + ? $spbc->data['scanner']['scanner_start_local_date'] + : current_time('Y-m-d H:i:s'); + + if (count($fms_logs_data_prepare) > 0) { + $result_fms = API::method__security_fms_logs( + $spbc->settings['spbc_key'], // API key + $spbc->data['scanner']['total_site_pages'], // Total pages + count($fms_logs_data_prepare), // Total infected pages + $scanner_start_local_date, // Scanner start date + json_encode($fms_logs_data_prepare) // Logs data + ); + if ( ! empty($result_fms['error']) ) { + throw new \Exception(' Frontend result send: ' . $result_fms['error_message']); + } + } + } } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 573da1862..397474f47 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -2091,55 +2091,10 @@ public function send_results() // phpcs:ignore PSR1.Methods.CamelCapsMethodName. // Frontend analysis if ( isset($spbc->settings['scanner__frontend_analysis']) && $spbc->settings['scanner__frontend_analysis'] ) { - $spbc->data['scanner']['last_scan__front_end'] = time(); - - $fms_logs_data = $this->db->fetchAll( - 'SELECT `url`, `weak_spots`' - . ' FROM ' . SPBC_TBL_SCAN_FRONTEND - . ' WHERE approved IS NULL OR approved <> 1;' - ); - - $fms_logs_data_prepare = []; - foreach ($fms_logs_data as $fms_key => $fms_value) { - $weak_code = json_decode($fms_value['weak_spots'], true)['CRITICAL']; - if (is_null($weak_code)) { - continue; - } - $weak_code = array_values($weak_code)[0]; - $weak_code = htmlspecialchars_decode($weak_code); - $weak_code = str_replace("__SPBCT_RED__", "", $weak_code); - $weak_code = str_replace("__SPBCT_RED_END__", "", $weak_code); - - $page_text_arr = []; - $page_content = HTTP::getContentFromURL($fms_value['url']); - foreach (preg_split("/((\r?\n)|(\r\n?))/", $page_content) as $line) { - $page_text_arr[] = $line; - } - $page_text = implode("\n", $page_text_arr); - - $bad_code_len = 200; - $page_content_before_bad_code = substr($page_text, strpos($page_text, $weak_code) - $bad_code_len, $bad_code_len); - $page_content_after_bad_code = substr($page_text, strpos($page_text, $weak_code) + strlen($weak_code), $bad_code_len); - - $fms_logs_data_prepare[] = [ - $fms_value['url'], - $weak_code, - $page_content_before_bad_code, - $page_content_after_bad_code - ]; - } - - if (count($fms_logs_data_prepare) > 0) { - $result_fms = API::method__security_fms_logs( - $spbc->settings['spbc_key'], // API key - $spbc->data['scanner']['total_site_pages'], // Total pages - count($fms_logs_data_prepare), // Total infected pages - $scanner_start_local_date, // Scanner start date - json_encode($fms_logs_data_prepare) // Logs data - ); - if ( ! empty($result_fms['error']) ) { - $error .= ' Frontend result send: ' . $result_fms['error_message']; - } + try { + Frontend::sendFmsLogs(); + } catch (\Exception $exception) { + $error .= $exception->getMessage(); } } From bd1dac6c631a7d334aafabe72c91b2b34df84d50 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 6 Jul 2023 11:03:50 +0500 Subject: [PATCH 003/109] Fix. Scanner. Danger files are shown in SUSPICIOUS accoridon. --- inc/spbc-settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 5bf220871..233cf12bc 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -3167,7 +3167,7 @@ function spbc_list_table__get_args_by_type($table_type) 'sql' => array( 'where' => ' WHERE severity <> "CRITICAL" AND last_sent IS NULL AND - (status = "MODIFIED" AND severity IS NOT NULL) OR (status = "INFECTED" AND severity = "SUSPICIOUS")', + (status = "MODIFIED" AND severity IS NOT NULL) OR (status = "INFECTED" AND severity IN ("SUSPICIOUS","DANGER") )', ), 'order_by' => array('path' => 'asc'), ) From 0acb521b25b11c31147e8e9e575c382fa1f93d43 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Thu, 6 Jul 2023 12:04:09 +0300 Subject: [PATCH 004/109] Version: 2.113.1-fix. --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index f66bf9967..a44cd01a6 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.113 +Version: 2.113.1-fix Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 15151355d542caee4c8dab197d1967e34acd12bd Mon Sep 17 00:00:00 2001 From: Glomberg Date: Thu, 6 Jul 2023 12:06:26 +0300 Subject: [PATCH 005/109] Fix. Heuristic analyser. Entropy checking fixed. --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index 4f5a976f2..aa90f723d 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -54,6 +54,9 @@ public function analyse(Variables $variables) continue; } $num_tokens = count($encoder->encode($variable)); + if ( ! $num_tokens ) { + continue; + } $res = strlen($variable) / $num_tokens; if ( $res < 2 ) { $detected_unreadable_variables[$variables_obj[$variable][0][2]] = [$variable]; @@ -89,6 +92,9 @@ private function analyseFile($path) foreach ( $filtered_names as $filtered_name ) { $num_tokens = count($encoder->encode($filtered_name)); + if ( ! $num_tokens ) { + continue; + } $res = strlen($filtered_name) / $num_tokens; $sum += $res; } From 39d045e47abea63509a6bb9d45c16b93384508ce Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 6 Jul 2023 11:03:50 +0500 Subject: [PATCH 006/109] Fix. Scanner. Danger files are shown in SUSPICIOUS accoridon. --- inc/spbc-settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 5bf220871..233cf12bc 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -3167,7 +3167,7 @@ function spbc_list_table__get_args_by_type($table_type) 'sql' => array( 'where' => ' WHERE severity <> "CRITICAL" AND last_sent IS NULL AND - (status = "MODIFIED" AND severity IS NOT NULL) OR (status = "INFECTED" AND severity = "SUSPICIOUS")', + (status = "MODIFIED" AND severity IS NOT NULL) OR (status = "INFECTED" AND severity IN ("SUSPICIOUS","DANGER") )', ), 'order_by' => array('path' => 'asc'), ) From 81e4b9685137b88f6f5e4b6a4db32be7b2c89e54 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Thu, 6 Jul 2023 12:06:26 +0300 Subject: [PATCH 007/109] Fix. Heuristic analyser. Entropy checking fixed. --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index 4f5a976f2..aa90f723d 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -54,6 +54,9 @@ public function analyse(Variables $variables) continue; } $num_tokens = count($encoder->encode($variable)); + if ( ! $num_tokens ) { + continue; + } $res = strlen($variable) / $num_tokens; if ( $res < 2 ) { $detected_unreadable_variables[$variables_obj[$variable][0][2]] = [$variable]; @@ -89,6 +92,9 @@ private function analyseFile($path) foreach ( $filtered_names as $filtered_name ) { $num_tokens = count($encoder->encode($filtered_name)); + if ( ! $num_tokens ) { + continue; + } $res = strlen($filtered_name) / $num_tokens; $sum += $res; } From 12b1b1021e7548b13feba2b2fd8c6c8f9b8e4703 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 10 Jul 2023 11:08:48 +0500 Subject: [PATCH 008/109] Mod. WAF. File upload. Show the critical file path. --- .../SpbctWP/Firewall/FirewallModule.php | 3 +- lib/CleantalkSP/SpbctWP/Firewall/WAF.php | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php b/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php index 276ef9e5d..a4349fb69 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php @@ -76,9 +76,10 @@ public function _die(Result $result) // phpcs:ignore PSR2.Methods.MethodDeclarat break; case 'DENY_BY_WAF_FILE': $reason = __( - 'Blocked by Web Application Firewall: Malicious files upload.', + 'Blocked by Web Application Firewall: Malicious files upload: ', 'security-malware-firewall' ); + $reason .= isset($result->pattern['file_path']) ? $result->pattern['file_path'] : ''; break; case 'DENY_BY_BFP': $reason = __('Blocked by BruteForce Protection: Too many invalid logins.', 'security-malware-firewall'); diff --git a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php index 5b422839a..935389432 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php @@ -329,19 +329,25 @@ private function wafFileCheck() if ( ! empty($heuristic_result->weak_spots) ) { $patterns = array(); foreach ( $heuristic_result->weak_spots as $severity => $result ) { - $patterns[$severity] = reset($result); + // critical files only should be collected on WAF upload check + if ( $severity === 'CRITICAL' ) { + $patterns[$severity] = reset($result); + $patterns['file_path'] = $file_to_check->path; + } } - return new Result( - array( - 'module' => 'WAF', - 'ip' => end($this->ip_array), - 'status' => 'DENY_BY_WAF_FILE', - 'pattern' => $patterns, - 'triggered_for' => 'uploaded_module', - 'waf_action' => 'DENY', - ) - ); + if ( !empty($patterns) ) { + return new Result( + array( + 'module' => 'WAF', + 'ip' => end($this->ip_array), + 'status' => 'DENY_BY_WAF_FILE', + 'pattern' => $patterns, + 'triggered_for' => 'uploaded_module', + 'waf_action' => 'DENY', + ) + ); + } } } } From e592b0177af9697f6723c587d7ec355486e2b2ef Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 10 Jul 2023 17:02:25 +0500 Subject: [PATCH 009/109] Fix. WAF. File upload. Fix checker. Deny only a provided severities list (CRITICAL for now). --- lib/CleantalkSP/Common/Helpers/Data.php | 4 +- lib/CleantalkSP/SpbctWP/Firewall/WAF.php | 58 +++++++++++++++---- lib/CleantalkSP/SpbctWP/RemoteCalls.php | 7 ++- .../SpbctWP/Scanner/DirectoryScan.php | 8 +-- lib/CleantalkSP/SpbctWP/State.php | 2 +- lib/CleantalkSP/Updater/UpdaterScripts.php | 9 +++ 6 files changed, 65 insertions(+), 23 deletions(-) diff --git a/lib/CleantalkSP/Common/Helpers/Data.php b/lib/CleantalkSP/Common/Helpers/Data.php index 495aa34df..d356c8f63 100644 --- a/lib/CleantalkSP/Common/Helpers/Data.php +++ b/lib/CleantalkSP/Common/Helpers/Data.php @@ -163,8 +163,8 @@ public static function removeDirectoryRecursively($dir_path) } } } - - return rmdir($dir_path); + //ignore rmd warns if folder contains . prefix in files/folders + return @rmdir($dir_path); } return true; diff --git a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php index 935389432..791a3c7bb 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php @@ -28,6 +28,12 @@ class WAF extends FirewallModule private $waf_xss_signatures = array(); private $waf_suspicious_signatures = array(); + /** + * List there all the severity levels that WAF should react to during upload + * @var string[] + */ + private static $waf_uploads_severity_warning_levels = array('CRITICAL'); + /** * @psalm-suppress PossiblyUnusedProperty */ @@ -330,7 +336,7 @@ private function wafFileCheck() $patterns = array(); foreach ( $heuristic_result->weak_spots as $severity => $result ) { // critical files only should be collected on WAF upload check - if ( $severity === 'CRITICAL' ) { + if ( static::doUploadStopOnSeverity($severity) ) { $patterns[$severity] = reset($result); $patterns['file_path'] = $file_to_check->path; } @@ -376,24 +382,49 @@ public static function wafFileCheckModulesCheck( 'output_file_details' => array('path', 'full_hash'), ) ); - $dir_scan->setElements(); - $results = $dir_scan->scan(true); // Output the result - show_message('  ' . __('Checked files:', 'security-malware-firewall')); $details = '
'; $details .= '
    '; - if ( ! empty($results['error']) ) { - $details .= '
  •   Error occurred while checking file ' . $results['path'] . ': ' . $results['error'] . "
  • "; - } - $overall_result = $results['status'] === 'OK'; + $overall_result = true; + + try { + $dir_scan->setElements(); + $results = $dir_scan->scan(true); + foreach ($results as $result) { + // if http error collected or result array invalid + if ( !empty($result['error']) || in_array(array('path','status','severity'), array_keys($result))) { + $details .= '
  •   ' + . __('Error occurred while checking file', 'security_malware_firewall') + . '' + . ' ' + . $result['path'] + . ':' + . ' ' + . !empty($result['error']) ? $result['error'] : __('internal directory scan error', 'security_malware_firewall') + . "
  • "; + } else { + // Cutting useless path prefix + $display_path = preg_replace('#^.wp-content.upgrade[\\\\].+?[\\\\]#', '', $result['path']); + $details .= "
  •     $display_path: {$result['status']}
  • "; + $file_is_ok = $result['status'] === 'OK' && !static::doUploadStopOnSeverity($result['severity']); + $overall_result = $overall_result && $file_is_ok; + } + } + } catch (\Exception $e) { + $details = '
  •   ' + . __('internal directory scan error', 'security_malware_firewall') + . ':' + . ' ' + . $e; + $overall_result = true; + } - // Cutting useless path prefix - $display_path = preg_replace('#^.wp-content.upgrade[\\\\].+?[\\\\]#', '', $results['path']); - $details .= "
  •     $display_path: {$results['status']}
  • "; $details .= '
'; $details .= '
'; + + show_message('  ' . __('Checked files:', 'security-malware-firewall')); show_message($details); // Output result message @@ -666,4 +697,9 @@ private static function whatToCheckAdditionally($signature) return 'nothing'; } + + private static function doUploadStopOnSeverity($severity) + { + return is_string($severity) && in_array($severity, self::$waf_uploads_severity_warning_levels); + } } diff --git a/lib/CleantalkSP/SpbctWP/RemoteCalls.php b/lib/CleantalkSP/SpbctWP/RemoteCalls.php index 1bd1720e4..a3458a71f 100644 --- a/lib/CleantalkSP/SpbctWP/RemoteCalls.php +++ b/lib/CleantalkSP/SpbctWP/RemoteCalls.php @@ -267,11 +267,12 @@ public static function action__scanner__controller() // phpcs:ignore PSR1.Method * @psalm-suppress PossiblyUnusedMethod * @psalm-suppress UnusedVariable */ - public static function action__scanner__check_file() // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps + public static function action__scanner__check_dir() // phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps { $file_infos = Get::get('file_infos'); - if ( ! $file_infos || ! is_array($file_infos) ) { + if ( ! is_array($file_infos) || ! $file_infos ) { wp_send_json(array('error' => 'INVALID_FILE_INFOS')); + return; } $results = array(); @@ -284,7 +285,7 @@ public static function action__scanner__check_file() // phpcs:ignore PSR1.Method ) ); $dir_scan->setFiles([$file_info]); - $results = $dir_scan->scan(); + $results[] = $dir_scan->scan(); } wp_send_json($results); diff --git a/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php b/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php index bbfc9bba0..b4e1c4332 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php @@ -93,8 +93,6 @@ public function setFiles($files) * * @param bool $multi_thread * - * @throws Exception - * * @return array */ public function scan($multi_thread = false) @@ -130,7 +128,7 @@ private function scanInMultipleThreads() $url_pack[] = HTTP::appendParametersToURL( get_option('home'), RemoteCalls::buildParameters( - 'scanner__check_file', + 'scanner__check_dir', 'spbc', $spbc->api_key, array('file_infos' => $file_pack) @@ -163,7 +161,6 @@ private function scanInMultipleThreads() */ public static function scanInMultipleThreadsCallback($response_content, $_url) { - $response_content = preg_replace('@^(OK|FAIL)\s@', '', $response_content); $response_content = json_decode($response_content, true); if ( $response_content === null ) { @@ -210,8 +207,7 @@ private function scanInSingleThread() throw new Exception('Heuristic scanner. ' . $heur_result['error'], 0); }*/ - $result = Controller::mergeResults($sign_result->weak_spots, $heur_result->weak_spots); - + $result = Controller::mergeResults($sign_result, $heur_result); $this->results = array_merge($this->results, $result); $this->results['path'] = $file['path']; } diff --git a/lib/CleantalkSP/SpbctWP/State.php b/lib/CleantalkSP/SpbctWP/State.php index 79a733096..1c469fed1 100644 --- a/lib/CleantalkSP/SpbctWP/State.php +++ b/lib/CleantalkSP/SpbctWP/State.php @@ -223,7 +223,7 @@ class State extends \CleantalkSP\Common\State // Scanner 'scanner__controller' => array('last_call' => 0, 'cooldown' => 1), - 'scanner__check_file' => array('last_call' => 0, 'cooldown' => 0), + 'scanner__check_dir' => array('last_call' => 0, 'cooldown' => 0), // Debug 'debug' => array('last_call' => 0,), diff --git a/lib/CleantalkSP/Updater/UpdaterScripts.php b/lib/CleantalkSP/Updater/UpdaterScripts.php index 4a6b1cba3..af219a7fc 100644 --- a/lib/CleantalkSP/Updater/UpdaterScripts.php +++ b/lib/CleantalkSP/Updater/UpdaterScripts.php @@ -1125,4 +1125,13 @@ public static function updateTo_2_110_0() //phpcs:ignore PSR1.Methods.CamelCapsM { Cron::addTask('security_log_clear', 'spbc_security_log_clear', 86400, time() + 43200); } + + public static function updateTo_2_114_0() //phpcs:ignore PSR1.Methods.CamelCapsMethodName.NotCamelCaps + { + global $spbc; + + // New remote calls + $spbc->remote_calls['scanner__check_dir'] = array('last_call' => 0, 'cooldown' => 0); + $spbc->save('remote_calls', true, false); + } } From 9ebef474982b1b14d6d64e171cc939f17a7b5856 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 10 Jul 2023 17:03:21 +0500 Subject: [PATCH 010/109] Version: 2.114-dev --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index f66bf9967..8fe01cf15 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.113 +Version: 2.114-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From c48c1a995e7576a27bceb98038704a9795e45fae Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 10 Jul 2023 17:03:21 +0500 Subject: [PATCH 011/109] Version: 2.114-dev --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index f66bf9967..8fe01cf15 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.113 +Version: 2.114-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 1dec4c2ce4acf517f184d8b46fbd8f58e8c5ccc0 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 10 Jul 2023 17:12:12 +0500 Subject: [PATCH 012/109] Fix. After test. Psalm suppression. --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index aa90f723d..2d5a940e9 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -30,6 +30,7 @@ public function __construct($path) * * @param Variables $variables * @return void + * @psalm-suppress UndefinedClass */ public function analyse(Variables $variables) { @@ -73,6 +74,7 @@ public function analyse(Variables $variables) * * @param $path * @return bool + * @psalm-suppress UndefinedClass */ private function analyseFile($path) { From 65b5e016531067cb09adb84eab9f734228d3aa3a Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 10 Jul 2023 17:12:12 +0500 Subject: [PATCH 013/109] Fix. After test. Psalm suppression. --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index aa90f723d..2d5a940e9 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -30,6 +30,7 @@ public function __construct($path) * * @param Variables $variables * @return void + * @psalm-suppress UndefinedClass */ public function analyse(Variables $variables) { @@ -73,6 +74,7 @@ public function analyse(Variables $variables) * * @param $path * @return bool + * @psalm-suppress UndefinedClass */ private function analyseFile($path) { From b7652cc8f4578310bf45ecf591f68c2f5f1c2a94 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Mon, 10 Jul 2023 17:07:37 +0300 Subject: [PATCH 014/109] Fix. Scanner. Next scan time format fixed. --- inc/spbc-settings.php | 5 +++-- inc/spbc-tools.php | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 233cf12bc..eb9a78ea9 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -4645,8 +4645,9 @@ function spbc_get_next_scan_launch_time_text() && isset($task['next_call']) ) { return sprintf( - ' ' . __('The next automatic scan is scheduled on %s.', 'security-malware-firewall'), - date('M d Y H:i:s e ' . spbc_wp_timezone_string(), $task['next_call']) + ' ' . __('The next automatic scan is scheduled on %s %s.', 'security-malware-firewall'), + date('M d Y H:i:s', $task['next_call']), + spbc_wp_timezone_string() ); } return ''; diff --git a/inc/spbc-tools.php b/inc/spbc-tools.php index 9149d978f..1f6629805 100644 --- a/inc/spbc-tools.php +++ b/inc/spbc-tools.php @@ -276,7 +276,7 @@ function spbc_wp_timezone_string() $abs_hour = abs($hours); $abs_mins = abs($minutes * 60); - return sprintf('%s%02d:%02d', $sign, $abs_hour, $abs_mins); + return sprintf('%s %s%02d:%02d', date('e'), $sign, $abs_hour, $abs_mins); } /** From 77f5f7e7881f265e4a685b9bf92e8c34f097a08b Mon Sep 17 00:00:00 2001 From: Glomberg Date: Tue, 11 Jul 2023 11:17:24 +0300 Subject: [PATCH 015/109] Fix. Settings. Cron checking account status fixed. --- security-malware-firewall.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index a44cd01a6..177989397 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2014,7 +2014,9 @@ function spbc_access_key_notices($spbc_key = null) { global $spbc; - if ( ! $spbc->key_is_ok ) { + $spbc_key = $spbc_key ?: $spbc->settings['spbc_key']; + + if ( ! $spbc_key ) { return array( 'error' => 'KEY_IS_NOT_OK' ); } From d1e289d8d02e05bd3dfdbd64cde712ebe551fe2a Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 12 Jul 2023 14:23:02 +0500 Subject: [PATCH 016/109] Fix. Json decode slashes. --- lib/CleantalkSP/SpbctWP/Firewall/WAF.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php index 791a3c7bb..0fce7ba59 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php @@ -549,6 +549,7 @@ public static function wafFileGetLastBlockedInfo() if ( $result ) { $result = $result[0]; + $result->pattern = str_replace('\\', '\\\\', $result->pattern); $out = array( 'blocked' => true, 'warning' => $spbc->data["wl_brandname"] . __( From f0c23ac77a9096ae9d89d7919acc9d85a61e9ee1 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 12 Jul 2023 14:23:55 +0500 Subject: [PATCH 017/109] Fix. Skip other severities but CRITICAL only for themes/plugins uplload. Media upload fires on any of severity. --- css/spbc-admin.min.css | 2 +- css/src/spbc-admin.css | 5 ++- lib/CleantalkSP/SpbctWP/Firewall/WAF.php | 56 ++++++++++++++++++++---- 3 files changed, 51 insertions(+), 12 deletions(-) diff --git a/css/spbc-admin.min.css b/css/spbc-admin.min.css index f6be7bcf3..521858f2b 100644 --- a/css/spbc-admin.min.css +++ b/css/spbc-admin.min.css @@ -1 +1 @@ -.spbc_translate_links{color:rgba(150,150,20,1)}.spbc_faq_links{color:rgba(20,150,20,1)}.spbc_support_links{color:rgba(150,20,20,1)}.spbc_setting_links{color:rgba(20,20,150,1)}.spbc_translate_links:hover{color:rgba(210,210,20,1)!important}.spbc_faq_links:hover{color:rgba(20,250,20,1)!important}.spbc_support_links:hover{color:rgba(250,20,20,1)!important}.spbc_setting_links:hover{color:rgba(20,20,250,1)!important}.--hide,.spbc_hide{display:none}#wp-admin-bar-cleantalk_admin_bar__parent_node span,.-display--inline-block{display:inline-block}.ctlk---red,.spbcRed{color:red}.spbcGreen{color:green}.spbcTextCenter{text-align:center}.spbc-overflow--visible{overflow:visible!important}._animate--rotate{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}#wp-admin-bar-cleantalk_admin_bar__parent_node{margin-right:5px}#wp-admin-bar-cleantalk_admin_bar__parent_node .spbc-icon-attention-alt{background:#d63638;color:#fff;border-radius:50%;font-size:12px}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__spbc_icon{width:14px;height:17px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__apbct_icon{width:18px;height:18px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node div.cleantalk_admin_bar__sum_counter{color:#999;display:inline;padding:2px 5px!important}#wp-admin-bar-spbc_admin_bar__settings_link a,.cleantalk-admin_bar__parent a{display:inline-block!important;padding:0 10px!important}.cleantalk_admin_bar__blocked div{cursor:not-allowed!important}.cleantalk_admin_bar__blocked div a{color:#777!important}b.spbc-admin_bar--online_admins{font-size:11px!important}.cleantalk_admin_bar__title{vertical-align:top;margin-left:5px!important}.clntlk-hint{position:relative!important}.clntlk-hint:hover{color:#fff}.clntlk-hint:hover::after{content:attr(hint);position:absolute;left:100%;top:50%;background:rgba(235,235,235,.85);padding:0 5px;border:1px solid #333;color:#000;font-style:normal;width:max-content;z-index:99999999999999999}.cleantalk_admin_bar__separator{height:0!important}span.green_dot,span.red_dot{height:8px!important;width:8px!important;border-radius:50%!important;display:inline-block!important;margin-left:5px!important}.cleantalk_admin_bar__counter a{padding:0 10px!important}.cleantalk-admin_bar--list_wrapper .ab-sub-wrapper ul:last-child{margin-bottom:5px!important}span.red_dot{background-color:#d00!important}span.green_dot{background-color:#0d0!important}#spbct-upload-checker-details{overflow-y:scroll;height:150px}#spbct-upload-checker-details li:nth-child(2n+1){background:#d3d3d3} \ No newline at end of file +.spbc_translate_links{color:rgba(150,150,20,1)}.spbc_faq_links{color:rgba(20,150,20,1)}.spbc_support_links{color:rgba(150,20,20,1)}.spbc_setting_links{color:rgba(20,20,150,1)}.spbc_translate_links:hover{color:rgba(210,210,20,1)!important}.spbc_faq_links:hover{color:rgba(20,250,20,1)!important}.spbc_support_links:hover{color:rgba(250,20,20,1)!important}.spbc_setting_links:hover{color:rgba(20,20,250,1)!important}.--hide,.spbc_hide{display:none}#wp-admin-bar-cleantalk_admin_bar__parent_node span,.-display--inline-block{display:inline-block}.ctlk---red,.spbcRed{color:red}.spbcGreen{color:green}.spbcTextCenter{text-align:center}.spbc-overflow--visible{overflow:visible!important}._animate--rotate{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear}#wp-admin-bar-cleantalk_admin_bar__parent_node{margin-right:5px}#wp-admin-bar-cleantalk_admin_bar__parent_node .spbc-icon-attention-alt{background:#d63638;color:#fff;border-radius:50%;font-size:12px}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__spbc_icon{width:14px;height:17px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node img.cleantalk_admin_bar__apbct_icon{width:18px;height:18px;margin-top:7px}#wp-admin-bar-cleantalk_admin_bar__parent_node div.cleantalk_admin_bar__sum_counter{color:#999;display:inline;padding:2px 5px!important}#wp-admin-bar-spbc_admin_bar__settings_link a,.cleantalk-admin_bar__parent a{display:inline-block!important;padding:0 10px!important}.cleantalk_admin_bar__blocked div{cursor:not-allowed!important}.cleantalk_admin_bar__blocked div a{color:#777!important}b.spbc-admin_bar--online_admins{font-size:11px!important}.cleantalk_admin_bar__title{vertical-align:top;margin-left:5px!important}.clntlk-hint{position:relative!important}.clntlk-hint:hover{color:#fff}.clntlk-hint:hover::after{content:attr(hint);position:absolute;left:100%;top:50%;background:rgba(235,235,235,.85);padding:0 5px;border:1px solid #333;color:#000;font-style:normal;width:max-content;z-index:99999999999999999}span.green_dot,span.red_dot{width:8px!important;border-radius:50%!important;display:inline-block!important;margin-left:5px!important}.cleantalk_admin_bar__separator{height:0!important}.cleantalk_admin_bar__counter a{padding:0 10px!important}.cleantalk-admin_bar--list_wrapper .ab-sub-wrapper ul:last-child{margin-bottom:5px!important}span.red_dot{height:8px!important;background-color:#d00!important}span.green_dot{height:8px!important;background-color:#0d0!important}#spbct-upload-checker-details{overflow-y:scroll;height:150px;border:1px solid #CCC}#spbct-upload-checker-details li:nth-child(2n+1){background:#CCC} \ No newline at end of file diff --git a/css/src/spbc-admin.css b/css/src/spbc-admin.css index 259612974..20179eee7 100644 --- a/css/src/spbc-admin.css +++ b/css/src/spbc-admin.css @@ -140,7 +140,8 @@ span.green_dot{ #spbct-upload-checker-details { overflow-y: scroll; height: 150px; + border: solid #CCC 1px; } #spbct-upload-checker-details li:nth-child(2n+1) { - background: #d3d3d3; -} \ No newline at end of file + background: #CCC; +} diff --git a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php index 0fce7ba59..e4dbbe45c 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/WAF.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/WAF.php @@ -388,10 +388,12 @@ public static function wafFileCheckModulesCheck( $details .= '
    '; $overall_result = true; + $total_files_checked_count = 0; try { $dir_scan->setElements(); $results = $dir_scan->scan(true); + $total_files_checked_count = count($results); foreach ($results as $result) { // if http error collected or result array invalid if ( !empty($result['error']) || in_array(array('path','status','severity'), array_keys($result))) { @@ -399,17 +401,21 @@ public static function wafFileCheckModulesCheck( . __('Error occurred while checking file', 'security_malware_firewall') . '' . ' ' - . $result['path'] + . (!empty($result['path']) ? $result['path'] : '') . ':' . ' ' . !empty($result['error']) ? $result['error'] : __('internal directory scan error', 'security_malware_firewall') . ""; } else { - // Cutting useless path prefix - $display_path = preg_replace('#^.wp-content.upgrade[\\\\].+?[\\\\]#', '', $result['path']); - $details .= "
  •     $display_path: {$result['status']}
  • "; - $file_is_ok = $result['status'] === 'OK' && !static::doUploadStopOnSeverity($result['severity']); - $overall_result = $overall_result && $file_is_ok; + $file_is_ok = !static::doUploadStopOnStatus($result['status']) && !static::doUploadStopOnSeverity($result['severity']); + if ( !$file_is_ok ) { + // Cutting useless path prefix + $title = json_encode($result['weak_spots']); + $title = $title ? esc_html($title) : 'Unknown weak spots'; + $display_path = preg_replace('#^.wp-content.upgrade[\\\\].+?[\\\\]#', '', $result['path']); + $details .= "
  •     $display_path: {$result['status']}
  • "; + $overall_result = false; + } } } } catch (\Exception $e) { @@ -424,13 +430,14 @@ public static function wafFileCheckModulesCheck( $details .= '
'; $details .= ''; - show_message('  ' . __('Checked files:', 'security-malware-firewall')); - show_message($details); + show_message('  ' . __('Checked files count: ', 'security-malware-firewall') . $total_files_checked_count); // Output result message if ( $overall_result ) { show_message('  No malware has been found. Installation continues.'); } else { + show_message('  ' . __('List of infected files:', 'security-malware-firewall')); + show_message($details); // Remove the directory with bad plugin Data::removeDirectoryRecursively($source); @@ -699,8 +706,39 @@ private static function whatToCheckAdditionally($signature) return 'nothing'; } + /** + * Check if needs to stop upload process on severity level. For theme/plugin upload uses self::$waf_uploads_severity_warning_levels + * @param string $severity file severity + * @return bool + */ private static function doUploadStopOnSeverity($severity) { - return is_string($severity) && in_array($severity, self::$waf_uploads_severity_warning_levels); + if ( + empty($severity) || + !is_string($severity) || + !in_array($severity, array('CRITICAL', 'SUSPICIOUS', 'DANGER')) + ) { + return false; + } + + $uri = parse_url(Server::get('REQUEST_URI')); + + //check only plugin/theme upload + if (!empty($uri['query']) && + ( + strpos($uri['query'], 'action=upload-plugin') !== false || + strpos($uri['query'], 'action=upload-theme') !== false + ) + ) { + return in_array($severity, self::$waf_uploads_severity_warning_levels); + } + + //do block on any severity + return true; + } + + private static function doUploadStopOnStatus($status) + { + return is_string($status) && !in_array($status, array('OK', 'APROVED', 'APPROVED_BY_CT', 'MODIFIED', 'UNKNOWN')); } } From 7ecd7fb15ea34d1b80c55f7f3a4fb5eeec0b8465 Mon Sep 17 00:00:00 2001 From: SVFCode Date: Fri, 14 Jul 2023 08:32:14 +0300 Subject: [PATCH 018/109] Update. Scanner. Added pop up with info how to fix file listening and unsafe permissions. (#217) --- inc/spbc-admin.php | 1 + inc/spbc-settings.php | 48 ++++++++++++++++++- js/spbc-settings.min.js | 2 +- js/spbc-settings.min.js.map | 2 +- js/src/spbc-settings.js | 46 ++++++++++++++++++ .../UnsafePermissionFunctions.php | 2 + 6 files changed, 98 insertions(+), 3 deletions(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 6577e50e9..1299c87ed 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -109,6 +109,7 @@ function spbc_admin_init() // Misc add_action('wp_ajax_spbc_settings__get_description', 'spbc_settings__get_description'); + add_action('wp_ajax_spbc_settings__get_recommendation', 'spbc_settings__get_recommendation'); add_action('wp_ajax_spbc_settings__check_renew_banner', 'spbc_settings__check_renew_banner'); add_action('wp_ajax_spbc_sync', 'spbc_sync'); add_action('wp_ajax_spbc_get_key_auto', 'spbc_get_key_auto'); diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 233cf12bc..9aa7b48cc 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -2541,7 +2541,8 @@ function spbc_field_scanner__files_listing__data_prepare(&$table) $table->items[] = array( 'url' => "" . get_option('home') . "{$row->url}", 'type' => ucfirst($row->type) - . '', + . '' + . '', ); } } @@ -4273,6 +4274,51 @@ function spbc_settings__get_description() wp_send_json($descriptions[ $setting_id ]); } +/** + * @return void + */ +function spbc_settings__get_recommendation() +{ + global $spbc; + + spbc_check_ajax_referer('spbc_secret_nonce', 'security'); + + if (!isset($_POST['setting_id'])) { + return; + } + + $setting_id = str_replace(' ', '_', $_POST['setting_id']); + + $recomendations = array( + 'listing' => array( + 'title' => __('Directory can be listed from the Internet', 'security-malware-firewall'), + 'desc' => __('The listing of a directory allows an attacker to see the files inside the folder and the very existence of the folder. So if he sees ".git" folder is open for the listing, he can assume that you are using GIT technology and could exploit the known security issues to hack the website.', 'security-malware-firewall') + ), + 'accessible' => array( + 'title' => __('File is accessible from the Internet', 'security-malware-firewall'), + 'desc' => __('To solve this issue rename or move the debug.log') + . '

' + . '' + . __('More info', 'security-malware-firewall') + . '' + ), + 'unsafe_permissions' => array( + 'title' => __('You likely do need to modify file permissions', 'security-malware-firewall'), + 'desc' => __('Do it via FTP or hosting control panel. Set 644 for files and 755 for folders. If you are not sure, contact your hosting provider.', 'security-malware-firewall') + . '

' + . '' + . __('More info', 'security-malware-firewall') + . '' + ), + ); + + if (!isset($recomendations[ $setting_id ])) { + return; + } + + wp_send_json($recomendations[ $setting_id ]); +} + function spbc_show_GDPR_text() { return wpautop('The notice requirements remain and are expanded. They must include the retention time for personal data, and contact information for data controller and data protection officer has to be provided. diff --git a/js/spbc-settings.min.js b/js/spbc-settings.min.js index a8660f610..805a26d86 100644 --- a/js/spbc-settings.min.js +++ b/js/spbc-settings.min.js @@ -1,2 +1,2 @@ -function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
").append("").append("

"+e.title+"

").append("

"+e.desc+"

"),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); +function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
").append("").append("

"+e.title+"

").append("

"+e.desc+"

"),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
").append("").append("

"+e.title+"

").append("

"+e.desc+"

"),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); //# sourceMappingURL=spbc-settings.min.js.map diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 85ef653f1..9e8f38997 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
\");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
\")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
\")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

\"+result.title+\"

\")\n\t\t\t\t\t.append(\"

\"+result.desc+\"

\");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\t// spbc_tab = document.getElementsByClassName('spbc_tab_nav-summary')[0];\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
\");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
\")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
\")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

\"+result.title+\"

\")\n\t\t\t\t\t.append(\"

\"+result.desc+\"

\");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
\");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
\")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
\")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

\"+result.title+\"

\")\n\t\t\t\t\t.append(\"

\"+result.desc+\"

\");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\t// spbc_tab = document.getElementsByClassName('spbc_tab_nav-summary')[0];\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_settings__show_recommendation","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","remove_recommendation_func","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file diff --git a/js/src/spbc-settings.js b/js/src/spbc-settings.js index 9f43bc021..ca49cb86d 100644 --- a/js/src/spbc-settings.js +++ b/js/src/spbc-settings.js @@ -72,6 +72,12 @@ function spbc_draw_settings_callback(result, data, params, obj){ spbc_settings__show_description(self, self.attr('setting')); }); + jQuery(document).off( 'click', '.spbc_long_recommendation__show'); + jQuery(document).on('click', '.spbc_long_recommendation__show', function(){ + self = jQuery(this); + spbc_settings__show_recommendation(self, self.attr('setting')); + }); + if(params.additional){ switch (params.additional.action) { case 'highlight': @@ -201,6 +207,46 @@ function spbc_settings__show_description(label, setting_id){ ); } +function spbc_settings__show_recommendation(label, setting_id){ + + var remove_recommendation_func = function(e){ + if(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){ + jQuery('.spbc_long_desc').remove(); + jQuery(document).off('click', remove_recommendation_func); + } + }; + + remove_recommendation_func(); + + label.after("
"); + var obj = jQuery('#spbc_long_desc__'+setting_id); + obj.append("") + .append("
") + .css({ + top: label.position().top + 25, + left: label.position().left + 5 + }); + + + spbc_sendAJAXRequest( + {action: 'spbc_settings__get_recommendation', setting_id: setting_id}, + { + spinner: obj.children('img'), + callback: function(result, data, params, obj){ + + obj.empty() + .append("
") + .append("") + .append("

"+result.title+"

") + .append("

"+result.desc+"

"); + + jQuery(document).on('click', remove_recommendation_func); + } + }, + obj + ); +} + // Shows/hides full text function spbcStartShowHide(){ jQuery('.spbcShortText') diff --git a/lib/CleantalkSP/SpbctWP/Scanner/UnsafePermissionsModule/UnsafePermissionFunctions.php b/lib/CleantalkSP/SpbctWP/Scanner/UnsafePermissionsModule/UnsafePermissionFunctions.php index 74d71b2ed..a78b89c13 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/UnsafePermissionsModule/UnsafePermissionFunctions.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/UnsafePermissionsModule/UnsafePermissionFunctions.php @@ -118,6 +118,7 @@ public function getDataToAccordion() $data_to_accordion[] = (object) array( 'path' => array_keys($file)[0], 'perms' => $file[array_keys($file)[0]] + . '', ); } } @@ -128,6 +129,7 @@ public function getDataToAccordion() $data_to_accordion[] = (object) array( 'path' => array_keys($dir)[0], 'perms' => $dir[array_keys($dir)[0]] + . '', ); } } From 65e7834c85facd12a42f944ed7624147af222baf Mon Sep 17 00:00:00 2001 From: Alex <45482252+alexandergull@users.noreply.github.com> Date: Fri, 14 Jul 2023 10:34:19 +0500 Subject: [PATCH 019/109] New. Settings. Admin user can disable admin notification before login URL is changed. (#222) --- inc/spbc-settings.php | 36 ++++++++++++++++++++++++++----- lib/CleantalkSP/SpbctWP/State.php | 1 + 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 9aa7b48cc..e42e8b211 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -353,7 +353,7 @@ function spbc_settings__register() 'type' => 'field', 'title' => __('Change address to login script', 'security-malware-firewall'), 'description' => __('Please note that this will not hide the links to your registration page on your website.', 'security-malware-firewall'), - 'children' => array('login_page_rename__name', 'login_page_rename__redirect',), + 'children' => array('login_page_rename__name', 'login_page_rename__redirect', 'login_page_rename__send_email_notification'), ), 'login_page_rename__name' => array( 'display' => version_compare($wp_version, '4.0-RC1-src', '>='), @@ -380,6 +380,18 @@ function spbc_settings__register() 'class' => 'spbc_middle_text_field', 'parent' => 'login_page_rename__enabled', ), + 'login_page_rename__send_email_notification' => array( + 'display' => version_compare($wp_version, '4.0-RC1-src', '>='), + 'input_type' => 'checkbox', + 'type' => 'field', + 'title_first' => true, + 'title' => __('Send the notification with the new login page URL to the admin email address', 'security-malware-firewall'), + 'description' => __('The email will be send to', 'security-malware-firewall') + . ' (' . get_option('admin_email') . ')', + 'long_description' => true, + 'parent' => 'login_page_rename__enabled', + 'disabled' => !current_user_can('activate_plugins') + ), 'action_shuffle_salts' => array( 'type' => 'field', 'callback' => 'spbc_settings_field__action_shuffle_salts', @@ -3738,9 +3750,12 @@ function spbc_sanitize_settings($settings) || $settings['login_page_rename__redirect'] === '' ? $settings['login_page_rename__redirect'] : ''; - // Send email notification to admin if about changing login URL - if (empty($spbc->settings['login_page_rename__enabled']) && $settings['login_page_rename__enabled']) { + if ( + empty($spbc->settings['login_page_rename__enabled']) && + $settings['login_page_rename__enabled'] && + ($settings['login_page_rename__send_email_notification'] && current_user_can('activate_plugins')) + ) { $mail = wp_mail( get_option('admin_email'), $spbc->data["wl_brandname"] . esc_html__(': New login URL', 'security-malware-firewall'), @@ -3753,10 +3768,10 @@ function spbc_sanitize_settings($settings) ); // If email is not sent, disabling the feature - if ( ! $mail) { + if ( !$mail ) { $spbc->error_add( 'login_page_rename', - __('New login URL was not sent. Changes aborted.', 'security-malware-firewall') + __('Can not send notification email to the admin address. New login URL was not sent. Changes aborted.', 'security-malware-firewall') ); $settings['login_page_rename__enabled'] = '0'; } else { @@ -3764,6 +3779,10 @@ function spbc_sanitize_settings($settings) } } + if (!$settings['login_page_rename__send_email_notification']) { + $spbc->error_delete('login_page_rename', true); + } + // Send logs for 2 previous days if ($settings['misc__backend_logs_enable'] && ! $spbc->settings['misc__backend_logs_enable']) { //neither we show this in the UI, method spbc_PHP_logs__collect use time() value to collect logs correct @@ -4265,6 +4284,13 @@ function spbc_settings__get_description() 'title' => 'str_rot13()', 'desc' => __('Perform the rot13 transform on a string', 'security-malware-firewall') ), + 'login_page_rename__send_email_notification' => array( + 'title' => 'Send email with new login URL', + 'desc' => __('If enabled, the plugin will necessarily send the notification to the admin email before login URL is changed. + If email could not be sent, all the changes will be reverted. + Disable this option if you have mail connection issues or SMTP service is not configured on this WordPress instance. + Please note that only user that has permissions to activate plugins can disable this option.', 'security-malware-firewall'), + ), ); if (!isset($descriptions[ $setting_id ])) { diff --git a/lib/CleantalkSP/SpbctWP/State.php b/lib/CleantalkSP/SpbctWP/State.php index 1c469fed1..7d3adfb0c 100644 --- a/lib/CleantalkSP/SpbctWP/State.php +++ b/lib/CleantalkSP/SpbctWP/State.php @@ -44,6 +44,7 @@ class State extends \CleantalkSP\Common\State 'login_page_rename__enabled' => 0, 'login_page_rename__name' => 'login', 'login_page_rename__redirect' => '', + 'login_page_rename__send_email_notification' => 1, 'there_was_signature_treatment' => 0, // Firewall From 49bd5dfa562fc89669fc69af68ca449747431769 Mon Sep 17 00:00:00 2001 From: Artem Anoshin <36857361+ArtemAnoshin@users.noreply.github.com> Date: Fri, 14 Jul 2023 09:34:46 +0400 Subject: [PATCH 020/109] Added spbc__get_exists_directories() (#219) * Added spbc__get_exists_directories() * Fix. Scanner. Danger files are shown in SUSPICIOUS accoridon. * Mod. Exclusions. Save exclusions in lower case. Ignore file path character case on comparison * Fix. After test. Psalm suppression. --------- Co-authored-by: alexandergull --- inc/spbc-scanner.php | 21 +++++++++++- inc/spbc-settings.php | 4 +-- .../SpbctWP/Scanner/ScannerQueue.php | 34 +++++++++++++------ lib/CleantalkSP/SpbctWP/Scanner/Surface.php | 4 +-- 4 files changed, 47 insertions(+), 16 deletions(-) diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index c665a46b0..090778fa7 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -124,7 +124,8 @@ function spbc_scanner_count_files($direct_call = false, $path = ABSPATH) 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); if ( ! empty($spbc->settings['scanner__dir_exclusions'])) { - $init_params['dir_exceptions'] = array_merge($init_params['dir_exceptions'], explode("\n", $spbc->settings['scanner__dir_exclusions'])); + $excluded_dirs = spbc__get_exists_directories(explode("\n", $spbc->settings['scanner__dir_exclusions'])); + $init_params['dir_exceptions'] = array_merge($init_params['dir_exceptions'], $excluded_dirs); } $scaner = new Scanner\Surface($path_to_scan, $root_path, $init_params); @@ -2062,3 +2063,21 @@ function spbc_restore_file_from_backup_ajax_action() wp_send_json_success(esc_html__('Success!', 'security-malware-firewall')); } + +/** + * @param $paths array + * + * @return array + */ +function spbc__get_exists_directories($paths) +{ + $exists_dirs = array(); + + foreach ($paths as $path) { + if (is_dir(ABSPATH . $path)) { + $exists_dirs[] = $path; + } + } + + return $exists_dirs; +} diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index e42e8b211..0f1ecfe83 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -3823,9 +3823,7 @@ function spbc_sanitize_settings($settings) $dirs = CSV::parseNSV($settings['scanner__dir_exclusions']); $settings['scanner__dir_exclusions'] = array(); foreach ($dirs as $dir) { - if (is_dir(ABSPATH . $dir)) { - $settings['scanner__dir_exclusions'][] = $dir; - } + $settings['scanner__dir_exclusions'][] = strtolower($dir); } $settings['scanner__dir_exclusions'] = implode("\n", $settings['scanner__dir_exclusions']); } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 397474f47..1171ab876 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -708,14 +708,7 @@ public function clean_results($offset = null, $amount = 50000) // phpcs:ignore P } // Deleting newly added exclusions - foreach ( explode("\n", $spbc->settings['scanner__dir_exclusions']) as $exclusion ) { - if ( $exclusion ) { - $this->db->prepare( - 'DELETE FROM ' . SPBC_TBL_SCAN_FILES . ' WHERE path LIKE %s', - ['%' . $this->db->escapeLike($exclusion) . '%'] - )->execute(); - } - } + $this->deleteFilesOfExclusionDirs($spbc->settings['scanner__dir_exclusions']); $out = array( 'total' => (int)$deleted, @@ -803,7 +796,7 @@ public function countFileSystem($path_to_scan = ABSPATH) if ( ! empty($spbc->settings['scanner__dir_exclusions']) ) { $init_params['dir_exceptions'] = array_merge( $init_params['dir_exceptions'], - explode("\n", $spbc->settings['scanner__dir_exclusions']) + spbc__get_exists_directories(explode("\n", $spbc->settings['scanner__dir_exclusions'])) ); } @@ -852,7 +845,7 @@ public function file_system_analysis($offset = null, $amount = null, $path_to_sc if ( ! empty($spbc->settings['scanner__dir_exclusions']) ) { $init_params['dir_exceptions'] = array_merge( $init_params['dir_exceptions'], - explode("\n", $spbc->settings['scanner__dir_exclusions']) + spbc__get_exists_directories(explode("\n", $spbc->settings['scanner__dir_exclusions'])) ); } @@ -2140,4 +2133,25 @@ public function file_monitoring() // phpcs:ignore PSR1.Methods.CamelCapsMethodNa return $file_monitoring->handle()->getResults(); } + + /** + * Delete files which paths are included to the scanner exclusions directories. + * @param string $scanner__dir_exclusions + * @return bool|int + * @psalm-suppress PossiblyUnusedReturnValue + */ + public function deleteFilesOfExclusionDirs($scanner__dir_exclusions) + { + $deleted_count = 0; + foreach ( spbc__get_exists_directories(explode("\n", $scanner__dir_exclusions)) as $exclusion ) { + if ( $exclusion ) { + $result = $this->db->prepare( + 'DELETE FROM ' . SPBC_TBL_SCAN_FILES . ' WHERE LOWER(path) LIKE LOWER(%s)', + ['%' . $this->db->escapeLike($exclusion) . '%'] + )->execute(); + $deleted_count = !empty($result) ? $deleted_count + (int)$result : $deleted_count; + } + } + return $deleted_count; + } } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Surface.php b/lib/CleantalkSP/SpbctWP/Scanner/Surface.php index 1afa4f464..be8e5b07a 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Surface.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Surface.php @@ -212,7 +212,7 @@ public function countFilesInDir($main_path) if ( is_dir($path) ) { // Directory names filter foreach ( $this->dirs_except as $dir_except ) { - if ( strpos($path, $dir_except) ) { + if ( strpos(strtolower($path), $dir_except) ) { continue(2); } } @@ -320,7 +320,7 @@ public function getFileStructure($main_path) } elseif ( is_dir($path) ) { // Directory names filter foreach ( $this->dirs_except as $dir_except ) { - if ( strpos($path, $dir_except) ) { + if ( strpos(strtolower($path), $dir_except) ) { continue(2); } } From 898404c8097a8bf98ead658bd0135b799b4d2c23 Mon Sep 17 00:00:00 2001 From: Artem Anoshin <36857361+ArtemAnoshin@users.noreply.github.com> Date: Fri, 14 Jul 2023 09:35:36 +0400 Subject: [PATCH 021/109] Fix. Scan. Fixed count outbound links (#220) --- inc/spbc-settings.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 0f1ecfe83..34f5e55c5 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -4687,7 +4687,8 @@ function spbc_scanner__last_scan_info($direct_call = false) isset($spbc->data['scanner']['scanned_total']) ? $spbc->data['scanner']['scanned_total'] : null ); if ($spbc->settings['scanner__outbound_links']) { - $output .= sprintf(' ' . __('Outbound links found: %s.', 'security-malware-firewall'), isset($spbc->data['scanner']['last_scan_links_amount']) ? $spbc->data['scanner']['last_scan_links_amount'] : 0); + $count_outbound_links = (string)spbc__get_count_outbound_links(); + $output .= sprintf(' ' . __('Outbound links found: %s.', 'security-malware-firewall'), $count_outbound_links); } } else { $output = __('Website hasn\'t been scanned yet.', 'security-malware-firewall'); @@ -4788,3 +4789,12 @@ function spbc_field_scanner__prepare_data__file_monitoring_files(&$table) { $table = Scanner\FileMonitoringModule\FileMonitoringTabData::prepareDataToAccordion($table); } + +function spbc__get_count_outbound_links() +{ + global $wpdb; + + return $wpdb->get_var( + "SELECT COUNT(*) FROM " . SPBC_TBL_SCAN_LINKS . ";" + ); +} From e3d66ae47f0ed16c8cb7e1c4a92741e79d2dd76b Mon Sep 17 00:00:00 2001 From: Alex <45482252+alexandergull@users.noreply.github.com> Date: Fri, 14 Jul 2023 10:38:38 +0500 Subject: [PATCH 022/109] Mod. HTTP. getContentFromURL and getResponseCode refactored. Response code validation added. (#223) --- inc/spbc-scanner.php | 26 ++++--------- lib/CleantalkSP/Common/Helpers/HTTP.php | 39 +++++++++++++------ lib/CleantalkSP/Common/Validate.php | 12 ++++++ lib/CleantalkSP/SpbctWP/Scanner/Frontend.php | 18 ++++----- lib/CleantalkSP/SpbctWP/Scanner/Helper.php | 14 ++++--- lib/CleantalkSP/SpbctWP/Scanner/Links.php | 5 ++- .../SpbctWP/Scanner/ScannerQueue.php | 10 ++--- .../Stages/SignatureAnalysis/Repository.php | 14 +++---- 8 files changed, 77 insertions(+), 61 deletions(-) diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index 090778fa7..dec22a893 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -438,19 +438,13 @@ function spbc_scanner_file_delete($direct_call = false, $file_id = null) $remembered_file_content = file_get_contents($file_path); $result = unlink($file_path); if ($result) { - $response_content = HTTP::getContentFromURL(get_option('home')); - $response_content_admin = HTTP::getContentFromURL(get_option('home') . '/wp-admin/'); - $response_code = HTTP::getResponseCode(get_option('home')); - $response_code_admin = HTTP::getResponseCode(get_option('home') . '/wp-admin/'); + $response_content = HTTP::getContentFromURL(get_option('home'), false); + $response_content_admin = HTTP::getContentFromURL(get_option('home') . '/wp-admin/', false); if ( isset( $response_content['error'], - $response_content_admin['error'], - $response_code['error'], - $response_code_admin['error'] + $response_content_admin['error'] ) || - (is_string($response_code) && preg_match('/5\d\d/', $response_code)) || - (is_string($response_code_admin) && preg_match('/5\d\d/', $response_code_admin)) || spbc_search_page_errors($response_content) || spbc_search_page_errors($response_content_admin) ) { @@ -1588,17 +1582,11 @@ function spbc_scanner_file_quarantine($direct_call = false, $file_id = null) if (unlink($root_path . $file_info['path'])) { $response_content = HTTP::getContentFromURL(get_option('home')); $response_content_admin = HTTP::getContentFromURL(get_option('home') . '/wp-admin/'); - $response_code = HTTP::getResponseCode(get_option('home')); - $response_code_admin = HTTP::getResponseCode(get_option('home') . '/wp-admin/'); if ( isset( $response_content['error'], - $response_content_admin['error'], - $response_code['error'], - $response_code_admin['error'] + $response_content_admin['error'] ) || - (is_string($response_code) && preg_match('/5\d\d/', $response_code)) || - (is_string($response_code_admin) && preg_match('/5\d\d/', $response_code_admin)) || spbc_search_page_errors($response_content) || spbc_search_page_errors($response_content_admin) ) { @@ -1731,12 +1719,12 @@ function spbc_scanner_file_download($direct_call = false, $file_id = null) if (is_readable($file_info['q_path'])) { // Getting file && API call $file_path = substr($file_info['q_path'], stripos($file_info['q_path'], 'wp-content')); - $file = HTTP::getContentFromURL(get_home_url() . '/' . $file_path); + $file_content = HTTP::getContentFromURL(get_home_url() . '/' . $file_path); - if ($file !== false) { + if (empty($file_content['error'])) { $output = array( 'file_name' => preg_replace('/.*(\/|\\\\)(.*)/', '$2', $file_info['path']), - 'file_content' => $file, + 'file_content' => $file_content, ); } else { $output = array('error' => 'FILE_EMPTY'); diff --git a/lib/CleantalkSP/Common/Helpers/HTTP.php b/lib/CleantalkSP/Common/Helpers/HTTP.php index f0117711b..470d7b40d 100644 --- a/lib/CleantalkSP/Common/Helpers/HTTP.php +++ b/lib/CleantalkSP/Common/Helpers/HTTP.php @@ -2,6 +2,7 @@ namespace CleantalkSP\Common\Helpers; +use CleantalkSP\Common\Validate; use CleantalkSP\Templates\Singleton; use CleantalkSP\Common\HTTP\Request; @@ -79,27 +80,47 @@ public static function removeParametersFromURL($url, $parameters) * * @param string $url * - * @return array|string[] + * @return false|int */ public static function getResponseCode($url) { $http = new Request(); - return $http->setUrl($url) - ->setPresets(['get_code', 'no_cache']) - ->request(); + $code = $http->setUrl($url) + ->setPresets(['get_code', 'no_cache']) + ->request(); + + if (!empty($code['error'])) { + return false; + } + + if (is_array($code)) { + $code = reset($code); + } + + if (is_string($code)) { + $code = (int) $code; + } + + return Validate::isValidHTTPResponseCode($code) ? $code : false; } /** * Wrapper for http_request * Requesting data via HTTP request with GET method * - * @param string $url + * @param string $url url of the source + * @param bool $check_response_code flag to check if response code is 200, default is true. + * If code is incorrect return array with error HTTP_RESPONSE_BAD. * * @return array|mixed|string */ - public static function getContentFromURL($url) + public static function getContentFromURL($url, $check_response_code = true) { + if ( $check_response_code && static::getResponseCode($url) !== 200 ) { + return array('error' => 'HTTP_RESPONSE_BAD'); + } + $http = new Request(); return $http @@ -135,12 +156,6 @@ public static function getDataFromGZ($url) */ public static function getDataFromRemoteGZ($url) { - // Check the response code - $response_code = static::getResponseCode($url); - if (is_int($response_code) && $response_code !== 200) { // Check if it's there - return array('error' => 'Bad HTTP response from file location: ' . $response_code); - } - // Get data $data = static::getContentFromURL($url); if (! empty($data['error'])) { diff --git a/lib/CleantalkSP/Common/Validate.php b/lib/CleantalkSP/Common/Validate.php index 1525684db..317e4ea29 100644 --- a/lib/CleantalkSP/Common/Validate.php +++ b/lib/CleantalkSP/Common/Validate.php @@ -126,4 +126,16 @@ public static function isValidFilePath($variable) { return false; } + + /** + * Validate http response code + * + * @param int $variable + * + * @return bool + */ + public static function isValidHTTPResponseCode($variable) + { + return (bool)preg_match('/^[1-5][0-9][0-9]$/', (string)$variable); + } } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php index 27044672b..b11b3b553 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php @@ -220,17 +220,12 @@ public function getContent() if (defined('SPBCT_ALLOW_CURL_SINGLE') && SPBCT_ALLOW_CURL_SINGLE) { foreach ( $this->pages as $key => &$page ) { if ( filter_var($page['guid'], FILTER_VALIDATE_URL) ) { - if ( HTTP::getResponseCode($page['guid']) === 200 ) { - $result = HTTP::getContentFromURL($page['guid']); - if (empty($result['error'])) { - $this->pages[ $key ]['content'] = $result; - } else { - $this->postMarkAsChecked($page['ID']); - unset($this->pages[ $key ]); - } + $result = HTTP::getContentFromURL($page['guid']); + if (empty($result['error'])) { + $this->pages[ $key ]['content'] = $result; } else { $this->postMarkAsChecked($page['ID']); - unset($this->pages[$key]); + unset($this->pages[ $key ]); } } else { $this->postMarkAsChecked($page['ID']); @@ -400,6 +395,11 @@ public static function sendFmsLogs() $page_text_arr = []; $page_content = HTTP::getContentFromURL($fms_value['url']); + + if (!empty($page_content['error'])) { + continue; + } + foreach (preg_split("/((\r?\n)|(\r\n?))/", $page_content) as $line) { $page_text_arr[] = $line; } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Helper.php b/lib/CleantalkSP/SpbctWP/Scanner/Helper.php index f36f45597..dd2a527cb 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Helper.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Helper.php @@ -20,7 +20,7 @@ public static function getHashesForCMS($cms, $version) $file_path = 'https://cleantalk-security.s3.amazonaws.com/cms_checksums/' . $cms . '/' . $version . '/' . $cms . '_' . $version . '.json.gz'; if ( HTTP::getResponseCode($file_path) === 200 ) { - $gz_data = HTTP::getContentFromURL($file_path); + $gz_data = HTTP::getContentFromURL($file_path, false); if ( empty($gz_data['error']) ) { if ( function_exists('gzdecode') ) { @@ -64,7 +64,7 @@ public static function getHashesForModules($cms, $type, $plugin, $version) $file_path = 'https://cleantalk-security.s3.amazonaws.com/extensions_checksums/' . $cms . '/' . $type . 's/' . $plugin . '/' . $version . '.csv.gz'; if ( HTTP::getResponseCode($file_path) === 200 ) { - $gz_data = HTTP::getContentFromURL($file_path); + $gz_data = HTTP::getContentFromURL($file_path, false); if ( empty($gz_data['error']) ) { if ( function_exists('gzdecode') ) { @@ -126,7 +126,7 @@ public static function getHashesForApprovedFiles($cms, $type, $version) $file_path = 'https://cleantalk-security.s3-us-west-2.amazonaws.com/extensions_checksums/' . $cms . '/' . $type . '/' . $version . '.csv.gz'; if ( HTTP::getResponseCode($file_path) === 200 ) { - $gz_data = HTTP::getContentFromURL($file_path); + $gz_data = HTTP::getContentFromURL($file_path, false); if ( empty($gz_data['error']) ) { if ( function_exists('gzdecode') ) { @@ -245,9 +245,11 @@ public static function getOriginalFile($file_info) break; } + $page_content = HTTP::getContentFromURL($url_path); + /** @psalm-suppress TypeDoesNotContainType */ - return (int) HTTP::getResponseCode($url_path) === 200 - ? HTTP::getContentFromURL($url_path) - : array('error' => "Couldn't get an original file"); + return empty($page_content['error']) + ? $page_content + : array('error' => "Couldn't get an original file: " . $page_content['error']); } } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Links.php b/lib/CleantalkSP/SpbctWP/Scanner/Links.php index 8790ac289..19f91781f 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Links.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Links.php @@ -159,11 +159,12 @@ public function getPosts($amount) // Getting default pages if ( $this->check_default && ! count($this->content) ) { foreach ( $this->default_pages as $page ) { - if ( HTTP::getResponseCode(get_site_url() . $page) === 200 ) { + $post_content = HTTP::getContentFromURL(get_site_url() . $page); + if ( empty($post_content['error']) ) { $this->content[] = array( 'post_type' => 'default', 'post_id' => get_site_url() . $page, - 'post_content' => HTTP::getContentFromURL(get_site_url() . $page), + 'post_content' => $post_content, ); } } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 1171ab876..aae467c07 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -1888,13 +1888,13 @@ public function important_files_listing() // phpcs:ignore PSR1.Methods.CamelCaps foreach ( $addresses_to_check_listing as $address ) { $url_to_check = get_option('home') . $address; + $page = HTTP::getContentFromURL($url_to_check); if ( - HTTP::getResponseCode($url_to_check) === 200 + empty($page['error']) && + is_string($page) && + strpos($page, 'Index of ' . $address) !== false ) { - $page = HTTP::getContentFromURL($url_to_check); - if ( strpos($page, 'Index of ' . $address) !== false ) { - $out['accessible_urls'][] = array('url' => $address, 'type' => 'listing'); - } + $out['accessible_urls'][] = array('url' => $address, 'type' => 'listing'); } } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Stages/SignatureAnalysis/Repository.php b/lib/CleantalkSP/SpbctWP/Scanner/Stages/SignatureAnalysis/Repository.php index 286d999ef..bb68dea8a 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Stages/SignatureAnalysis/Repository.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Stages/SignatureAnalysis/Repository.php @@ -34,15 +34,13 @@ public static function getSignaturesFromCloud($latest_signature_submitted_time) { // Check signatures version. File contains time of the signatures latest update. $version_file_url = 'https://cleantalk-security.s3.us-west-2.amazonaws.com/security_signatures/version.txt'; - if ( HTTP::getResponseCode($version_file_url) === 200 ) { - $latest_signatures = HTTP::getContentFromURL($version_file_url); - if ( ! empty($latest_signatures['error']) || ! strtotime($latest_signatures) ) { - return array('error' => 'WRONG_VERSION_FILE'); - } + $latest_signatures = HTTP::getContentFromURL($version_file_url); + if ( ! empty($latest_signatures['error']) || ! strtotime($latest_signatures) ) { + return array('error' => 'WRONG_VERSION_FILE'); + } - if ( strtotime($latest_signature_submitted_time) >= strtotime($latest_signatures) ) { - return array('error' => 'UP_TO_DATE'); - } + if ( strtotime($latest_signature_submitted_time) >= strtotime($latest_signatures) ) { + return array('error' => 'UP_TO_DATE'); } // _v2 since 2.31 version From 661d58788f37621eb0564ca80f8f43d54bb2ab49 Mon Sep 17 00:00:00 2001 From: SVFCode Date: Fri, 14 Jul 2023 08:39:39 +0300 Subject: [PATCH 023/109] Update. SecFW. Manage Firewall as option and refactored clear scanner logs button for admin access. (#218) * Update. Scanner. Add btn to clear tables with logs and add option for sfw. * Update. SFW. Hide Firewall tab if sfw is disabled. * Update. Clear scan logs. Replaced button to link and moved it after the scan logs. * Update. SecFW. Renamed sfw to secfw. * Fix. SecFW. Changed text in alert and tooltip. * Fix. SecFW. Fixed apikey error occur after turn off secfw. * Update. SecFW. Added clear scan logs link without reload. * Fix. SecFW. Removed firewall in admin bar if it turn off, fix typo, fix logs gathering. --- inc/admin-bar.php | 12 ++++---- inc/spbc-admin.php | 1 + inc/spbc-settings.php | 31 ++++++++++++-------- js/spbc-scanner-plugin.min.js | 2 +- js/spbc-scanner-plugin.min.js.map | 2 +- js/spbc-settings.min.js | 5 ++-- js/spbc-settings.min.js.map | 3 +- js/spbc-settings_tab--scanner.min.js | 4 +-- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/src/spbc-scanner-plugin.js | 6 ++++ js/src/spbc-settings.js | 8 ++++-- js/src/spbc-settings_tab--scanner.js | 36 +++++++++++++++++++++--- lib/CleantalkSP/Security/Firewall.php | 10 +++++-- lib/CleantalkSP/SpbctWP/State.php | 1 + security-malware-firewall.php | 31 ++++++++++---------- 15 files changed, 105 insertions(+), 49 deletions(-) diff --git a/inc/admin-bar.php b/inc/admin-bar.php index a1d1a55ed..323662c02 100644 --- a/inc/admin-bar.php +++ b/inc/admin-bar.php @@ -212,11 +212,13 @@ function spbc_admin__admin_bar__add_child_nodes($wp_admin_bar) : ''; // FireWall - $wp_admin_bar->add_node(array( - 'parent' => 'spbc__parent_node', - 'id' => 'spbc_admin_bar__traffic_control_link', - 'title' => '' . __('FireWall', 'security-malware-firewall') . '', - )); + if ( (int) $spbc->settings['secfw__enabled'] ) { + $wp_admin_bar->add_node(array( + 'parent' => 'spbc__parent_node', + 'id' => 'spbc_admin_bar__traffic_control_link', + 'title' => '' . __('FireWall', 'security-malware-firewall') . '', + )); + } $wp_admin_bar->add_node(array( 'parent' => 'spbc__parent_node', diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 1299c87ed..62405cb6f 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -251,6 +251,7 @@ function spbc_enqueue_scripts($hook) 'is_main_site' => (int) is_main_site(), 'img_path' => SPBC_PATH . '/images', 'key_is_ok' => $spbc->key_is_ok, + 'secfw_enabled' => $spbc->settings['secfw__enabled'], 'ajax_nonce' => wp_create_nonce("spbc_secret_nonce"), 'ajaxurl' => admin_url('admin-ajax.php', 'relative'), //'debug' => !empty($debug) ? 1 : 0, diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 34f5e55c5..95e33a960 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -114,7 +114,7 @@ function spbc_settings__register() // Firewall 'traffic_control' => array( 'type' => 'tab', - 'display' => $spbc->fw_enabled, + 'display' => $spbc->fw_enabled && $spbc->settings['secfw__enabled'], 'title' => __('Firewall', 'security-malware-firewall'), 'icon' => 'spbc-icon-exchange', 'class_prefix' => 'spbc', @@ -409,6 +409,12 @@ function spbc_settings__register() 'type' => 'field', 'input_type' => 'hidden', ), + 'secfw__enabled' => array( + 'type' => 'field', + 'title' => __('Security FireWall', 'security-malware-firewall'), + 'description' => __('This option allows to filter bots before they access website. Also reduces CPU usage on hosting server and accelerates pages load time.', 'security-malware-firewall'), + 'long_description' => true, + ), 'waf__enabled' => array( 'type' => 'field', 'title' => __('Web Application Firewall', 'security-malware-firewall'), @@ -2652,17 +2658,6 @@ function spbc_field_scanner() _e('Found outdated plugins or themes. Please, update to latest versions.', 'security-malware-firewall'); echo '

'; - //* Debug Buttons - // Clear hashes - if (in_array(Server::getDomain(), array('lc', 'loc', 'lh', 'wordpress'), true)) { - echo '' - . '' - . '

'; - } - //*/ - echo '
' . '' . __('Receiving core hashes', 'security-malware-firewall') . ' -> ' @@ -2730,6 +2725,14 @@ function spbc_field_scanner() spbc_scan_results_log_module(); } + // Clear hashes + if (! empty($spbc->data['scanner']['last_scan'])) { + echo '' + . ''; + } + echo '
'; echo spbc_bulk_actions_description(); @@ -4100,6 +4103,10 @@ function spbc_settings__get_description() : ''; $descriptions = array( + 'secfw__enabled' => array( + 'title' => __('Security FireWall', 'security-malware-firewall'), + 'desc' => __('Security FireWall is a part of the security service and blocks a malicious active before the site pages load.', 'security-malware-firewall') + ), 'waf__xss_check' => array( 'title' => __('XSS check', 'security-malware-firewall'), 'desc' => __('Cross-Site Scripting (XSS) — prevents malicious code to be executed/sent to any user. As a result malicious scripts can not get access to the cookie files, session tokens and any other confidential information browsers use and store. Such scripts can even overwrite content of HTML pages. ' . $spbc->data["wl_company_name"] . ' WAF monitors for patterns of these parameters and block them.', 'security-malware-firewall') diff --git a/js/spbc-scanner-plugin.min.js b/js/spbc-scanner-plugin.min.js index 5032782d1..14df29394 100644 --- a/js/spbc-scanner-plugin.min.js +++ b/js/spbc-scanner-plugin.min.js @@ -1,2 +1,2 @@ -"use strict";class spbcMalwareScanner{first_start=!0;active=!1;root="";settings=[];states=["get_cms_hashes","get_modules_hashes","clean_results","file_system_analysis","get_approved_hashes","signature_analysis","heuristic_analysis","auto_cure_backup","auto_cure","outbound_links","frontend_analysis","important_files_listing","send_results"];state=null;offset=0;amount=0;total_scanned=0;scan_percent=0;percent_completed=0;paused=!1;button=null;spinner=null;progress_overall=null;progressbar=null;progressbar_text=null;timeout=6e4;state_timer=0;constructor(t){for(var s in console.log("init"),jQuery("#spbcscan-results-log-module").length&&jQuery(".spbc-scan-log-title").removeClass("spbc---hidden"),void 0!==t.settings.auto_cure&&(t.settings.scanner__auto_cure_backup="1"),t)void 0!==this[s]&&(this[s]=t[s])}actionControl(){null===this.state?this.start():this.paused?(this.resume(),this.controller()):this.pause()}start(){this.active=!0,this.state_timer=Math.round((new Date).getTime()/1e3),this.state=this.getNextState(null),this.setPercents(0),this.scan_percent=0,this.offset=0,this.progress_overall.children("span").removeClass("spbc_bold").filter(".spbc_overall_scan_status_"+this.state).addClass("spbc_bold"),this.progressbar.show(500),this.progress_overall.show(500),this.button.html(spbcScaner.button_scan_pause),this.spinner.css({display:"inline"}),setTimeout(()=>{this.controller()},1e3)}pause(t,s,e){console.log("PAUSE"),this.button.html(spbcScaner.button_scan_resume),this.spinner.css({display:"none"}),this.paused=!0,this.active=!1}resume(t){console.log("RESUME"),this.button.html(spbcScaner.button_scan_pause),this.spinner.css({display:"inline"}),this.paused=!1,this.active=!0}end(t){this.progressbar.hide(500),this.progress_overall.hide(500),this.button.html(spbcScaner.button_scan_perform),this.spinner.css({display:"none"}),this.state=null,this.total_links=0,this.plug=!1,this.total_scanned=0,this.active=!1,t?document.location=document.location:spbc_sendAJAXRequest({action:"spbc_scanner_tab__reload_accordion"},{notJson:!0,callback:function(t,s,e,a){jQuery(a).accordion("destroy").html(t).accordion({header:"h3",heightStyle:"content",collapsible:!0,active:!1}),spbc_tbl__bulk_actions__listen(),spbc_tbl__row_actions__listen(),spbc_tbl__pagination__listen(),spbc_tbl__sort__listen(),spbcStartShowHide(),spbc_scanner__reload_scan_info()}},jQuery("#spbc_scan_accordion"))}controller(t){if(console.log(this.state),void 0!==t&&t.end){if(this.state=this.getNextState(this.state),void 0===this.state)return void this.end();this.setPercents(0),this.scan_percent=0,this.offset=0,this.progress_overall.children("span").removeClass("spbc_bold").filter(".spbc_overall_scan_status_"+this.state).addClass("spbc_bold")}if(!0!==this.paused){var s={action:"spbc_scanner_controller_front",method:this.state,offset:this.offset},t={type:"GET",success:this.success,callback:this.successCallback,error:this.error,errorOutput:this.errorOutput,complete:null,context:this,timeout:12e4};switch(this.state){case"get_modules_hashes":this.amount=2;break;case"clear_table":this.amount=1e4;break;case"file_system_analysis":this.amount=700;break;case"auto_cure":this.amount=5;break;case"outbound_links":this.amount=10;break;case"frontend_analysis":this.amount=spbcSettings.frontendAnalysisAmount;break;case"signature_analysis":this.amount=10,s.status="UNKNOWN,MODIFIED,OK,INFECTED";break;case"heuristic_analysis":this.amount=4,s.status="UNKNOWN,MODIFIED,OK,INFECTED"}s.amount=this.amount,spbc_sendAJAXRequest(s,t,jQuery("#spbc_scan_accordion"))}}getNextState(t){return t=null===t?this.states[0]:this.states[this.states.indexOf(t)+1],t=void 0!==this.settings["scanner__"+t]&&0==+this.settings["scanner__"+t]?this.getNextState(t):t}setPercents(t){this.percent_completed=Math.floor(100*t)/100,this.progressbar.progressbar("option","value",this.percent_completed),this.progressbar_text.text(spbcScaner["progressbar_"+this.state]+" - "+this.percent_completed+"%")}success(t){t.error?this.error({status:200,responseText:t.error},t.error,t.msg):this.successCallback&&this.successCallback(t,this.data,this.obj)}successCallback(t){console.log(t),void 0!==t.total&&(this.scan_percent=100/t.total),void 0!==t.processed_items&&("heuristic_analysis"===this.state&&0!==typeof t.total&&this.logRaw('

Heuristic Analysis

'),"signature_analysis"===this.state&&0!==typeof t.total&&this.logRaw('

Signature Analysis

'),this.logFileEntry(t.processed_items)),void 0!==t.stage_data_for_logging&&this.logStageEntry(t.stage_data_for_logging),"undefined"!==t.cured&&0{this.controller(t)},300))}error(t,s,e){var a=this.errorOutput;if(console.log("%c APBCT_AJAX_ERROR","color: red;"),console.log(s),console.log(e),console.log(t),200===t.status)if("parsererror"===s)a("Unexpected response from server. See console for details.",this.state),console.log("%c "+t.responseText,"color: pink;");else{let t=s;void 0!==e&&(t+=" Additional info: "+e),a(t,this.state)}else 500===t.status?a("Internal server error.",this.state):a("Unexpected response code: "+t.status+". Error: "+s,this.state);this.progressbar&&this.progressbar.fadeOut("slow"),this.end()}errorOutput(t,s){spbcModal.open().putError(t+"
Stage: "+s)}logRaw(t){jQuery(".spbc-scan-log-title").removeClass("spbc---hidden"),jQuery(".spbc_log-wrapper").removeClass("spbc---hidden"),jQuery(".spbc_log-wrapper .panel-body").prepend(t)}logFileEntry(t){for(var s in t)this.logRaw('

'+this.getSiteUTCShiftedTimeString()+" - "+t[s].path+": "+t[s].status+"

")}logStageEntry(t){this.logRaw('

'+this.getSiteUTCShiftedTimeString()+" - "+t.title+" "+t.description+"

")}showLinkForShuffleSalts(t){jQuery("#spbc_notice_about_shuffle_link").remove(),jQuery(jQuery(".spbc_tab--active .spbc_wrapper_field p")[1]).after('")}getSiteUTCShiftedTimeString(){var t=!1,s=-1*(new Date).getTimezoneOffset()*1e3*60,s=(t="undefined"!=typeof spbcScaner&&void 0!==spbcScaner.timezone_shift&&!1!==spbcScaner.timezone_shift?Date.now()-s+1e3*spbcScaner.timezone_shift:t)?new Date(t):new Date,t=new Intl.DateTimeFormat("en-US",{month:"short"}).format,e=String(s.getMinutes()).padStart(2,"0"),a=String(s.getSeconds()).padStart(2,"0");return t(s)+" "+s.getDate()+" "+s.getFullYear()+" "+s.getHours()+":"+e+":"+a}} +"use strict";class spbcMalwareScanner{first_start=!0;active=!1;root="";settings=[];states=["get_cms_hashes","get_modules_hashes","clean_results","file_system_analysis","get_approved_hashes","signature_analysis","heuristic_analysis","auto_cure_backup","auto_cure","outbound_links","frontend_analysis","important_files_listing","send_results"];state=null;offset=0;amount=0;total_scanned=0;scan_percent=0;percent_completed=0;paused=!1;button=null;spinner=null;progress_overall=null;progressbar=null;progressbar_text=null;timeout=6e4;state_timer=0;constructor(s){for(var t in console.log("init"),jQuery("#spbcscan-results-log-module").length&&jQuery(".spbc-scan-log-title").removeClass("spbc---hidden"),void 0!==s.settings.auto_cure&&(s.settings.scanner__auto_cure_backup="1"),s)void 0!==this[t]&&(this[t]=s[t])}actionControl(){null===this.state?this.start():this.paused?(this.resume(),this.controller()):this.pause()}start(){this.active=!0,this.state_timer=Math.round((new Date).getTime()/1e3),this.state=this.getNextState(null),this.setPercents(0),this.scan_percent=0,this.offset=0,this.progress_overall.children("span").removeClass("spbc_bold").filter(".spbc_overall_scan_status_"+this.state).addClass("spbc_bold"),this.progressbar.show(500),this.progress_overall.show(500),this.button.html(spbcScaner.button_scan_pause),this.spinner.css({display:"inline"}),setTimeout(()=>{this.controller()},1e3)}pause(s,t,e){console.log("PAUSE"),this.button.html(spbcScaner.button_scan_resume),this.spinner.css({display:"none"}),this.paused=!0,this.active=!1}resume(s){console.log("RESUME"),this.button.html(spbcScaner.button_scan_pause),this.spinner.css({display:"inline"}),this.paused=!1,this.active=!0}end(s){this.progressbar.hide(500),this.progress_overall.hide(500),this.button.html(spbcScaner.button_scan_perform),this.spinner.css({display:"none"}),this.state=null,this.total_links=0,this.plug=!1,this.total_scanned=0,this.active=!1,s?document.location=document.location:(spbc_sendAJAXRequest({action:"spbc_scanner_tab__reload_accordion"},{notJson:!0,callback:function(s,t,e,a){jQuery(a).accordion("destroy").html(s).accordion({header:"h3",heightStyle:"content",collapsible:!0,active:!1}),spbc_tbl__bulk_actions__listen(),spbc_tbl__row_actions__listen(),spbc_tbl__pagination__listen(),spbc_tbl__sort__listen(),spbcStartShowHide(),spbc_scanner__reload_scan_info()}},jQuery("#spbc_scan_accordion")),jQuery("#spbc_scanner_clear").length||jQuery('
').insertBefore("#spbcscan-scanner-caption"))}controller(s){if(console.log(this.state),void 0!==s&&s.end){if(this.state=this.getNextState(this.state),void 0===this.state)return void this.end();this.setPercents(0),this.scan_percent=0,this.offset=0,this.progress_overall.children("span").removeClass("spbc_bold").filter(".spbc_overall_scan_status_"+this.state).addClass("spbc_bold")}if(!0!==this.paused){var t={action:"spbc_scanner_controller_front",method:this.state,offset:this.offset},s={type:"GET",success:this.success,callback:this.successCallback,error:this.error,errorOutput:this.errorOutput,complete:null,context:this,timeout:12e4};switch(this.state){case"get_modules_hashes":this.amount=2;break;case"clear_table":this.amount=1e4;break;case"file_system_analysis":this.amount=700;break;case"auto_cure":this.amount=5;break;case"outbound_links":this.amount=10;break;case"frontend_analysis":this.amount=spbcSettings.frontendAnalysisAmount;break;case"signature_analysis":this.amount=10,t.status="UNKNOWN,MODIFIED,OK,INFECTED";break;case"heuristic_analysis":this.amount=4,t.status="UNKNOWN,MODIFIED,OK,INFECTED"}t.amount=this.amount,spbc_sendAJAXRequest(t,s,jQuery("#spbc_scan_accordion"))}}getNextState(s){return s=null===s?this.states[0]:this.states[this.states.indexOf(s)+1],s=void 0!==this.settings["scanner__"+s]&&0==+this.settings["scanner__"+s]?this.getNextState(s):s}setPercents(s){this.percent_completed=Math.floor(100*s)/100,this.progressbar.progressbar("option","value",this.percent_completed),this.progressbar_text.text(spbcScaner["progressbar_"+this.state]+" - "+this.percent_completed+"%")}success(s){s.error?this.error({status:200,responseText:s.error},s.error,s.msg):this.successCallback&&this.successCallback(s,this.data,this.obj)}successCallback(s){console.log(s),void 0!==s.total&&(this.scan_percent=100/s.total),void 0!==s.processed_items&&("heuristic_analysis"===this.state&&0!==typeof s.total&&this.logRaw('

Heuristic Analysis

'),"signature_analysis"===this.state&&0!==typeof s.total&&this.logRaw('

Signature Analysis

'),this.logFileEntry(s.processed_items)),void 0!==s.stage_data_for_logging&&this.logStageEntry(s.stage_data_for_logging),"undefined"!==s.cured&&0{this.controller(s)},300))}error(s,t,e){var a=this.errorOutput;if(console.log("%c APBCT_AJAX_ERROR","color: red;"),console.log(t),console.log(e),console.log(s),200===s.status)if("parsererror"===t)a("Unexpected response from server. See console for details.",this.state),console.log("%c "+s.responseText,"color: pink;");else{let s=t;void 0!==e&&(s+=" Additional info: "+e),a(s,this.state)}else 500===s.status?a("Internal server error.",this.state):a("Unexpected response code: "+s.status+". Error: "+t,this.state);this.progressbar&&this.progressbar.fadeOut("slow"),this.end()}errorOutput(s,t){spbcModal.open().putError(s+"
Stage: "+t)}logRaw(s){jQuery(".spbc-scan-log-title").removeClass("spbc---hidden"),jQuery(".spbc_log-wrapper").removeClass("spbc---hidden"),jQuery(".spbc_log-wrapper .panel-body").prepend(s)}logFileEntry(s){for(var t in s)this.logRaw('

'+this.getSiteUTCShiftedTimeString()+" - "+s[t].path+": "+s[t].status+"

")}logStageEntry(s){this.logRaw('

'+this.getSiteUTCShiftedTimeString()+" - "+s.title+" "+s.description+"

")}showLinkForShuffleSalts(s){jQuery("#spbc_notice_about_shuffle_link").remove(),jQuery(jQuery(".spbc_tab--active .spbc_wrapper_field p")[1]).after('")}getSiteUTCShiftedTimeString(){var s=!1,t=-1*(new Date).getTimezoneOffset()*1e3*60,t=(s="undefined"!=typeof spbcScaner&&void 0!==spbcScaner.timezone_shift&&!1!==spbcScaner.timezone_shift?Date.now()-t+1e3*spbcScaner.timezone_shift:s)?new Date(s):new Date,s=new Intl.DateTimeFormat("en-US",{month:"short"}).format,e=String(t.getMinutes()).padStart(2,"0"),a=String(t.getSeconds()).padStart(2,"0");return s(t)+" "+t.getDate()+" "+t.getFullYear()+" "+t.getHours()+":"+e+":"+a}} //# sourceMappingURL=spbc-scanner-plugin.min.js.map diff --git a/js/spbc-scanner-plugin.min.js.map b/js/spbc-scanner-plugin.min.js.map index 7a80aced5..f818345b5 100644 --- a/js/spbc-scanner-plugin.min.js.map +++ b/js/spbc-scanner-plugin.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-scanner-plugin.min.js","sources":["spbc-scanner-plugin.js"],"sourcesContent":["'use strict';\n\nclass spbcMalwareScanner{\n\n\tfirst_start = true;\n\n\tactive = false;\n\n\troot = '';\n\tsettings = [];\n\tstates = [\n\t\t'get_cms_hashes',\n\t\t'get_modules_hashes',\n\t\t'clean_results',\n\t\t'file_system_analysis',\n\t\t'get_approved_hashes',\n\t\t'signature_analysis',\n\t\t'heuristic_analysis',\n\t\t'auto_cure_backup',\n\t\t'auto_cure',\n\t\t'outbound_links',\n\t\t'frontend_analysis',\n\t\t'important_files_listing',\n\t\t'send_results',\n\t];\n\tstate = null;\n\toffset = 0;\n\tamount = 0;\n\ttotal_scanned = 0;\n\tscan_percent = 0;\n\tpercent_completed = 0;\n\n\tpaused = false;\n\n\tbutton = null;\n\tspinner = null;\n\n\tprogress_overall = null;\n\tprogressbar = null;\n\tprogressbar_text = null;\n\n\ttimeout = 60000;\n\n\tstate_timer = 0;\n\n\tconstructor ( properties ) {\n\n\t\tconsole.log('init');\n\t\tif (jQuery('#spbcscan-results-log-module').length) {\n\t\t\tjQuery('.spbc-scan-log-title').removeClass('spbc---hidden')\n\t\t}\n\n\t\t// Crunch for cure backups\n\t\tif( typeof properties['settings']['auto_cure'] !== 'undefined' ){\n\t\t\tproperties['settings']['scanner__auto_cure_backup'] = '1';\n\t\t}\n\n\t\tfor( let key in properties ){\n\t\t\tif( typeof this[key] !== 'undefined' ){\n\t\t\t\tthis[key] = properties[key];\n\t\t\t}\n\t\t}\n\n\t};\n\n\tactionControl(){\n\n\t\tif(this.state === null){\n\t\t\tthis.start();\n\n\t\t}else if(this.paused){\n\t\t\tthis.resume();\n\t\t\tthis.controller();\n\n\t\t}else{\n\t\t\tthis.pause();\n\t\t}\n\t};\n\n\tstart(){\n\n\t\tthis.active = true;\n\t\tthis.state_timer = Math.round(new Date().getTime() /1000);\n\n\t\tthis.state = this.getNextState( null );\n\n\t\tthis.setPercents( 0 );\n\t\tthis.scan_percent = 0;\n\t\tthis.offset = 0;\n\t\tthis.progress_overall.children('span')\n\t\t\t.removeClass('spbc_bold')\n\t\t\t.filter('.spbc_overall_scan_status_' + this.state)\n\t\t\t.addClass('spbc_bold');\n\n\t\tthis.progressbar.show(500);\n\t\tthis.progress_overall.show(500);\n\t\tthis.button.html(spbcScaner.button_scan_pause);\n\t\tthis.spinner.css({display: 'inline'});\n\n\t\tsetTimeout(() => {\n\t\t\tthis.controller();\n\t\t}, 1000);\n\n\t};\n\n\tpause( result, data, opt ){\n\t\tconsole.log('PAUSE');\n\t\tthis.button.html(spbcScaner.button_scan_resume);\n\t\tthis.spinner.css({display: 'none'});\n\t\tthis.paused = true;\n\t\tthis.active = false;\n\t};\n\n\tresume( opt ){\n\t\tconsole.log('RESUME');\n\t\tthis.button.html(spbcScaner.button_scan_pause);\n\t\tthis.spinner.css({display: 'inline'});\n\t\tthis.paused = false;\n\t\tthis.active = true;\n\t};\n\n\tend( reload ){\n\n\t\tthis.progressbar.hide(500);\n\t\tthis.progress_overall.hide(500);\n\t\tthis.button.html(spbcScaner.button_scan_perform);\n\t\tthis.spinner.css({display: 'none'});\n\t\tthis.state = null;\n\t\tthis.total_links = 0;\n\t\tthis.plug = false;\n\t\tthis.total_scanned = 0;\n\t\tthis.active = false;\n\n\t\tif(reload){\n\t\t\tdocument.location = document.location;\n\t\t}else{\n\t\t\tspbc_sendAJAXRequest(\n\t\t\t\t{action: 'spbc_scanner_tab__reload_accordion'},\n\t\t\t\t{\n\t\t\t\t\tnotJson: true,\n\t\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\t\tjQuery(obj).accordion('destroy')\n\t\t\t\t\t\t\t.html(result)\n\t\t\t\t\t\t\t.accordion({\n\t\t\t\t\t\t\t\theader: 'h3',\n\t\t\t\t\t\t\t\theightStyle: 'content',\n\t\t\t\t\t\t\t\tcollapsible: true,\n\t\t\t\t\t\t\t\tactive: false,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\tspbc_tbl__bulk_actions__listen();\n\t\t\t\t\t\tspbc_tbl__row_actions__listen();\n\t\t\t\t\t\tspbc_tbl__pagination__listen();\n\t\t\t\t\t\tspbc_tbl__sort__listen();\n\t\t\t\t\t\tspbcStartShowHide();\n\t\t\t\t\t\tspbc_scanner__reload_scan_info();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tjQuery('#spbc_scan_accordion')\n\t\t\t);\n\t\t}\n\n\t};\n\n\tcontroller( result ) {\n\n\t\tconsole.log(this.state);\n\n\t\t// The current stage is over. Switching to the new one\n\t\tif( typeof result !== 'undefined' && result.end ){\n\n\t\t\tthis.state = this.getNextState( this.state );\n\n\t\t\t// End condition\n\t\t\tif (typeof this.state === 'undefined'){\n\t\t\t\tthis.end();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set percent to 0\n\t\t\tthis.setPercents( 0 );\n\t\t\tthis.scan_percent = 0;\n\t\t\tthis.offset = 0;\n\n\t\t\t// Changing visualizing of the current stage\n\t\t\tthis.progress_overall.children('span')\n\t\t\t\t.removeClass('spbc_bold')\n\t\t\t\t.filter('.spbc_overall_scan_status_' + this.state)\n\t\t\t\t.addClass('spbc_bold');\n\t\t}\n\n\t\t// Break execution if paused\n\t\tif( this.paused === true )\n\t\t\treturn;\n\n\t\t// // AJAX params\n\t\tlet data = {\n\t\t\taction: 'spbc_scanner_controller_front',\n\t\t\tmethod: this.state,\n\t\t\toffset: this.offset,\n\t\t};\n\n\t\tvar params = {\n\t\t\ttype: 'GET',\n\t\t\tsuccess: this.success,\n\t\t\tcallback: this.successCallback,\n\t\t\terror: this.error,\n\t\t\terrorOutput: this.errorOutput,\n\t\t\tcomplete: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 120000\n\t\t};\n\n\t\tswitch (this.state) {\n\t\t\tcase 'get_modules_hashes': this.amount = 2; break;\n\t\t\tcase 'clear_table': this.amount = 10000; break;\n\t\t\tcase 'file_system_analysis': this.amount = 700; break;\n\t\t\tcase 'auto_cure': this.amount = 5; break;\n\t case 'outbound_links': this.amount = 10; break;\n\t case 'frontend_analysis': this.amount = spbcSettings.frontendAnalysisAmount; break;\n\t\t\tcase 'signature_analysis': this.amount = 10; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED'; break;\n\t\t\tcase 'heuristic_analysis': this.amount = 4; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED'; break;\n\t\t}\n\n\t\tdata.amount = this.amount;\n\n\t\tspbc_sendAJAXRequest(\n\t\t\tdata,\n\t\t\tparams,\n\t\t\tjQuery('#spbc_scan_accordion')\n\t\t);\n\n\t};\n\n\tgetNextState( state ) {\n\n\t\tstate = state === null ? this.states[0] : this.states[ this.states.indexOf( state ) + 1 ];\n\n\t\tif (typeof this.settings[ 'scanner__' + state ] !== 'undefined' && +this.settings[ 'scanner__' + state ] === 0)\n\t\t\tstate = this.getNextState( state );\n\n\t\treturn state;\n\t};\n\n\tsetPercents( percents ){\n\t\tthis.percent_completed = Math.floor( percents * 100 ) / 100;\n\t\tthis.progressbar.progressbar( 'option', 'value', this.percent_completed );\n\t\tthis.progressbar_text.text( spbcScaner[ 'progressbar_' + this.state ] + ' - ' + this.percent_completed + '%' );\n\t};\n\n\tsuccess( response ){\n\n\t\tif( !! response.error ){\n\n\t\t\tthis.error(\n\t\t\t\t{status: 200, responseText: response.error},\n\t\t\t\tresponse.error,\n\t\t\t\tresponse.msg\n\t\t\t);\n\n\t\t}else{\n\t\t\tif( this.successCallback )\n\t\t\t\tthis.successCallback( response, this.data, this.obj );\n\t\t}\n\n\t};\n\n\t// Processing response from backend\n\tsuccessCallback( result ){\n\n\t\tconsole.log( result );\n\n\t\tif( typeof result.total !== 'undefined' )\n\t\t\tthis.scan_percent = 100 / result.total;\n\n\t\tif( typeof result.processed_items !== 'undefined'){\n\n\t\t\tif( this.state === 'heuristic_analysis' && typeof result.total !== 0 )\n\t\t\t\tthis.logRaw('

Heuristic Analysis

');\n\t\t\tif( this.state === 'signature_analysis' && typeof result.total !== 0 )\n\t\t\t\tthis.logRaw('

Signature Analysis

');\n\n\t\t\tthis.logFileEntry( result.processed_items );\n\t\t}\n\n\t\tif( typeof result.stage_data_for_logging !== 'undefined'){\n\t\t\tthis.logStageEntry( result.stage_data_for_logging );\n\t\t}\n\n\t\t// Add link on shuffle salt if cured\n\t\tif (result.cured !== 'undefined' && Number(result.cured) > 0) {\n\t\t\tthis.showLinkForShuffleSalts(result.message);\n\t\t}\n\n\t\tif( result.end !== true && result.end !== 1 ){\n\t\t\tthis.setPercents( this.percent_completed + result.processed * this.scan_percent );\n\t\t\tthis.offset = this.offset + result.processed;\n\t\t\tthis.controller( result );\n\t\t}else{\n\t\t\tconsole.log( this.state + \" stage took \" + ( Math.round(new Date().getTime() /1000) - this.state_timer ) + \" seconds to complete\" );\n\t\t\tthis.state_timer = Math.round(new Date().getTime()/1000);\n\t\t\tthis.setPercents( 100 );\n\t\t\tthis.scan_percent = 0;\n\t\t\tthis.offset = 0;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.controller( result );\n\t\t\t}, 300);\n\t\t}\n\t};\n\n\terror( xhr, status, error ){\n\n\t\tlet errorOutput = this.errorOutput;\n\n\t\tconsole.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\n\t\tconsole.log( status );\n\t\tconsole.log( error );\n\t\tconsole.log( xhr );\n\n\t\tif( xhr.status === 200 ){\n\t\t\tif( status === 'parsererror' ){\n\t\t\t\terrorOutput( 'Unexpected response from server. See console for details.', this.state );\n\t\t\t\tconsole.log( '%c ' + xhr.responseText, 'color: pink;' );\n\t\t\t}else{\n\t\t\t\tlet error_string = status;\n\t\t\t\tif( typeof error !== 'undefined' )\n\t\t\t\t\terror_string += ' Additional info: ' + error;\n\t\t\t\terrorOutput( error_string, this.state );\n\t\t\t}\n\t\t}else if(xhr.status === 500){\n\t\t\terrorOutput( 'Internal server error.', this.state);\n\t\t}else\n\t\t\terrorOutput('Unexpected response code: ' + xhr.status + '. Error: ' + status, this.state);\n\n\t\tif( this.progressbar )\n\t\t\tthis.progressbar.fadeOut('slow');\n\n\t\tthis.end();\n\t};\n\n\terrorOutput( error_msg, stage ){\n\t\tspbcModal.open().putError( error_msg + '
Stage: ' + stage);\n\t};\n\n\tlogRaw(message_to_log ){\n\t\tjQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\n\t\tjQuery('.spbc_log-wrapper').removeClass('spbc---hidden');\n\t\tjQuery('.spbc_log-wrapper .panel-body').prepend( message_to_log );\n\t};\n\n\tlogFileEntry(items){\n\t\tfor ( var key in items ){\n\t\t\tthis.logRaw( '

' + this.getSiteUTCShiftedTimeString() + ' - ' + items[ key ].path + ': ' + items[ key ].status + '

' );\n\t\t}\n\t};\n\n\tlogStageEntry(data){\n\t\tthis.logRaw( '

' + this.getSiteUTCShiftedTimeString() + ' - ' + '' + data.title + ' ' + '' + data.description + '

' );\n\t};\n\n\tshowLinkForShuffleSalts(message) {\n\t\tjQuery('#spbc_notice_about_shuffle_link').remove();\n\t\tjQuery(jQuery('.spbc_tab--active .spbc_wrapper_field p')[1])\n\t\t\t.after(\n\t\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\tmessage +\n\t\t\t\t'' +\n\t\t\t\t'
'\n\t\t\t);\n\t}\n\n\tgetSiteUTCShiftedTimeString(){\n\t\tvar utc_shifted_ts = false;\n\t\t//gettings current system/browser offset\n\t\tvar current_browser_offset = new Date().getTimezoneOffset();\n\t\tcurrent_browser_offset = current_browser_offset * -1 * 1000 * 60;\n\t\t//chek if global ct object is defined\n\t\tif (typeof spbcScaner !== \"undefined\"\n\t\t\t&& typeof spbcScaner.timezone_shift !== \"undefined\"\n\t\t\t&& spbcScaner.timezone_shift !== false){\n\t\t\tutc_shifted_ts = Date.now() - current_browser_offset + (spbcScaner.timezone_shift * 1000);\n\t\t}\n\t\tvar ct_date = utc_shifted_ts ? new Date(utc_shifted_ts) : new Date();\n\t\t//construct date string\n\t\tvar shortMonthName = new Intl.DateTimeFormat(\"en-US\", { month: \"short\" }).format;\n\t\tvar minutes = String(ct_date.getMinutes()).padStart(2, '0');\n\t\tvar seconds = String(ct_date.getSeconds()).padStart(2, '0');\n\t\treturn shortMonthName(ct_date) + ' ' + ct_date.getDate() + ' ' + ct_date.getFullYear() + ' ' + ct_date.getHours() + ':' + minutes + ':' + seconds\n\t}\n\n}"],"names":["spbcMalwareScanner","first_start","active","root","settings","states","state","offset","amount","total_scanned","scan_percent","percent_completed","paused","button","spinner","progress_overall","progressbar","progressbar_text","timeout","state_timer","constructor","properties","let","key","console","log","jQuery","length","removeClass","this","actionControl","start","resume","controller","pause","Math","round","Date","getTime","getNextState","setPercents","children","filter","addClass","show","html","spbcScaner","button_scan_pause","css","display","setTimeout","result","data","opt","button_scan_resume","end","reload","hide","button_scan_perform","total_links","plug","document","location","spbc_sendAJAXRequest","action","notJson","callback","params","obj","accordion","header","heightStyle","collapsible","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","spbc_scanner__reload_scan_info","method","type","success","successCallback","error","errorOutput","complete","context","spbcSettings","frontendAnalysisAmount","status","indexOf","percents","floor","text","response","responseText","msg","total","processed_items","logRaw","logFileEntry","stage_data_for_logging","logStageEntry","cured","Number","showLinkForShuffleSalts","message","processed","xhr","error_string","fadeOut","error_msg","stage","spbcModal","open","putError","message_to_log","prepend","items","getSiteUTCShiftedTimeString","path","title","description","remove","after","utc_shifted_ts","current_browser_offset","getTimezoneOffset","ct_date","timezone_shift","now","shortMonthName","Intl","DateTimeFormat","month","format","minutes","String","getMinutes","padStart","seconds","getSeconds","getDate","getFullYear","getHours"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-scanner-plugin.min.js","sources":["spbc-scanner-plugin.js"],"sourcesContent":["'use strict';\n\nclass spbcMalwareScanner{\n\n\tfirst_start = true;\n\n\tactive = false;\n\n\troot = '';\n\tsettings = [];\n\tstates = [\n\t\t'get_cms_hashes',\n\t\t'get_modules_hashes',\n\t\t'clean_results',\n\t\t'file_system_analysis',\n\t\t'get_approved_hashes',\n\t\t'signature_analysis',\n\t\t'heuristic_analysis',\n\t\t'auto_cure_backup',\n\t\t'auto_cure',\n\t\t'outbound_links',\n\t\t'frontend_analysis',\n\t\t'important_files_listing',\n\t\t'send_results',\n\t];\n\tstate = null;\n\toffset = 0;\n\tamount = 0;\n\ttotal_scanned = 0;\n\tscan_percent = 0;\n\tpercent_completed = 0;\n\n\tpaused = false;\n\n\tbutton = null;\n\tspinner = null;\n\n\tprogress_overall = null;\n\tprogressbar = null;\n\tprogressbar_text = null;\n\n\ttimeout = 60000;\n\n\tstate_timer = 0;\n\n\tconstructor ( properties ) {\n\n\t\tconsole.log('init');\n\t\tif (jQuery('#spbcscan-results-log-module').length) {\n\t\t\tjQuery('.spbc-scan-log-title').removeClass('spbc---hidden')\n\t\t}\n\n\t\t// Crunch for cure backups\n\t\tif( typeof properties['settings']['auto_cure'] !== 'undefined' ){\n\t\t\tproperties['settings']['scanner__auto_cure_backup'] = '1';\n\t\t}\n\n\t\tfor( let key in properties ){\n\t\t\tif( typeof this[key] !== 'undefined' ){\n\t\t\t\tthis[key] = properties[key];\n\t\t\t}\n\t\t}\n\n\t};\n\n\tactionControl(){\n\n\t\tif(this.state === null){\n\t\t\tthis.start();\n\n\t\t}else if(this.paused){\n\t\t\tthis.resume();\n\t\t\tthis.controller();\n\n\t\t}else{\n\t\t\tthis.pause();\n\t\t}\n\t};\n\n\tstart(){\n\n\t\tthis.active = true;\n\t\tthis.state_timer = Math.round(new Date().getTime() /1000);\n\n\t\tthis.state = this.getNextState( null );\n\n\t\tthis.setPercents( 0 );\n\t\tthis.scan_percent = 0;\n\t\tthis.offset = 0;\n\t\tthis.progress_overall.children('span')\n\t\t\t.removeClass('spbc_bold')\n\t\t\t.filter('.spbc_overall_scan_status_' + this.state)\n\t\t\t.addClass('spbc_bold');\n\n\t\tthis.progressbar.show(500);\n\t\tthis.progress_overall.show(500);\n\t\tthis.button.html(spbcScaner.button_scan_pause);\n\t\tthis.spinner.css({display: 'inline'});\n\n\t\tsetTimeout(() => {\n\t\t\tthis.controller();\n\t\t}, 1000);\n\n\t};\n\n\tpause( result, data, opt ){\n\t\tconsole.log('PAUSE');\n\t\tthis.button.html(spbcScaner.button_scan_resume);\n\t\tthis.spinner.css({display: 'none'});\n\t\tthis.paused = true;\n\t\tthis.active = false;\n\t};\n\n\tresume( opt ){\n\t\tconsole.log('RESUME');\n\t\tthis.button.html(spbcScaner.button_scan_pause);\n\t\tthis.spinner.css({display: 'inline'});\n\t\tthis.paused = false;\n\t\tthis.active = true;\n\t};\n\n\tend( reload ){\n\n\t\tthis.progressbar.hide(500);\n\t\tthis.progress_overall.hide(500);\n\t\tthis.button.html(spbcScaner.button_scan_perform);\n\t\tthis.spinner.css({display: 'none'});\n\t\tthis.state = null;\n\t\tthis.total_links = 0;\n\t\tthis.plug = false;\n\t\tthis.total_scanned = 0;\n\t\tthis.active = false;\n\n\t\tif(reload){\n\t\t\tdocument.location = document.location;\n\t\t}else{\n\t\t\tspbc_sendAJAXRequest(\n\t\t\t\t{action: 'spbc_scanner_tab__reload_accordion'},\n\t\t\t\t{\n\t\t\t\t\tnotJson: true,\n\t\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\t\tjQuery(obj).accordion('destroy')\n\t\t\t\t\t\t\t.html(result)\n\t\t\t\t\t\t\t.accordion({\n\t\t\t\t\t\t\t\theader: 'h3',\n\t\t\t\t\t\t\t\theightStyle: 'content',\n\t\t\t\t\t\t\t\tcollapsible: true,\n\t\t\t\t\t\t\t\tactive: false,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\tspbc_tbl__bulk_actions__listen();\n\t\t\t\t\t\tspbc_tbl__row_actions__listen();\n\t\t\t\t\t\tspbc_tbl__pagination__listen();\n\t\t\t\t\t\tspbc_tbl__sort__listen();\n\t\t\t\t\t\tspbcStartShowHide();\n\t\t\t\t\t\tspbc_scanner__reload_scan_info();\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tjQuery('#spbc_scan_accordion')\n\t\t\t);\n\n\t\t\tif (!jQuery('#spbc_scanner_clear').length) {\n\t\t\t\tlet clear_link = '

Clear scanner logs


';\n\t\t\t\tjQuery(clear_link).insertBefore('#spbcscan-scanner-caption');\n\t\t\t}\n\t\t}\n\n\t};\n\n\tcontroller( result ) {\n\n\t\tconsole.log(this.state);\n\n\t\t// The current stage is over. Switching to the new one\n\t\tif( typeof result !== 'undefined' && result.end ){\n\n\t\t\tthis.state = this.getNextState( this.state );\n\n\t\t\t// End condition\n\t\t\tif (typeof this.state === 'undefined'){\n\t\t\t\tthis.end();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set percent to 0\n\t\t\tthis.setPercents( 0 );\n\t\t\tthis.scan_percent = 0;\n\t\t\tthis.offset = 0;\n\n\t\t\t// Changing visualizing of the current stage\n\t\t\tthis.progress_overall.children('span')\n\t\t\t\t.removeClass('spbc_bold')\n\t\t\t\t.filter('.spbc_overall_scan_status_' + this.state)\n\t\t\t\t.addClass('spbc_bold');\n\t\t}\n\n\t\t// Break execution if paused\n\t\tif( this.paused === true )\n\t\t\treturn;\n\n\t\t// // AJAX params\n\t\tlet data = {\n\t\t\taction: 'spbc_scanner_controller_front',\n\t\t\tmethod: this.state,\n\t\t\toffset: this.offset,\n\t\t};\n\n\t\tvar params = {\n\t\t\ttype: 'GET',\n\t\t\tsuccess: this.success,\n\t\t\tcallback: this.successCallback,\n\t\t\terror: this.error,\n\t\t\terrorOutput: this.errorOutput,\n\t\t\tcomplete: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 120000\n\t\t};\n\n\t\tswitch (this.state) {\n\t\t\tcase 'get_modules_hashes': this.amount = 2; break;\n\t\t\tcase 'clear_table': this.amount = 10000; break;\n\t\t\tcase 'file_system_analysis': this.amount = 700; break;\n\t\t\tcase 'auto_cure': this.amount = 5; break;\n\t case 'outbound_links': this.amount = 10; break;\n\t case 'frontend_analysis': this.amount = spbcSettings.frontendAnalysisAmount; break;\n\t\t\tcase 'signature_analysis': this.amount = 10; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED'; break;\n\t\t\tcase 'heuristic_analysis': this.amount = 4; data.status = 'UNKNOWN,MODIFIED,OK,INFECTED'; break;\n\t\t}\n\n\t\tdata.amount = this.amount;\n\n\t\tspbc_sendAJAXRequest(\n\t\t\tdata,\n\t\t\tparams,\n\t\t\tjQuery('#spbc_scan_accordion')\n\t\t);\n\n\t};\n\n\tgetNextState( state ) {\n\n\t\tstate = state === null ? this.states[0] : this.states[ this.states.indexOf( state ) + 1 ];\n\n\t\tif (typeof this.settings[ 'scanner__' + state ] !== 'undefined' && +this.settings[ 'scanner__' + state ] === 0)\n\t\t\tstate = this.getNextState( state );\n\n\t\treturn state;\n\t};\n\n\tsetPercents( percents ){\n\t\tthis.percent_completed = Math.floor( percents * 100 ) / 100;\n\t\tthis.progressbar.progressbar( 'option', 'value', this.percent_completed );\n\t\tthis.progressbar_text.text( spbcScaner[ 'progressbar_' + this.state ] + ' - ' + this.percent_completed + '%' );\n\t};\n\n\tsuccess( response ){\n\n\t\tif( !! response.error ){\n\n\t\t\tthis.error(\n\t\t\t\t{status: 200, responseText: response.error},\n\t\t\t\tresponse.error,\n\t\t\t\tresponse.msg\n\t\t\t);\n\n\t\t}else{\n\t\t\tif( this.successCallback )\n\t\t\t\tthis.successCallback( response, this.data, this.obj );\n\t\t}\n\n\t};\n\n\t// Processing response from backend\n\tsuccessCallback( result ){\n\n\t\tconsole.log( result );\n\n\t\tif( typeof result.total !== 'undefined' )\n\t\t\tthis.scan_percent = 100 / result.total;\n\n\t\tif( typeof result.processed_items !== 'undefined'){\n\n\t\t\tif( this.state === 'heuristic_analysis' && typeof result.total !== 0 )\n\t\t\t\tthis.logRaw('

Heuristic Analysis

');\n\t\t\tif( this.state === 'signature_analysis' && typeof result.total !== 0 )\n\t\t\t\tthis.logRaw('

Signature Analysis

');\n\n\t\t\tthis.logFileEntry( result.processed_items );\n\t\t}\n\n\t\tif( typeof result.stage_data_for_logging !== 'undefined'){\n\t\t\tthis.logStageEntry( result.stage_data_for_logging );\n\t\t}\n\n\t\t// Add link on shuffle salt if cured\n\t\tif (result.cured !== 'undefined' && Number(result.cured) > 0) {\n\t\t\tthis.showLinkForShuffleSalts(result.message);\n\t\t}\n\n\t\tif( result.end !== true && result.end !== 1 ){\n\t\t\tthis.setPercents( this.percent_completed + result.processed * this.scan_percent );\n\t\t\tthis.offset = this.offset + result.processed;\n\t\t\tthis.controller( result );\n\t\t}else{\n\t\t\tconsole.log( this.state + \" stage took \" + ( Math.round(new Date().getTime() /1000) - this.state_timer ) + \" seconds to complete\" );\n\t\t\tthis.state_timer = Math.round(new Date().getTime()/1000);\n\t\t\tthis.setPercents( 100 );\n\t\t\tthis.scan_percent = 0;\n\t\t\tthis.offset = 0;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.controller( result );\n\t\t\t}, 300);\n\t\t}\n\t};\n\n\terror( xhr, status, error ){\n\n\t\tlet errorOutput = this.errorOutput;\n\n\t\tconsole.log( '%c APBCT_AJAX_ERROR', 'color: red;' );\n\t\tconsole.log( status );\n\t\tconsole.log( error );\n\t\tconsole.log( xhr );\n\n\t\tif( xhr.status === 200 ){\n\t\t\tif( status === 'parsererror' ){\n\t\t\t\terrorOutput( 'Unexpected response from server. See console for details.', this.state );\n\t\t\t\tconsole.log( '%c ' + xhr.responseText, 'color: pink;' );\n\t\t\t}else{\n\t\t\t\tlet error_string = status;\n\t\t\t\tif( typeof error !== 'undefined' )\n\t\t\t\t\terror_string += ' Additional info: ' + error;\n\t\t\t\terrorOutput( error_string, this.state );\n\t\t\t}\n\t\t}else if(xhr.status === 500){\n\t\t\terrorOutput( 'Internal server error.', this.state);\n\t\t}else\n\t\t\terrorOutput('Unexpected response code: ' + xhr.status + '. Error: ' + status, this.state);\n\n\t\tif( this.progressbar )\n\t\t\tthis.progressbar.fadeOut('slow');\n\n\t\tthis.end();\n\t};\n\n\terrorOutput( error_msg, stage ){\n\t\tspbcModal.open().putError( error_msg + '
Stage: ' + stage);\n\t};\n\n\tlogRaw(message_to_log ){\n\t\tjQuery('.spbc-scan-log-title').removeClass('spbc---hidden');\n\t\tjQuery('.spbc_log-wrapper').removeClass('spbc---hidden');\n\t\tjQuery('.spbc_log-wrapper .panel-body').prepend( message_to_log );\n\t};\n\n\tlogFileEntry(items){\n\t\tfor ( var key in items ){\n\t\t\tthis.logRaw( '

' + this.getSiteUTCShiftedTimeString() + ' - ' + items[ key ].path + ': ' + items[ key ].status + '

' );\n\t\t}\n\t};\n\n\tlogStageEntry(data){\n\t\tthis.logRaw( '

' + this.getSiteUTCShiftedTimeString() + ' - ' + '' + data.title + ' ' + '' + data.description + '

' );\n\t};\n\n\tshowLinkForShuffleSalts(message) {\n\t\tjQuery('#spbc_notice_about_shuffle_link').remove();\n\t\tjQuery(jQuery('.spbc_tab--active .spbc_wrapper_field p')[1])\n\t\t\t.after(\n\t\t\t\t'
' +\n\t\t\t\t'' +\n\t\t\t\tmessage +\n\t\t\t\t'' +\n\t\t\t\t'
'\n\t\t\t);\n\t}\n\n\tgetSiteUTCShiftedTimeString(){\n\t\tvar utc_shifted_ts = false;\n\t\t//gettings current system/browser offset\n\t\tvar current_browser_offset = new Date().getTimezoneOffset();\n\t\tcurrent_browser_offset = current_browser_offset * -1 * 1000 * 60;\n\t\t//chek if global ct object is defined\n\t\tif (typeof spbcScaner !== \"undefined\"\n\t\t\t&& typeof spbcScaner.timezone_shift !== \"undefined\"\n\t\t\t&& spbcScaner.timezone_shift !== false){\n\t\t\tutc_shifted_ts = Date.now() - current_browser_offset + (spbcScaner.timezone_shift * 1000);\n\t\t}\n\t\tvar ct_date = utc_shifted_ts ? new Date(utc_shifted_ts) : new Date();\n\t\t//construct date string\n\t\tvar shortMonthName = new Intl.DateTimeFormat(\"en-US\", { month: \"short\" }).format;\n\t\tvar minutes = String(ct_date.getMinutes()).padStart(2, '0');\n\t\tvar seconds = String(ct_date.getSeconds()).padStart(2, '0');\n\t\treturn shortMonthName(ct_date) + ' ' + ct_date.getDate() + ' ' + ct_date.getFullYear() + ' ' + ct_date.getHours() + ':' + minutes + ':' + seconds\n\t}\n\n}"],"names":["spbcMalwareScanner","first_start","active","root","settings","states","state","offset","amount","total_scanned","scan_percent","percent_completed","paused","button","spinner","progress_overall","progressbar","progressbar_text","timeout","state_timer","constructor","properties","let","key","console","log","jQuery","length","removeClass","this","actionControl","start","resume","controller","pause","Math","round","Date","getTime","getNextState","setPercents","children","filter","addClass","show","html","spbcScaner","button_scan_pause","css","display","setTimeout","result","data","opt","button_scan_resume","end","reload","hide","button_scan_perform","total_links","plug","document","location","spbc_sendAJAXRequest","action","notJson","callback","params","obj","accordion","header","heightStyle","collapsible","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","spbc_scanner__reload_scan_info","insertBefore","method","type","success","successCallback","error","errorOutput","complete","context","spbcSettings","frontendAnalysisAmount","status","indexOf","percents","floor","text","response","responseText","msg","total","processed_items","logRaw","logFileEntry","stage_data_for_logging","logStageEntry","cured","Number","showLinkForShuffleSalts","message","processed","xhr","error_string","fadeOut","error_msg","stage","spbcModal","open","putError","message_to_log","prepend","items","getSiteUTCShiftedTimeString","path","title","description","remove","after","utc_shifted_ts","current_browser_offset","getTimezoneOffset","ct_date","timezone_shift","now","shortMonthName","Intl","DateTimeFormat","month","format","minutes","String","getMinutes","padStart","seconds","getSeconds","getDate","getFullYear","getHours"],"mappings":"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"} \ No newline at end of file diff --git a/js/spbc-settings.min.js b/js/spbc-settings.min.js index 805a26d86..e20727e18 100644 --- a/js/spbc-settings.min.js +++ b/js/spbc-settings.min.js @@ -1,2 +1,3 @@ -function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
").append("").append("

"+e.title+"

").append("

"+e.desc+"

"),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
").append("").append("

"+e.title+"

").append("

"+e.desc+"

"),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); -//# sourceMappingURL=spbc-settings.min.js.map + +function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
").append("").append("

"+e.title+"

").append("

"+e.desc+"

"),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

"+e.data+"

").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

"+e.data+"

").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); + diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 9e8f38997..8e7df2dba 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1,2 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
\");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
\")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
\")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

\"+result.title+\"

\")\n\t\t\t\t\t.append(\"

\"+result.desc+\"

\");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
\");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
\")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
\")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

\"+result.title+\"

\")\n\t\t\t\t\t.append(\"

\"+result.desc+\"

\");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\t// spbc_tab = document.getElementsByClassName('spbc_tab_nav-summary')[0];\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_settings__show_recommendation","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","remove_recommendation_func","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file + +{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
\");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
\")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
\")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

\"+result.title+\"

\")\n\t\t\t\t\t.append(\"

\"+result.desc+\"

\");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

\" + result.data + \"

\" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","secfw_enabled","which","keyCode","active_tab"],"mappings":"AAYA,SAASA,eAAeC,EAAKC,GAE5B,IAAIC,EAAWF,EAAIG,UAAU,GAAGC,QAAQ,gBAAiB,EAAE,EAGvDC,EAAe,IAAIC,gBAAgBC,OAAOC,SAASC,MAAM,EAEzDC,GADDL,EAAaM,IAAI,WAAYT,CAAQ,EACxBK,OAAOC,SAASI,MACzBC,EAAuBN,OAAOC,SAASM,SAAW,IAAMT,EAAaU,SAAS,EAAIL,EAezF,GAbGM,QAAQC,aAAa,KAAM,GAAIJ,CAAoB,EAGf,YAAjCR,EAAaa,IAAI,UAAU,GAC7BC,OAAO,uBAAuB,EAAEC,KAAK,EAIzCD,OAAO,eAAe,EAAEE,YAAY,sBAAsB,EAC1DF,OAAO,WAAW,EAAEE,YAAY,kBAAkB,EAClDF,OAAOnB,CAAG,EAAEsB,SAAS,sBAAsB,EAC3CH,OAAO,aAAajB,CAAQ,EAAEoB,SAAS,kBAAkB,EAErDH,OAAOnB,CAAG,EAAEuB,KAAK,QAAQ,GAYvB,GAAGtB,GAAUA,EAAOuB,OACnB,OAAQvB,EAAOuB,QACX,IAAK,YACDC,qBAAqBxB,EAAOyB,OAAQzB,EAAO0B,KAAK,EAChD,MACJ,IAAK,QACDC,WAAW,WACPT,OAAO,IAAIlB,EAAO4B,WAAWH,MAAM,EAAEI,MAAM,CAC/C,EAAG,GAAG,CAEd,CACP,KAvB+B,CAC1BP,EAAO,CACVC,OAAQ,+BACRtB,SAAUA,EACV6B,SAAUC,aAAaC,UACxB,EACIhC,EAAS,CACZiC,SAAUC,4BACVC,QAAS,CAAA,EACAP,WAAY5B,GAAU,IAChC,EACAoC,qBAAsBd,EAAMtB,EAAQD,CAAI,CACzC,CAYD,CAEA,SAASmC,4BAA4BG,EAAQf,EAAMtB,EAAQsC,GAE1DpB,OAAOoB,CAAG,EAAEhB,KAAK,SAAU,CAAA,CAAI,EAC/BJ,OAAO,aAAaI,EAAKrB,QAAQ,EAAEsC,YAAYF,CAAM,EACjDtC,EAAMmB,OAAO,aAAaI,EAAKrB,QAAQ,EAS3C,GARAF,EAAIsB,SAAS,kBAAkB,EAE/BH,OAAOsB,QAAQ,EAAEC,IAAK,QAAS,8BAA8B,EAC7DvB,OAAOsB,QAAQ,EAAEE,GAAG,QAAS,+BAAgC,WAE5DC,gCADAC,KAAO1B,OAAO2B,IAAI,EACoBD,KAAKE,KAAK,SAAS,CAAC,CAC3D,CAAC,EAEE9C,EAAO4B,WACN,OAAQ5B,EAAO4B,WAAWL,QACnB,IAAK,YACPC,qBAAqBxB,EAAO4B,WAAWH,OAAQzB,EAAO4B,WAAWF,KAAK,EAChE,MACJ,IAAK,QACDC,WAAW,WACbT,OAAO,IAAIlB,EAAO4B,WAAWH,MAAM,EAAEI,MAAM,CACzC,EAAG,GAAG,CAEd,CAGPX,OAAOnB,CAAG,EAAE2C,GAAG,QAAS,mBAAmBpB,EAAKrB,SAAU,WACxDiB,OAAO,mBAAmBI,EAAKrB,QAAQ,EAAEkB,KAAK,EAC/CiB,qBACC,CAACb,OAAQ,aAAaD,EAAKrB,SAAUA,SAAUqB,EAAKrB,QAAQ,EAC5D,CAACgC,SAAUc,uBAAuB,CACnC,CACD,CAAC,EAGGzC,OAAOC,SAASI,MACnB6B,SAASQ,eAAe1C,OAAOC,SAASI,KAAKsC,UAAU,CAAC,CAAC,EAAEC,eAAe,CAE5E,CAEA,SAASH,wBAAwBV,EAAQf,EAAMtB,EAAQsC,GACtDpB,OAAO,iBAAiBI,EAAKrB,QAAQ,EAAEqB,KAAK,SAAU,CAAA,CAAK,EAC3DxB,eAAe0C,SAASW,uBAAuB,gBAAgB7B,EAAKrB,QAAQ,EAAE,EAAE,CACjF,CAGA,SAASmD,6BAA6BC,EAAaC,GAExB,UAAvB,OAAOD,KACTE,IAAM,IACFC,KAAKH,CAAW,EACpBA,EAAcE,KAGfD,EAA2B,KAAA,IAAXA,EAAyB,KAAO,CAACA,EAEjDD,EAAYI,QAAQ,SAASC,EAAWC,EAAGC,GAGnB,SAAbC,IAAwBC,EAAKC,aAAa,WAAY,UAAU,CAAE,CACrD,SAAbC,IAAwBF,EAAKG,gBAAgB,UAAU,CAAE,CAFnE,IAAIH,EAAOtB,SAASQ,eAAe,gBAAgBU,CAAS,GAIxC,OAAXJ,EACY,IAAXA,EAAeU,EAAcH,EAEK,OAAlCC,EAAKI,aAAa,UAAU,EAAaL,EAAeG,GAF/B,CAIpC,CAAC,CACF,CAQA,SAASG,yBAAyBC,EAAcd,GAG/Cc,EAAuC,UAAxB,OAAOA,EAA4BA,EAAaC,MAAM,GAAG,EAAID,EAC5Ed,EAAiC,KAAA,IAAXA,EAAyB,CAACgB,MAAM7C,OAAO8C,QAAU,CAACjB,EAExEc,EAAaX,QAAQ,SAASe,EAAab,EAAGC,GAE7CpB,SAASiC,kBAAkB,iBAAiBD,EAAY,GAAG,EACzDf,QAAQ,SAAUK,EAAMH,EAAGC,GAEV,SAAbC,IAAwBC,EAAKC,aAAa,WAAY,UAAU,CAAE,CACxD,SAAbC,IAAwBF,EAAKG,gBAAgB,UAAU,CAAE,EAC5C,OAAXX,EACS,IAAXA,EAAeU,EAAcH,EAEK,OAAlCC,EAAKI,aAAa,UAAU,EAAaL,EAAeG,GAF/B,EAH1B,IAOIU,EAAWZ,EAAKI,aAAa,UAAU,EAC1B,OAAbQ,GACHP,yBAAyBO,EAAUpB,GAAUQ,EAAKS,OAAO,CAE3D,CAAC,CACH,CAAC,CACF,CAEA,SAAS5B,gCAAgCgC,EAAOC,GAExB,SAAnBC,EAA4BC,GACf,KAAA,IAANA,IAA4E,GAArD5D,OAAO4D,EAAErD,MAAM,EAAEsD,OAAO,iBAAiB,EAAEC,QAAe9D,CAAAA,OAAO4D,EAAErD,MAAM,EAAEwD,SAAS,wBAAwB,GAAO/D,OAAO4D,EAAErD,MAAM,EAAEwD,SAAS,6BAA6B,KAC1M/D,OAAO,iBAAiB,EAAEgE,OAAO,EACjChE,OAAOsB,QAAQ,EAAEC,IAAI,QAASoC,CAAgB,EAEhD,CAEAA,EAAiB,EAEjBF,EAAMQ,MAAM,4BAA4BP,EAAW,iCAAiC,EATpF,IAUItC,EAAMpB,OAAO,oBAAoB0D,CAAU,EAC/CtC,EAAI8C,OAAO,8CAA8C,EACvDA,OAAO,oDAAoD,EAC3DC,IAAI,CACJC,IAAKX,EAAMY,SAAS,EAAED,IAAM,GAC5BE,KAAMb,EAAMY,SAAS,EAAEC,KAAO,CAC/B,CAAC,EAGFpD,qBACC,CAACb,OAAQ,iCAAkCqD,WAAYA,CAAU,EACjE,CACCa,QAASnD,EAAIoC,SAAS,KAAK,EAC3BzC,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GAExCA,EAAIoD,MAAM,EACRN,OAAO,oDAAoD,EAC3DA,OAAO,yDAAyD,EAChEA,OAAO,qCAAqC/C,EAAOsD,MAAM,OAAO,EAChEP,OAAO,MAAM/C,EAAOuD,KAAK,MAAM,EAEjC1E,OAAOsB,QAAQ,EAAEE,GAAG,QAASmC,CAAgB,CAC9C,CACD,EACAvC,CACD,CACD,CAGA,SAASuD,oBACR3E,OAAO,gBAAgB,EACrBuB,IAAI,WAAY,EAChBC,GAAG,YAAa,WAAYxB,OAAO2B,IAAI,EAAEiD,KAAK,EAAEC,KAAK,CAAG,CAAC,EACzDtD,IAAI,UAAW,EACfC,GAAG,WAAc,WAAYxB,OAAO2B,IAAI,EAAEiD,KAAK,EAAE3E,KAAK,CAAI,CAAC,EAC7DD,OAAO,eAAe,EACpBuB,IAAI,UAAW,EACfC,GAAG,WAAc,WAAYxB,OAAO2B,IAAI,EAAE1B,KAAK,CAAI,CAAC,EACpDsB,IAAI,WAAY,EAChBC,GAAG,YAAa,WAAYxB,OAAO2B,IAAI,EAAEkD,KAAK,CAAG,CAAC,CACrD,CAGA,SAASC,gCAER,IAAI1E,EAAO,GACP2E,EAAM,CACVC,QAAc,CAAA,CADH,EAkBX,OAhBA5E,EAAKQ,SAAWC,aAAaC,WAC7BV,EAAKC,OAAS,kCAEdL,OAAOiF,KAAK,CACXC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKvE,aAAawE,QAClBjF,KAAMA,EACN4E,QAAS,SAAS7D,GACdA,EAAO6D,QACTD,EAAIC,QAAU,CAAA,EAEdD,EAAIO,KAAOnE,EAAOf,IAEpB,CACD,CAAC,EACM2E,CACR,CAEA,SAASQ,2BAA4BC,EAAaC,EAASC,GAE1D,IAAIC,EAAUH,EACVpF,EAAO,GACXA,EAAKQ,SAAWC,aAAaC,WAC7BV,EAAKC,OAAS,+BACdD,EAAKwF,KAAO5F,OAAO,0BAA0B,EAAE6F,IAAI,EAEnD7F,OAAOiF,KAAK,CACXC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKvE,aAAawE,QAClBjF,KAAMA,EACN4E,QAAS,SAAS7D,GACdA,EAAO6D,SACThF,OAAO,uBAAuB,EAAE4B,KAAK,UAAW,EAAE,EAClD+D,EAAQtC,QAAU,CAAA,EAClBrD,OAAO,0BAA0B,EAAE8F,WAAW,UAAU,EACxD9F,OAAO,yCAAyC,EAAE4B,KAAK,WAAW,UAAU,EAC5EmE,aAAcN,CAAQ,EACtBC,EAAM1B,OAAO,EACbhE,OAAO,oBAAoB,EAAEgG,OAAQ,OAAQ,GAE7CC,MAAM,2BAA2B,CAEnC,CACD,CAAC,CAEF,CAKA,SAASC,oBACR,IAAIC,EAAgBC,YAAa,WAChClF,qBACC,CAACb,OAAQ,mCAAmC,EAC5C,CACCU,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GACpCD,EAAOkF,qBACNrG,OAAO,oBAAoB,EAAE8D,QAChC9D,OAAO,oBAAoB,EAAEC,KAAK,MAAM,EACrCD,OAAO,oBAAoB,EAAE8D,QAChC9D,OAAO,oBAAoB,EAAEC,KAAK,MAAM,EACzCqG,cAAcH,CAAa,EAE7B,CACD,CACD,CACD,EAAG,GAAK,CACT,CAnSAI,OAAOC,UAAUC,OAAS,WACtB,IACSC,EADLC,EAAYhF,KAChB,IAAS+E,KAAOE,UACZ,IAAIC,EAAmBF,EAAU5E,UAAU,EAAG4E,EAAUG,QAAQ,KAAM,CAAC,CAAC,EACpEC,EAAmBJ,EAAU5E,UAAU4E,EAAUG,QAAQ,KAAM,CAAC,EAAE,EAAGH,EAAU7C,MAAM,EACzF6C,EAAYE,EAAmBD,UAAUF,GAAOK,EAEpD,OAAOJ,CACX,EA6RA3G,OAAOsB,QAAQ,EAAE0F,MAAM,WAEtBhH,OAAO,uBAAuB,EAAEwB,GAAG,QAAS,WAC3CxB,OAAO,cAAc,EAAEgG,OAAO,CAC7BiB,MAAM,CAAA,EACNpC,KAAM,CAAA,EACNR,SAAU,CAAE6C,GAAI,SAAUC,GAAI,SAAUC,GAAIhI,MAAO,EACnDiI,MAASrH,OAAO,SAAS,EAAEqH,MAAM,EAAI,IAAM,GAC3CC,OAAQ,OACR7C,MAAO,kBACP8C,UAAW,CAAA,EACXC,UAAW,CAAA,EACXC,UAAW,OACZ,CAAC,CACF,CAAC,EAGDzH,OAAOsB,QAAQ,EAAEE,GAAG,QAAS,+DAAgE,SAASoC,GAErGA,EAAE8D,eAAe,EAEjB1H,OAAO,4BAA4B,EAAE4B,KAAK,WAAY,UAAU,EAC9DsC,OAAO,8GAA8G,EACvH,IAAIyD,EAAelH,WAAW,WAC7BT,OAAO,4BAA4B,EAAE8F,WAAW,UAAU,EAC1D9F,OAAO,oCAAoC,EAAEgE,OAAO,CACrD,EAAG,GAAK,EAEJe,EAAMD,8BAA8B,EACpCC,EAAIC,SACPhF,OAAO,0BAA0B,EAAE6F,IAAI,EAAE,EACzC7F,OAAO,oBAAoB,EAAEgG,OAAO,CACnCiB,MAAO,CAAA,EACPxC,MAAO,oBACP4C,MAAO,IACPO,QAAS,CACRC,OAAQ,WACP7H,OAAQ2B,IAAK,EAAEqE,OAAQ,OAAQ,EAC/BD,aAAc4B,CAAa,EAC3B3H,OAAO,oCAAoC,EAAEgE,OAAO,CACrD,EACA8D,GAAI,WACHvC,2BAA2B3B,EAAErD,OAAQoH,EAAc3H,OAAO,oCAAoC,CAAC,CAChG,CACD,EACAuH,UAAW,CAAA,EACXC,UAAW,CAAA,CACZ,CAAC,GAEDvB,MAAMlB,EAAIO,IAAI,CAEhB,CAAC,GAEGtF,OAAO,oBAAoB,EAAE8D,QAAU9D,OAAO,oBAAoB,EAAE8D,SACvEoC,kBAAkB,EAInBlG,OAAO,oBAAoB,EAAEwB,GAAG,QAAS,WACxCN,qBACC,CAACb,OAAQ,WAAW,EACpB,CACCoF,QAAS,KACTsC,OAAQzG,SAASQ,eAAe,mBAAoB,EACpDyC,QAASvE,OAAO,2CAA4C,EAC5De,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GACxCpB,OAAO,kCAAkC,EAAE6E,KAAK,GAAG,EACnDpE,WAAW,WAAWT,OAAO,kCAAkC,EAAEC,KAAK,GAAG,CAAE,EAAG,GAAI,EAC/EkB,EAAO6G,QACT1G,SAASjC,SAAS2I,OAAO,CAC3B,CACD,CACD,CACD,CAAC,EAEGnH,aAAaoH,aAChBjI,OAAO,oBAAoB,EAAEW,MAAM,EAIpCX,OAAOsB,QAAQ,EAAEE,GAAG,QAAS,6BAA8B,WAC1DN,qBACC,CAACb,OAAQ,mBAAmB,EAC5B,CACCoF,QAAS,KACTsC,OAAQzG,SAASQ,eAAe,2BAA4B,EAC5DyC,QAASvE,OAAO,mDAAoD,EACpEe,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GACxCpB,OAAO,0CAA0C,EAAE6E,KAAK,GAAG,EAC3DpE,WAAW,WAAWT,OAAO,0CAA0C,EAAEC,KAAK,GAAG,CAAE,EAAG,GAAI,EACvFkB,EAAO6G,QACT1G,SAASjC,SAAS2I,OAAO,EACvB7G,EAAO+G,eACTC,UAAUC,OAASjH,EAAO+G,aAC1BC,UAAUE,KAAK,EACf/G,SAASgH,iBAAiB,kBAAmB,SAAU1E,GACtDtC,SAASjC,SAAS2I,OAAO,CAC1B,CAAC,EAEH,CACD,CACD,CACD,CAAC,EAGDhI,OAAQsB,QAAS,EAAEE,GAAG,QAAS,yCAA0C,WACxExB,OAAO,mBAAmB,EAAEgE,OAAO,EACnC,IAYI+D,EAZAQ,EAAiBvI,OAAO,kBAAmBA,OAAO,iCAAiC,CAAC,EAChEA,OAAO,sCAAsC,EACnDmE,IAAI,eAAgB,SAAS,EACN,KAAA,IAA9BoE,EAAenI,KAAK,IAAI,EAClCoI,QAAQC,IAAK,6CAA8C,GAGxDrI,EAAO,CACVsI,YAAgBH,EAAenI,KAAK,IAAI,EACxCuI,cAAkBJ,EAAenI,KAAK,MAAM,EAC5CwI,SAAaL,EAAenI,KAAK,UAAU,CAC5C,EACI2H,EAASpG,KACbT,qBACC,CAACb,OAAQ,iCAAkCD,KAAMA,CAAI,EACrD,CACCqF,QAAS,KACTsC,OAAQA,EACRxD,QAASvE,OAAO,+DAAgE,EAChFe,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GACrCD,EAAO6D,SACThF,OAAQ,4CAA8CmB,EAAOf,KAAO,MAAO,EAAEyI,YAAa7I,OAAO+H,CAAM,CAAE,EACzG/H,OAAO,sDAAsD,EAAE6E,KAAK,GAAG,EACvEpE,WAAW,WAAWT,OAAO,sDAAsD,EAAEC,KAAK,GAAG,CAAE,EAAG,GAAI,EACtGqB,SAASgH,iBAAiB,kBAAmB,SAAU1E,GACtDtC,SAASjC,SAAS2I,OAAO,CAC1B,CAAC,EACDvH,WAAW,WAAW0H,UAAUW,MAAM,CAAC,EAAG,GAAI,GAE9C9I,OAAQ,0CAA4CmB,EAAOf,KAAO,MAAO,EAAEyI,YAAa7I,OAAO+H,CAAM,CAAE,CAEzG,CACD,CACD,EACD,CAAC,EAGD/H,OAAQsB,QAAS,EAAEE,GAAG,QAAS,yCAA0C,WACxExB,OAAO,mBAAmB,EAAEgE,OAAO,EACnC,IAAIuE,EAAiBvI,OAAO,kBAAmBA,OAAO,iCAAiC,CAAC,EACpF+I,EAAoB/I,OAAO,sCAAsC,EAErE,GADA+I,EAAkB5E,IAAI,eAAgB,SAAS,EACN,KAAA,IAA9BoE,EAAenI,KAAK,IAAI,EAClCoI,QAAQC,IAAK,6CAA8C,MAD5D,CAIA,GAAkC,iBAA9BF,EAAenI,KAAK,IAAI,EAAuB,CAClD,IAAI4I,EAAeD,EAAkBlD,IAAI,EACzC,GAAqB,KAAjBmD,EAEH,OADAD,KAAAA,EAAkB5E,IAAI,eAAgB,KAAK,EAGxC/D,EAAO,CACVuI,cAAkBK,CACnB,CACD,MACK5I,EAAO,CACVsI,YAAgBH,EAAenI,KAAK,IAAI,CACzC,EAED,IAAI2H,EAASpG,KACbT,qBACC,CAACb,OAAQ,iCAAkCD,KAAMA,CAAI,EACrD,CACCqF,QAAS,KACTsC,OAAQA,EACRxD,QAASvE,OAAO,+DAAgE,EAChFe,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GACrCD,EAAO6D,SACThF,OAAQ,4CAA8CmB,EAAOf,KAAO,MAAO,EAAEyI,YAAa7I,OAAO+H,CAAM,CAAE,EACzG/H,OAAO,sDAAsD,EAAE6E,KAAK,GAAG,EACvEpE,WAAW,WAAWT,OAAO,sDAAsD,EAAEC,KAAK,GAAG,CAAE,EAAG,GAAI,EACtGqB,SAASgH,iBAAiB,kBAAmB,SAAU1E,GACtDtC,SAASjC,SAAS2I,OAAO,CAC1B,CAAC,EACDvH,WAAW,WAAW0H,UAAUW,MAAM,CAAC,EAAG,GAAI,GAE9C9I,OAAQ,0CAA4CmB,EAAOf,KAAO,MAAO,EAAEyI,YAAa7I,OAAO+H,CAAM,CAAE,CAEzG,CACD,CACD,CApCA,CAqCD,CAAC,EAGD/H,OAAQsB,QAAS,EAAEE,GAAG,QAAS,wCAAyC,WACvE,IAAIuG,EAASpG,KACbT,qBACC,CAACb,OAAQ,+BAA+B,EACxC,CACCoF,QAAS,KACTsC,OAAQA,EACRxD,QAASvE,OAAO,8DAA+D,EAC/Ee,SAAU,SAASI,EAAQf,EAAMtB,EAAQsC,GACrCD,EAAO6D,SACThF,OAAQ,4CAA8CmB,EAAOf,KAAO,MAAO,EAAEyI,YAAa7I,OAAO+H,CAAM,CAAE,EACzG/H,OAAO,qDAAqD,EAAE6E,KAAK,GAAG,EACtEpE,WAAW,WAAWT,OAAO,qDAAqD,EAAEC,KAAK,GAAG,CAAE,EAAG,GAAI,EACrGqB,SAASgH,iBAAiB,kBAAmB,SAAU1E,GACtDtC,SAASjC,SAAS2I,OAAO,CAC1B,CAAC,EACDvH,WAAW,WAAW0H,UAAUW,MAAM,CAAC,EAAG,GAAI,GAE9C9I,OAAQ,0CAA4CmB,EAAOf,KAAO,MAAO,EAAEyI,YAAa7I,OAAO+H,CAAM,CAAE,CAEzG,CACD,CACD,CACD,CAAC,EAED/H,OAAOsB,QAAQ,EAAEE,GAAG,SAAU,kCAAkC,WAE5B,iBADdxB,OAAO,kBAAmB2B,IAAI,EAC/BvB,KAAK,IAAI,EAC5BJ,OAAO2B,IAAI,EAAEkC,OAAO,EAAEA,OAAO,EAAEoF,KAAK,sCAAsC,EAAEpE,KAAK,EAEjF7E,OAAO2B,IAAI,EAAEkC,OAAO,EAAEA,OAAO,EAAEoF,KAAK,sCAAsC,EAAEhJ,KAAK,CAEnF,CAAC,EAIAD,OAAO,uBAAuB,EAAEI,KAAK,SAAU,CAAA,CAAI,EACnDJ,OAAO,wBAAwB,EAAEwB,GAAG,QAAS,gBAAiB,SAAS4B,GACtExE,eAAewE,EAAM8F,aAAa,CACnC,CAAC,EAGK,IAAIpK,EAAS,CACTyB,OAAQlB,SAASC,OAAO6J,MAAM,yBAAyB,EAAI9J,SAASC,OAAO6J,MAAM,yBAAyB,EAAE,GAAK,KACjH9I,OAAQhB,SAASC,OAAO6J,MAAM,yBAAyB,EAAI9J,SAASC,OAAO6J,MAAM,yBAAyB,EAAE,GAAK,KACjH3I,MAAOnB,SAASC,OAAO6J,MAAM,wBAAwB,EAAM9J,SAASC,OAAO6J,MAAM,wBAAwB,EAAE,GAAM,CACrH,EAQFC,GANEtK,EAAOyB,OAASlB,SAASC,OAAO6J,MAAM,4BAA4B,EAAI9J,SAASC,OAAO6J,MAAM,4BAA4B,EAAE,GAAKrK,EAAOyB,OACtIzB,EAAOuB,OAAiE,CAAC,GAAzDhB,SAASC,OAAOA,OAAO,4BAA4B,EAC7D,YACAR,EAAOuB,OAGJiB,SAASW,uBAAuB,iBAAmB5C,SAASC,OAAO6J,MAAM,sBAAsB,EAAI9J,SAASC,OAAO6J,MAAM,sBAAsB,EAAE,GAAK,GAAG,EAAE,IAAM,MAkC7KE,GA9BAD,IAGO,CAACvI,aAAayI,MACvBF,EAAW9H,SAASW,uBAAuB,oBAAoB,EAAE,GAExD,CAACpB,aAAa0I,MAAQ,CAAC,CAAC1I,aAAa2I,aAC9CJ,EAAW9H,SAASW,uBAAuB,2BAA2B,EAAE,GAE/D,CAACpB,aAAa4I,WAAa,CAAC5I,aAAa6I,cAClDN,EAAW9H,SAASW,uBAAuB,8BAA8B,EAAE,GAElE,CAACpB,aAAa4I,UACvBL,EAAW9H,SAASW,uBAAuB,sBAAsB,EAAE,IAGnEmH,EAAW9H,SAASW,uBAAuB,+BAA+B,EAAE,GAC5EnD,EAAS,CACLyB,OAAQ,WACCF,OAAQ,YACRG,MAAO,CACX,IAIP4I,GAAUxK,eAAewK,EAAUtK,CAAM,EAK3B,CAAA,GAElBkB,OAAOsB,QAAQ,EAAEE,GAAG,QAAS,SAASoC,GACP,KAAzBA,EAAE+F,OAAS/F,EAAEgG,WAAgBP,EAAc,CAAA,EACjD,CAAC,EAEDrJ,OAAOsB,QAAQ,EAAEE,GAAG,UAAW,SAASoC,GACvC,IAGKiG,EAH0B,MAAzBjG,EAAE+F,OAAS/F,EAAEgG,UAAoBP,GACtCzF,EAAE8D,eAAe,EAKA,aAHbmC,EAAa7J,OAAO,uBAAuB,EAAE,IACvBhB,UAAU,GAAGC,QAAQ,gBAAiB,EAAE,IAIlEe,OAAO6J,CAAU,EAAEzJ,KAAK,SAAU,CAAA,CAAK,EAEvCxB,eAAeiL,CAAU,IAEW,KAAzBjG,EAAE+F,OAAS/F,EAAEgG,WAClBP,EAAc,CAAA,EAEtB,CAAC,CAEF,CAAC"} diff --git a/js/spbc-settings_tab--scanner.min.js b/js/spbc-settings_tab--scanner.min.js index dcccd17d8..8e6d3d7bc 100644 --- a/js/spbc-settings_tab--scanner.min.js +++ b/js/spbc-settings_tab--scanner.min.js @@ -1,4 +1,4 @@ -function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,a=(s(),e.after("
"),jQuery(".spbc_popup_tip--wrapper"));a.empty().append("
").css({top:e.position().top-2,left:e.position().left+25}),a.append("").append("

"+t+"

").append("

"+o+"

"),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),a=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();a.height(128*t),a.width(128*t),a.css({left:o.width()/2-128*t/2}),a.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
%s

%s


'.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,a=document.documentElement.clientHeight/100*75,n=o%s

%s


':n).printf(e,s.file[e]));jQuery("#spbc_dialog").append(n.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var a,n='
%s

%s


',c=[];for(a in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[a]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
%s

%s


':n,s=l?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(n.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
%s
'.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var a=1;void 0!==s.file[a]||void 0!==s.file_original[a];a++)if(void 0===s.file[a]&&(s.file[a]=""),void 0===s.file_original[a]&&(s.file_original[a]=""),-1!=s.difference.indexOf(a)){for(let e=a-2;e<=a+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[a]&&jQuery("#spbc_dialog").append((a===e?'

%s

%s

%s


':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var n=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=n{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
  • ${o.created_at}
  • `;e=`
      +function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
      "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
      ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

      "+t+"

      ").append("

      "+o+"

      "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
      %s

      %s


      '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

      %s


      ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
      %s

      %s


      ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
      %s

      %s


      ':a,s=l?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
      %s
      '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

      %s

      %s

      %s


      ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
    • ${o.created_at}
    • `;e=`
        ${t}
      `;s.find("#spbc-fm-snapshot-list").append(e)}function drawCurrentSnapshot(s,t){var e={action:"spbc_file_monitoring_show_current_snapshot",snapshot_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,beforeSend:function(){jQuery("#spbc-file-monitoring-modal-preloader").show()},success:function(e){e.success&&(t.find("#spbc-fm-snapshot-view .wrap").remove(),t.find("[data-spanshot-id").removeClass("active"),t.find("[data-spanshot-id="+s+"]").addClass("active"),e=`
      @@ -6,5 +6,5 @@ function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target)
                                       ${e.data.content}
                                   
                               
      -
      `,jQuery("#spbc-file-monitoring-modal-preloader").hide(),t.find("#spbc-fm-snapshot-view").append(e),document.querySelectorAll("pre code").forEach(e=>{hljs.highlightElement(e)}))}})}function spbc_scanner_button_cure_file_ajax_handler(e){e={action:"spbc_file_cure_ajax_action",file_fast_hash:jQuery(e).parents(".row-actions").attr("uid"),security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(spbcModal.open().put(e.data),document.addEventListener("spbcModalClosed",function(e){document.location.reload()})):spbcModal.open().putError(e.data)}})}function spbc_scanner_button_restore_from_backup_ajax_handler(e){e={action:"spbc_restore_file_from_backup_ajax_action",file_fast_hash:jQuery(e).parents(".row-actions").attr("uid"),security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(spbcModal.open().put(e.data),document.addEventListener("spbcModalClosed",function(e){document.location.reload()})):spbcModal.open().putError(e.data)}})}jQuery(document).ready(function(){spbc_tbl__bulk_actions__listen(),spbc_tbl__row_actions__listen(),spbc_tbl__pagination__listen(),spbc_tbl__sort__listen(),spbcStartShowHide(),jQuery("#spbc_scaner_progress_bar").progressbar({value:0,create:function(e,s){e.target.style.position="relative",e.target.style.marginBottom="12px"},change:function(e,s){jQuery(".spbc_progressbar_counter span").text(jQuery(e.target).progressbar("option","value")+" %")}}),jQuery("#spbc_scan_accordion").accordion({header:"h3",heightStyle:"content",collapsible:!0,active:!1,activate:function(e,s){0===s.oldPanel.length&&0===s.oldHeader.length&&jQuery("#spbc_scan_accordion").accordion("option","classes.ui-accordion-content","ui-corner-bottom spbc-overflow--visible")},beforeActivate:function(e,s){1===s.oldPanel.length&&1===s.oldHeader.length&&jQuery("#spbc_scan_accordion").accordion("option","classes.ui-accordion-content","ui-corner-bottom")}}),window.spbc_scanner=new spbcMalwareScanner({settings:spbcScaner.settings,states:spbcScaner.states,button:jQuery("#spbc_perform_scan"),spinner:jQuery("#spbc_perform_scan").next(),callback:null,progress_overall:jQuery("#spbc_scaner_progress_overall"),progressbar:jQuery("#spbc_scaner_progress_bar"),progressbar_text:jQuery(".spbc_progressbar_counter span"),wrapper:document.getElementsByClassName("spbc_unchecked_file_list"),warnings:{long_scan:jQuery(".spbc_hint_warning__long_scan"),outdated:jQuery(".spbc_hint_warning__outdated")}}),jQuery(document).on("click",".spbc_popup_tip--icon---show",function(){spbc_popup_tip___show(jQuery(this))}),jQuery("#spbc_perform_scan").on("click",function(){jQuery("#spbcscan-results-log-module").remove(),spbc_scanner.actionControl(),jQuery(".spbc_log-wrapper .panel-body").length||jQuery(".spbc_log-wrapper").append('
      '),jQuery(".spbc_log-wrapper").resizable({handles:"n, s",containment:"document"})}),jQuery("#spbcscan-results-log-module").resizable({handles:"n, s",containment:"document"}),jQuery("#spbc_scanner_clear").on("click",function(){confirm("Do you wanna clear the table with file scan results?")&&(console.log("CLEAR"),spbc_sendAJAXRequest({action:"spbc_scanner_clear"},{type:"GET",successCallback:function(){document.location=document.location},complete:null,errorOutput:null,context:this,timeout:4e4}))}),jQuery("#spbc_scanner_save_to_pdf").on("click",function(){jQuery.ajax({url:spbcSettings.ajaxurl,type:"POST",data:{action:"spbc_scanner_save_to_pdf",security:spbcSettings.ajax_nonce,no_cache:Math.random()},xhrFields:{responseType:"blob"},success:function(o){jQuery.ajax({url:spbcSettings.ajaxurl,type:"POST",data:{action:"spbc_scanner_get_pdf_file_name",security:spbcSettings.ajax_nonce,no_cache:Math.random()},xhrFields:{responseType:"text"},success:function(e){var s=new Blob([o]),t=document.createElement("a");t.href=window.URL.createObjectURL(s),t.download=e.data,t.click()}})}})}),jQuery(document).on("click",".spbc-fm-snapshot-list [data-spanshot-id]",function(){var e=jQuery(this).data("spanshot-id");e!==jQuery(".spbc-fm-snapshot-list [data-spanshot-id].active").data("spanshot-id")&&drawCurrentSnapshot(e,jQuery("[data-remodal-id=spbc-file-monitoring-modal]"))})}); + `,jQuery("#spbc-file-monitoring-modal-preloader").hide(),t.find("#spbc-fm-snapshot-view").append(e),document.querySelectorAll("pre code").forEach(e=>{hljs.highlightElement(e)}))}})}function spbc_scanner_button_cure_file_ajax_handler(e){e={action:"spbc_file_cure_ajax_action",file_fast_hash:jQuery(e).parents(".row-actions").attr("uid"),security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(spbcModal.open().put(e.data),document.addEventListener("spbcModalClosed",function(e){document.location.reload()})):spbcModal.open().putError(e.data)}})}function spbc_scanner_button_restore_from_backup_ajax_handler(e){e={action:"spbc_restore_file_from_backup_ajax_action",file_fast_hash:jQuery(e).parents(".row-actions").attr("uid"),security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(spbcModal.open().put(e.data),document.addEventListener("spbcModalClosed",function(e){document.location.reload()})):spbcModal.open().putError(e.data)}})}function spbc_scanner_button_clear_scan_results(){confirm("Do you confirm to clear the scan results?")&&(console.log("CLEAR"),spbc_sendAJAXRequest({action:"spbc_scanner_clear"},{type:"GET",successCallback:function(){document.location=document.location},complete:null,errorOutput:null,context:this,timeout:4e4,success:function(){document.location.reload()}}))}jQuery(document).ready(function(){spbc_tbl__bulk_actions__listen(),spbc_tbl__row_actions__listen(),spbc_tbl__pagination__listen(),spbc_tbl__sort__listen(),spbcStartShowHide(),jQuery("#spbc_scaner_progress_bar").progressbar({value:0,create:function(e,s){e.target.style.position="relative",e.target.style.marginBottom="12px"},change:function(e,s){jQuery(".spbc_progressbar_counter span").text(jQuery(e.target).progressbar("option","value")+" %")}}),jQuery("#spbc_scan_accordion").accordion({header:"h3",heightStyle:"content",collapsible:!0,active:!1,activate:function(e,s){0===s.oldPanel.length&&0===s.oldHeader.length&&jQuery("#spbc_scan_accordion").accordion("option","classes.ui-accordion-content","ui-corner-bottom spbc-overflow--visible")},beforeActivate:function(e,s){1===s.oldPanel.length&&1===s.oldHeader.length&&jQuery("#spbc_scan_accordion").accordion("option","classes.ui-accordion-content","ui-corner-bottom")}}),window.spbc_scanner=new spbcMalwareScanner({settings:spbcScaner.settings,states:spbcScaner.states,button:jQuery("#spbc_perform_scan"),spinner:jQuery("#spbc_perform_scan").next(),callback:null,progress_overall:jQuery("#spbc_scaner_progress_overall"),progressbar:jQuery("#spbc_scaner_progress_bar"),progressbar_text:jQuery(".spbc_progressbar_counter span"),wrapper:document.getElementsByClassName("spbc_unchecked_file_list"),warnings:{long_scan:jQuery(".spbc_hint_warning__long_scan"),outdated:jQuery(".spbc_hint_warning__outdated")}}),jQuery(document).on("click",".spbc_popup_tip--icon---show",function(){spbc_popup_tip___show(jQuery(this))}),jQuery("#spbc_perform_scan").on("click",function(){jQuery("#spbcscan-results-log-module").remove(),spbc_scanner.actionControl(),jQuery(".spbc_log-wrapper .panel-body").length||jQuery(".spbc_log-wrapper").append('
      '),jQuery(".spbc_log-wrapper").resizable({handles:"n, s",containment:"document"})}),jQuery("#spbcscan-results-log-module").resizable({handles:"n, s",containment:"document"}),jQuery("#spbc_scanner_clear").on("click",function(){confirm("Do you confirm to clear the scan results?")&&(console.log("CLEAR"),spbc_sendAJAXRequest({action:"spbc_scanner_clear"},{type:"GET",successCallback:function(){document.location=document.location},complete:null,errorOutput:null,context:this,timeout:4e4,success:function(){document.location.reload()}}))}),jQuery("#spbc_scanner_save_to_pdf").on("click",function(){jQuery.ajax({url:spbcSettings.ajaxurl,type:"POST",data:{action:"spbc_scanner_save_to_pdf",security:spbcSettings.ajax_nonce,no_cache:Math.random()},xhrFields:{responseType:"blob"},success:function(o){jQuery.ajax({url:spbcSettings.ajaxurl,type:"POST",data:{action:"spbc_scanner_get_pdf_file_name",security:spbcSettings.ajax_nonce,no_cache:Math.random()},xhrFields:{responseType:"text"},success:function(e){var s=new Blob([o]),t=document.createElement("a");t.href=window.URL.createObjectURL(s),t.download=e.data,t.click()}})}})}),jQuery(document).on("click",".spbc-fm-snapshot-list [data-spanshot-id]",function(){var e=jQuery(this).data("spanshot-id");e!==jQuery(".spbc-fm-snapshot-list [data-spanshot-id].active").data("spanshot-id")&&drawCurrentSnapshot(e,jQuery("[data-remodal-id=spbc-file-monitoring-modal]"))})}); //# sourceMappingURL=spbc-settings_tab--scanner.min.js.map diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map index c7d810c8d..0b10266c8 100644 --- a/js/spbc-settings_tab--scanner.min.js.map +++ b/js/spbc-settings_tab--scanner.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text = show_icon.attr('spbc_tip_text') || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
      \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
      \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

      \" + tip_title + \"

      \")\n\t\t.append(\"

      \" + tip_text + \"

      \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
      %s

      %s


      ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
      %s

      %s


      ',\n\t\trow_template_bad = '
      %s

      %s


      ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
      ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

      %s

      ' +\n\t\t\t\t'
      ',\n\t\t\trow_template_bad = '
      ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

      %s

      ' +\n\t\t\t\t'
      ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
      %s
      '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

      %s

      %s

      %s


      ';\n\tlet row_template_bad = '

      %s

      %s

      %s


      ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
    • ${item.created_at}
    • `;\n\t}\n\n\tlet html =\n\t\t`
        \n ${list}\n
      `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
      \n
      \n                            \n                                ${result.data.content}\n                            \n                        
      \n
      `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
      ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t//DEBUG\n\t// Clear table\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you wanna clear the table with file scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","this","actionControl","handles","containment","confirm","successCallback","complete","context","timeout","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text = show_icon.attr('spbc_tip_text') || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
      \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
      \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

      \" + tip_title + \"

      \")\n\t\t.append(\"

      \" + tip_text + \"

      \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
      %s

      %s


      ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
      %s

      %s


      ',\n\t\trow_template_bad = '
      %s

      %s


      ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
      ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

      %s

      ' +\n\t\t\t\t'
      ',\n\t\t\trow_template_bad = '
      ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

      %s

      ' +\n\t\t\t\t'
      ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
      %s
      '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

      %s

      %s

      %s


      ';\n\tlet row_template_bad = '

      %s

      %s

      %s


      ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
    • ${item.created_at}
    • `;\n\t}\n\n\tlet html =\n\t\t`
        \n ${list}\n
      `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
      \n
      \n                            \n                                ${result.data.content}\n                            \n                        
      \n
      `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
      ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file diff --git a/js/src/spbc-scanner-plugin.js b/js/src/spbc-scanner-plugin.js index 1a194ba13..b7b3ccd4e 100644 --- a/js/src/spbc-scanner-plugin.js +++ b/js/src/spbc-scanner-plugin.js @@ -157,6 +157,12 @@ class spbcMalwareScanner{ }, jQuery('#spbc_scan_accordion') ); + + if (!jQuery('#spbc_scanner_clear').length) { + let clear_link = '
      '; + jQuery(clear_link).insertBefore('#spbcscan-scanner-caption'); + } } }; diff --git a/js/src/spbc-settings.js b/js/src/spbc-settings.js index ca49cb86d..863399ef7 100644 --- a/js/src/spbc-settings.js +++ b/js/src/spbc-settings.js @@ -596,10 +596,12 @@ jQuery(document).ready(function(){ // Switch by DEFAULT }else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){ spbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0]; - // Switch if KEY IS BAD - }else if( +spbcSettings.key_is_ok ){ - // spbc_tab = document.getElementsByClassName('spbc_tab_nav-summary')[0]; + // Switch if Key is OK and SFW is ON + }else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){ spbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0]; + // Switch if Key is OK + }else if( +spbcSettings.key_is_ok ){ + spbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0]; // Switch if KEY IS BAD }else{ spbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0]; diff --git a/js/src/spbc-settings_tab--scanner.js b/js/src/spbc-settings_tab--scanner.js index a5269184f..e5c447287 100644 --- a/js/src/spbc-settings_tab--scanner.js +++ b/js/src/spbc-settings_tab--scanner.js @@ -616,6 +616,32 @@ function spbc_scanner_button_restore_from_backup_ajax_handler(obj) }); } +/** + * Clear scan results + */ +function spbc_scanner_button_clear_scan_results() +{ + if( ! confirm('Do you confirm to clear the scan results?') ) + return; + + console.log('CLEAR'); + + spbc_sendAJAXRequest( + { action: 'spbc_scanner_clear', }, + { + type: 'GET', + successCallback: function(){ document.location = document.location }, + complete: null, + errorOutput: null, + context: this, + timeout: 40000, + success: function() { + document.location.reload(); + }, + }, + ); +} + jQuery(document).ready(function(){ // EVENT HADLING @@ -694,11 +720,10 @@ jQuery(document).ready(function(){ containment: 'document', }); - //DEBUG - // Clear table + // Clear scanner's tables jQuery('#spbc_scanner_clear').on('click', function(){ - if( ! confirm('Do you wanna clear the table with file scan results?') ) + if( ! confirm('Do you confirm to clear the scan results?') ) return; console.log('CLEAR'); @@ -711,7 +736,10 @@ jQuery(document).ready(function(){ complete: null, errorOutput: null, context: this, - timeout: 40000 + timeout: 40000, + success: function() { + document.location.reload(); + }, }, ); }); diff --git a/lib/CleantalkSP/Security/Firewall.php b/lib/CleantalkSP/Security/Firewall.php index 4df10e582..328ff0c99 100644 --- a/lib/CleantalkSP/Security/Firewall.php +++ b/lib/CleantalkSP/Security/Firewall.php @@ -108,6 +108,8 @@ public function loadFwModule(FirewallModule $module) */ public function run() { + global $spbc; + $results = array(); // Check requests by all enabled modules @@ -133,7 +135,9 @@ public function run() $result = $this->reduceFirewallResultsByPriority($results); // Write log - $this->updateLog($result); + if ( (int) $spbc->settings['secfw__enabled'] ) { + $this->updateLog($result); + } // Do finish action - die or set cookies if ( isset($result->module) ) { @@ -143,7 +147,9 @@ public function run() $this->fw_modules[$result->module]->_die($result); // Allowed } else { - $this->fw_modules[$result->module]->actionsForPassed($result); + if ( (int) $spbc->settings['secfw__enabled'] ) { + $this->fw_modules[$result->module]->actionsForPassed($result); + } } } } diff --git a/lib/CleantalkSP/SpbctWP/State.php b/lib/CleantalkSP/SpbctWP/State.php index 7d3adfb0c..d474c8b39 100644 --- a/lib/CleantalkSP/SpbctWP/State.php +++ b/lib/CleantalkSP/SpbctWP/State.php @@ -80,6 +80,7 @@ class State extends \CleantalkSP\Common\State 'scanner__frontend_analysis__domains_exclusions' => "twitter.com\nyoutube.com\nyoutube-nocookie.com\nimg.youtube.com\nmail.ru\nok.ru\nvk.com\nrutube.ru\ndailymotion.com\nyandex.ru\nflikr.com\nfacebook.com\nvimeo.com\nmetacafe.com\nyahoo.com\nmailchimp.com\ngoogletagmanager.com\ngoogle.com\n", // Web Application Firewall + 'secfw__enabled' => 1, 'waf__enabled' => 1, 'waf__xss_check' => 1, 'waf__sql_check' => 1, diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 8fe01cf15..3fafaa9d9 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -179,7 +179,7 @@ } //First start -if ( $spbc->settings && $spbc->key_is_ok ) { +if ( $spbc->settings && $spbc->key_is_ok) { // FireWall if ( ! $spbc->fw_stats['is_on_maintenance'] @@ -436,21 +436,22 @@ function spbc_firewall__check() $firewall = new Firewall(); - // Necessary: Load Security FireWall module - $firewall->loadFwModule( - new FW( - array( - 'data_table__common' => SPBC_TBL_FIREWALL_DATA, - 'data_table__personal' => SPBC_TBL_FIREWALL_DATA__IPS, - 'data_table__personal_countries' => SPBC_TBL_FIREWALL_DATA__COUNTRIES, - 'log_table' => SPBC_TBL_FIREWALL_LOG, - 'state' => $spbc, - 'api_key' => $spbc->api_key, - 'cookie_domain' => parse_url(get_option('home'), PHP_URL_HOST), - 'data__set_cookies' => $spbc->settings['data__set_cookies'], + if ( (int) $spbc->settings['secfw__enabled'] ) { + $firewall->loadFwModule( + new FW( + array( + 'data_table__common' => SPBC_TBL_FIREWALL_DATA, + 'data_table__personal' => SPBC_TBL_FIREWALL_DATA__IPS, + 'data_table__personal_countries' => SPBC_TBL_FIREWALL_DATA__COUNTRIES, + 'log_table' => SPBC_TBL_FIREWALL_LOG, + 'state' => $spbc, + 'api_key' => $spbc->api_key, + 'cookie_domain' => parse_url(get_option('home'), PHP_URL_HOST), + 'data__set_cookies' => $spbc->settings['data__set_cookies'], + ) ) - ) - ); + ); + } if ( $spbc->settings['traffic_control__enabled'] && ! is_admin() ) { $firewall->loadFwModule( From 153d560ee66133c79732126f179e87a360e0d0ad Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 14 Jul 2023 09:16:11 +0300 Subject: [PATCH 024/109] Upd. General. Re-minify js and update changelog. --- js/spbc-settings.min.js | 5 ++--- js/spbc-settings.min.js.map | 3 +-- readme.txt | 8 ++++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/js/spbc-settings.min.js b/js/spbc-settings.min.js index e20727e18..3912541c8 100644 --- a/js/spbc-settings.min.js +++ b/js/spbc-settings.min.js @@ -1,3 +1,2 @@ - -function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
      ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
      ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
      ").append("").append("

      "+e.title+"

      ").append("

      "+e.desc+"

      "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
      ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); - +function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
      ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
      ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
      ").append("").append("

      "+e.title+"

      ").append("

      "+e.desc+"

      "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
      ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
      ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
      ").append("").append("

      "+e.title+"

      ").append("

      "+e.desc+"

      "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
      ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

      "+e.data+"

      ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); +//# sourceMappingURL=spbc-settings.min.js.map diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 8e7df2dba..3aff6c443 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1,2 +1 @@ - -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
      \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
      \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
      \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

      \"+result.title+\"

      \")\n\t\t\t\t\t.append(\"

      \"+result.desc+\"

      \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
      ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","secfw_enabled","which","keyCode","active_tab"],"mappings":"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"} +{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
      \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
      \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
      \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

      \"+result.title+\"

      \")\n\t\t\t\t\t.append(\"

      \"+result.desc+\"

      \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
      \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
      \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
      \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

      \"+result.title+\"

      \")\n\t\t\t\t\t.append(\"

      \"+result.desc+\"

      \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
      ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

      \" + result.data + \"

      \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_settings__show_recommendation","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","remove_recommendation_func","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","secfw_enabled","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file diff --git a/readme.txt b/readme.txt index 438bc7311..8d7928b70 100644 --- a/readme.txt +++ b/readme.txt @@ -301,6 +301,14 @@ This is required for the Security FireWall to function properly. Plugins that ar == Changelog == += 2.114 July 17 2023 = +* New: Scanner. Added pop up with info how to fix file listening and unsafe permissions. +* New: SecFW. Manage Firewall as option and refactored clear scanner logs button for admin access. +* New: User can disable email notification on change login url. +* Ref: General. HTTP lib refactoring. +* Ref: Settings. Added spbc__get_exists_directories(). +* Fix: Scan. Fixed count outbound links. + = 2.113 July 03 2023 = * Ref: Update. Scanner. Remove green dot and fix typo. * Ref: Update. Scanner. Added bulk actions for frontend malware and fix tabs view. From 0d79a326b059ef7099e9e8167460df34d40f0fb1 Mon Sep 17 00:00:00 2001 From: svfcode Date: Mon, 17 Jul 2023 11:36:30 +0300 Subject: [PATCH 025/109] Fix. TC. Ignore logged in users. --- security-malware-firewall.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 31670c21c..39e96330d 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -1832,9 +1832,14 @@ function spbc_is_user_logged_in() function spbc_user_is_admin() { global $spbc; - return - Cookie::get('spbc_is_logged_in') === md5($spbc->data['salt'] . parse_url(get_option('home'), PHP_URL_HOST)) && - Cookie::get('spbc_admin_logged_in') === md5($spbc->data['salt'] . 'admin' . parse_url(get_option('home'), PHP_URL_HOST)); + + if (!empty($spbc->settings['data__set_cookies'])) { + return + Cookie::get('spbc_is_logged_in') === md5($spbc->data['salt'] . parse_url(get_option('home'), PHP_URL_HOST)) && + Cookie::get('spbc_admin_logged_in') === md5($spbc->data['salt'] . 'admin' . parse_url(get_option('home'), PHP_URL_HOST)); + } + + return is_admin(); } //Function to send logs From f1460145c5ab9dee9cc291a33d8d09aae428a747 Mon Sep 17 00:00:00 2001 From: svfcode Date: Mon, 17 Jul 2023 15:59:09 +0300 Subject: [PATCH 026/109] Updated plugin version to 2.114.1-dev --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 39e96330d..57cf4a286 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.114-dev +Version: 2.114.1-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 9893e2c70d761697b61ba02e94fb27fcf6d45e42 Mon Sep 17 00:00:00 2001 From: svfcode Date: Mon, 17 Jul 2023 16:24:22 +0300 Subject: [PATCH 027/109] Updated plugin version to 2.114.1-fix --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 3bd606ecd..855b33fde 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.114 +Version: 2.114.1-fix Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 559429bea276b9da07a00a421d0c9b13aa0065a3 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 24 Jul 2023 17:09:27 +0500 Subject: [PATCH 028/109] Mod. Scanner accordions actions. Bulk actions improved. --- inc/spbc-scanner.php | 73 +++++++++++++++++++++++++++++++++++-------- inc/spbc-settings.php | 33 +++++-------------- 2 files changed, 68 insertions(+), 38 deletions(-) diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index dec22a893..b842915dd 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -1035,29 +1035,76 @@ function ($data) { return $out; } -function spbc_scanner_get_files_by_category($status) +/** + * Get SQL *WHERE* suffix for SELECT query depends on files category. + * @param string $category Category of files category which needs to be searched for + * @return string SQL *WHERE* suffix. + */ +function spbc_get_sql_where_addiction_for_table_of_category($category) { - global $wpdb; - - $ids = array(); - - switch ($status) { + global $spbc; + switch ($category) { case 'critical': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE severity = "CRITICAL" AND status <> "QUARANTINED"'); + $res = ' WHERE severity IN("CRITICAL") AND + (status <> "QUARANTINED" AND + status <> "APROVED" AND + status <> "APPROVED_BY_CT") + AND + (last_sent IS NULL OR + pscan_status = "DANGEROUS" OR + analysis_status = "DANGEROUS")'; break; case 'suspicious': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE status = "MODIFIED" AND severity <> "CRITICAL"'); - break; - case 'unknown': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE status <> "APROVED" AND source IS NULL AND path NOT LIKE "%wp-content%themes%" AND path NOT LIKE "%wp-content%plugins%" AND (severity <> "CRITICAL" OR severity IS NULL)'); + $res = ' WHERE severity <> "CRITICAL" AND + last_sent IS NULL AND + (status = "MODIFIED" AND severity IS NOT NULL) + OR (status = "INFECTED" AND severity IN ("SUSPICIOUS","DANGER") )'; break; case 'approved': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE status = "APROVED"'); + $res = ' WHERE status = "APROVED"'; break; case 'analysis_log': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE last_sent IS NOT NULL'); + $res = ' WHERE last_sent IS NOT NULL'; + break; + case 'unknown': + $res = ' WHERE status NOT IN ("APROVED","APPROVED_BY_CT","APPROVED_BY_CLOUD") AND + detected_at >= ' . (time() - $spbc->settings['scanner__list_unknown__older_than'] * 86400) . ' AND + source IS NULL AND + path NOT LIKE "%wp-content%themes%" AND + path NOT LIKE "%wp-content%plugins%" AND + path NOT LIKE "%wp-content%cache%" AND + path NOT LIKE "%wp-config.php" AND + (severity IS NULL OR severity NOT IN ("CRITICAL", "DANGER", "SUSPICIOUS"))'; + break; + case 'quarantined': + $res = ' WHERE status = "QUARANTINED"'; break; + case 'frontend_malware': + $res = ' WHERE approved IS NULL OR approved <> 1'; + break; + case 'frontend_scan_results_approved': + $res = ' WHERE approved = 1'; + break; + default: + $res = ''; } + return $res; +} + +/** + * Get all files IDs of the category. + * @param string $category Category of files category which needs to be searched for + * @return array Array of IDs + */ +function spbc_scanner_get_files_by_category($category) +{ + global $wpdb; + + $ids = array(); + + $query = 'SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . spbc_get_sql_where_addiction_for_table_of_category($category); + + $res = $wpdb->get_results($query); foreach ($res as $tmp) { $ids[] = $tmp->fast_hash; diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 2388c98ba..1cd2da7d1 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -3126,14 +3126,7 @@ function spbc_list_table__get_args_by_type($table_type) 'quarantine' => array('name' => 'Quarantine it',), ), 'sql' => array( - 'where' => ' WHERE severity IN("CRITICAL") AND - (status <> "QUARANTINED" AND - status <> "APROVED" AND - status <> "APPROVED_BY_CT") - AND - (last_sent IS NULL OR - pscan_status = "DANGEROUS" OR - analysis_status = "DANGEROUS")', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('critical'), ), 'order_by' => array('path' => 'asc'), ) @@ -3181,9 +3174,7 @@ function spbc_list_table__get_args_by_type($table_type) 'quarantine' => array('name' => 'Quarantine it',), ), 'sql' => array( - 'where' => ' WHERE severity <> "CRITICAL" AND - last_sent IS NULL AND - (status = "MODIFIED" AND severity IS NOT NULL) OR (status = "INFECTED" AND severity IN ("SUSPICIOUS","DANGER") )', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('suspicious'), ), 'order_by' => array('path' => 'asc'), ) @@ -3204,7 +3195,7 @@ function spbc_list_table__get_args_by_type($table_type) 'pscan_pending_queue', 'analysis_status' ), - 'where' => ' WHERE last_sent IS NOT NULL', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('analysis_log'), ), 'order_by' => array('pscan_status' => 'desc'), 'sortable' => array('path', 'last_sent', 'analysis_status', 'pscan_status'), @@ -3247,15 +3238,7 @@ function spbc_list_table__get_args_by_type($table_type) 'approve' => array('name' => 'Approve',), ), 'sql' => array( - 'where' => ' WHERE - status NOT IN ("APROVED","APPROVED_BY_CT","APPROVED_BY_CLOUD") AND - detected_at >= ' . (time() - $spbc->settings['scanner__list_unknown__older_than'] * 86400) . ' AND - source IS NULL AND - path NOT LIKE "%wp-content%themes%" AND - path NOT LIKE "%wp-content%plugins%" AND - path NOT LIKE "%wp-content%cache%" AND - path NOT LIKE "%wp-config.php" AND - (severity IS NULL OR severity NOT IN ("CRITICAL", "DANGER", "SUSPICIOUS"))', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('unknown'), ), 'order_by' => array('path' => 'asc'), ) @@ -3275,7 +3258,7 @@ function spbc_list_table__get_args_by_type($table_type) 'disapprove' => array('name' => 'Disapprove',), ), 'sql' => array( - 'where' => ' WHERE status = "APROVED"', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('approved'), ), 'order_by' => array('path' => 'asc'), ) @@ -3322,7 +3305,7 @@ function spbc_list_table__get_args_by_type($table_type) 'q_path', 'q_time', )), - 'where' => ' WHERE status = "QUARANTINED"', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('quarantined'), ), 'sortable' => array('path', 'previous_state', 'severity', 'q_time', 'size',), 'order_by' => array('path' => 'asc'), @@ -3393,7 +3376,7 @@ function spbc_list_table__get_args_by_type($table_type) 'offset' => 0, 'limit' => 20, 'get_array' => false, - 'where' => ' WHERE approved IS NULL OR approved <> 1', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('frontend_malware'), ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__frontend', 'func_data_get' => 'spbc_field_scanner__get_data__frontend_malware', @@ -3434,7 +3417,7 @@ function spbc_list_table__get_args_by_type($table_type) 'offset' => 0, 'limit' => 20, 'get_array' => false, - 'where' => ' WHERE approved = 1', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('frontend_scan_results_approved'), ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__frontend', 'func_data_get' => 'spbc_field_scanner__get_data__frontend_approved', From c4529a905d3ee801c316136a36f30c1c5ecc85fd Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 24 Jul 2023 17:28:59 +0500 Subject: [PATCH 029/109] Fix. spbc_access_key_notices() Psalm fix. --- security-malware-firewall.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 57cf4a286..ce9a992bb 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2022,18 +2022,18 @@ function spbc_access_key_notices($spbc_key = null) $spbc_key = $spbc_key ?: $spbc->settings['spbc_key']; - if ( ! $spbc_key ) { - return array( 'error' => 'KEY_IS_NOT_OK' ); - } - if ( empty($spbc_key) ) { - $spbc_key = ! $spbc->is_mainsite && $spbc->ms__work_mode != 2 - ? ( ! empty($spbc->network_settings['spbc_key']) ? $spbc->network_settings['spbc_key'] : false ) - : ( ! empty($spbc->settings['spbc_key']) ? $spbc->settings['spbc_key'] : false ); - } - - if ( ! $spbc_key ) { - return array( 'error' => 'KEY_IS_EMPTY' ); + if ( ! $spbc->is_mainsite && $spbc->ms__work_mode != 2 ) { + $spbc_key = ! empty($spbc->network_settings['spbc_key']) ? $spbc->network_settings['spbc_key'] : false; + if ( ! $spbc_key ) { + return array( 'error' => 'KEY_IS_NOT_OK_ON_MAIN_WPMS_SITE' ); + } + } else { + $spbc_key = ! empty($spbc->settings['spbc_key']) ? $spbc->settings['spbc_key'] : false; + if ( ! $spbc_key ) { + return array( 'error' => 'KEY_IS_NOT_OK' ); + } + } } try { From ce6125a239316a15d31668f2ac219162a7af73d4 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 24 Jul 2023 17:28:59 +0500 Subject: [PATCH 030/109] Fix. spbc_access_key_notices() Psalm fix. --- security-malware-firewall.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 57cf4a286..ce9a992bb 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2022,18 +2022,18 @@ function spbc_access_key_notices($spbc_key = null) $spbc_key = $spbc_key ?: $spbc->settings['spbc_key']; - if ( ! $spbc_key ) { - return array( 'error' => 'KEY_IS_NOT_OK' ); - } - if ( empty($spbc_key) ) { - $spbc_key = ! $spbc->is_mainsite && $spbc->ms__work_mode != 2 - ? ( ! empty($spbc->network_settings['spbc_key']) ? $spbc->network_settings['spbc_key'] : false ) - : ( ! empty($spbc->settings['spbc_key']) ? $spbc->settings['spbc_key'] : false ); - } - - if ( ! $spbc_key ) { - return array( 'error' => 'KEY_IS_EMPTY' ); + if ( ! $spbc->is_mainsite && $spbc->ms__work_mode != 2 ) { + $spbc_key = ! empty($spbc->network_settings['spbc_key']) ? $spbc->network_settings['spbc_key'] : false; + if ( ! $spbc_key ) { + return array( 'error' => 'KEY_IS_NOT_OK_ON_MAIN_WPMS_SITE' ); + } + } else { + $spbc_key = ! empty($spbc->settings['spbc_key']) ? $spbc->settings['spbc_key'] : false; + if ( ! $spbc_key ) { + return array( 'error' => 'KEY_IS_NOT_OK' ); + } + } } try { From 6c1ee1abcb8df67927f230b3e2e5947b49c22831 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 24 Jul 2023 17:28:59 +0500 Subject: [PATCH 031/109] Fix. spbc_access_key_notices() Psalm fix. --- security-malware-firewall.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 855b33fde..aa8df9323 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2022,18 +2022,18 @@ function spbc_access_key_notices($spbc_key = null) $spbc_key = $spbc_key ?: $spbc->settings['spbc_key']; - if ( ! $spbc_key ) { - return array( 'error' => 'KEY_IS_NOT_OK' ); - } - if ( empty($spbc_key) ) { - $spbc_key = ! $spbc->is_mainsite && $spbc->ms__work_mode != 2 - ? ( ! empty($spbc->network_settings['spbc_key']) ? $spbc->network_settings['spbc_key'] : false ) - : ( ! empty($spbc->settings['spbc_key']) ? $spbc->settings['spbc_key'] : false ); - } - - if ( ! $spbc_key ) { - return array( 'error' => 'KEY_IS_EMPTY' ); + if ( ! $spbc->is_mainsite && $spbc->ms__work_mode != 2 ) { + $spbc_key = ! empty($spbc->network_settings['spbc_key']) ? $spbc->network_settings['spbc_key'] : false; + if ( ! $spbc_key ) { + return array( 'error' => 'KEY_IS_NOT_OK_ON_MAIN_WPMS_SITE' ); + } + } else { + $spbc_key = ! empty($spbc->settings['spbc_key']) ? $spbc->settings['spbc_key'] : false; + if ( ! $spbc_key ) { + return array( 'error' => 'KEY_IS_NOT_OK' ); + } + } } try { From 56b5b5e543f98393594d76f9379251520b286903 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Mon, 24 Jul 2023 19:28:09 +0500 Subject: [PATCH 032/109] Mod. Scanner interface. Accordion fields widths now can be set up. --- inc/spbc-settings.php | 93 ++++++++++++++++++++------- lib/CleantalkSP/SpbctWP/ListTable.php | 8 ++- 2 files changed, 77 insertions(+), 24 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 2388c98ba..dfcca14ac 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -3083,13 +3083,13 @@ function spbc_list_table__get_args_by_type($table_type) $accordion_default_args, array( 'columns' => array( - 'cb' => array('heading' => '', 'class' => 'check-column',), - 'path' => array('heading' => 'Path', 'primary' => true,), - 'size' => array('heading' => 'Size, bytes',), - 'perms' => array('heading' => 'Permissions',), - 'weak_spots' => array('heading' => 'Detected'), - 'mtime' => array('heading' => 'Last Modified',), - 'status' => array('heading' => 'Analysis verdict',), + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 7), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 7), + 'weak_spots' => array('heading' => 'Detected', 'width_percent' => 18), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 10), + 'status' => array('heading' => 'Analysis verdict', 'width_percent' => 15), ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', 'if_empty_items' => '

      ' . __('No threats are found or all the files have been sent for analysis', 'security-malware-firewall') . '

      ', @@ -3146,6 +3146,15 @@ function spbc_list_table__get_args_by_type($table_type) $args = array_replace_recursive( $accordion_default_args, array( + 'columns' => array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 7), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 7), + 'weak_spots' => array('heading' => 'Detected', 'width_percent' => 18), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 10), + 'status' => array('heading' => 'Analysis verdict', 'width_percent' => 15), + ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', 'if_empty_items' => false, 'actions' => array( @@ -3210,15 +3219,27 @@ function spbc_list_table__get_args_by_type($table_type) 'sortable' => array('path', 'last_sent', 'analysis_status', 'pscan_status'), ) ); - $args['columns'] = array( - 'cb' => array('heading' => '', 'class' => 'check-column',), - 'path' => array('heading' => 'Path', 'primary' => true,), - 'detected_at' => array('heading' => 'Detected at',), - 'last_sent' => array('heading' => 'Sent for analysis at',), - 'pscan_status' => array('heading' => 'Cloud verdict',), - 'analysis_status' => array('heading' => 'Manual verdict',), - 'analysis_comment' => array('heading' => 'Comment',), - ); + if (!spbc__check_if_manual_analysis_results_exist()) { + $args['columns'] = array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'detected_at' => array('heading' => 'Detected at', 'width_percent' => 15), + 'last_sent' => array('heading' => 'Sent for analysis at', 'width_percent' => 15), + 'pscan_status' => array('heading' => 'Cloud verdict', 'width_percent' => 10), + 'analysis_comment' => array('heading' => 'Comment', 'width_percent' => 20), + ); + } else { + $args['columns'] = array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'detected_at' => array('heading' => 'Detected at', 'width_percent' => 10), + 'last_sent' => array('heading' => 'Sent for analysis at', 'width_percent' => 10), + 'pscan_status' => array('heading' => 'Cloud verdict', 'width_percent' => 10), + 'analysis_status' => array('heading' => 'Manual verdict', 'width_percent' => 15), + 'analysis_comment' => array('heading' => 'Comment', 'width_percent' => 15), + ); + } + $args['actions'] = array( 'check_analysis_status' => array('name' => 'Refresh the analysis status'), 'copy_file_info' => array('name' => 'Copy file info'), @@ -3238,6 +3259,13 @@ function spbc_list_table__get_args_by_type($table_type) $accordion_default_args, array( 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', + 'columns' => array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 39), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 13), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 13), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 13), + ), 'if_empty_items' => false, 'actions' => array( 'approve' => array('name' => 'Approve',), @@ -3267,6 +3295,14 @@ function spbc_list_table__get_args_by_type($table_type) $accordion_default_args, array( 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', + 'columns' => array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 40), + 'weak_spots' => array('heading' => 'Detected', 'width_percent' => 20), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 7), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 7), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 7), + ), 'if_empty_items' => false, 'actions' => array( 'disapprove' => array('name' => 'Disapprove',), @@ -3399,12 +3435,12 @@ function spbc_list_table__get_args_by_type($table_type) 'func_data_get' => 'spbc_field_scanner__get_data__frontend_malware', 'if_empty_items' => __('No malware found', 'security-malware-firewall'), 'columns' => array( - 'cb' => array('heading' => '', 'class' => 'check-column',), - 'url' => array('heading' => 'Page', 'primary' => true,), - 'dbd_found' => array('heading' => 'Drive by Download',), - 'redirect_found' => array('heading' => 'Redirects',), - 'csrf' => array('heading' => 'CSRF',), - 'signature' => array('heading' => 'Signatures',), + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'url' => array('heading' => 'Page', 'primary' => true, 'width_percent' => 38), + 'dbd_found' => array('heading' => 'Drive by Download', 'width_percent' => 15), + 'redirect_found' => array('heading' => 'Redirects', 'width_percent' => 15), + 'csrf' => array('heading' => 'CSRF', 'width_percent' => 15), + 'signature' => array('heading' => 'Signatures', 'width_percent' => 15), ), 'order_by' => array('url' => 'asc'), 'sortable' => array('url', 'dbd_found', 'redirect_found', 'signature', 'csrf'), @@ -4806,3 +4842,16 @@ function spbc__get_count_outbound_links() "SELECT COUNT(*) FROM " . SPBC_TBL_SCAN_LINKS . ";" ); } + +/** + * Check if results table contains even a record with manual verdict in 'analysis_status' + * @return bool + */ +function spbc__check_if_manual_analysis_results_exist() +{ + global $wpdb; + + return (bool)$wpdb->get_var( + "SELECT COUNT(*) FROM " . SPBC_TBL_SCAN_FILES . " WHERE analysis_status IS NOT NULL;" + ); +} diff --git a/lib/CleantalkSP/SpbctWP/ListTable.php b/lib/CleantalkSP/SpbctWP/ListTable.php index 6f4555240..44df9436f 100644 --- a/lib/CleantalkSP/SpbctWP/ListTable.php +++ b/lib/CleantalkSP/SpbctWP/ListTable.php @@ -400,9 +400,13 @@ public function displayColumnHeaders() } $hint = isset($column['hint']) ? '' . $column['hint'] . '' : ''; - + $style = ''; + if (isset($column['width_percent'])) { + $header_length = !empty($column['width_percent']) ? $column['width_percent'] . '%' : ''; + $style = "style='width:$header_length'"; + } // Out - echo "<$tag id='$id' class='$classes' $sort_direction_attr>{$column['heading']}$sortable$hint"; + echo "<$tag id='$id' class='$classes' $sort_direction_attr $style>{$column['heading']}$sortable$hint"; } unset($column_key); } From fee00eb87614647795f6458c78611d35c59ebfa5 Mon Sep 17 00:00:00 2001 From: Artem Anoshin Date: Tue, 25 Jul 2023 10:10:06 +0400 Subject: [PATCH 033/109] Fix: Fixed Entropy->analyse(); Fatal: Index invalid or out of range --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index 2d5a940e9..8db64f8f8 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -48,7 +48,7 @@ public function analyse(Variables $variables) $encoder = new Encoder(); $detected_unreadable_variables = []; foreach ( $variable_names as $variable ) { - if ( empty($variables_obj[$variable]) ) { + if ( ! isset($variables_obj[$variable][0]) ) { continue; } if ( strpos($variable, '_') === 0 || strlen($variable) < 5 ) { From c98ea378d7e9f1458a6d1c4931ed4667ca788ae9 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Tue, 25 Jul 2023 12:59:36 +0500 Subject: [PATCH 034/109] WP 6.3 compatibility. Fixed version checking before scanner run. --- .../SpbctWP/Scanner/ScannerQueue.php | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index aae467c07..0354e4803 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -388,22 +388,22 @@ public function get_cms_hashes() // phpcs:ignore PSR1.Methods.CamelCapsMethodNam $stage_data_obj->set('added_count_hashes', $result->cnt); $out = array('comment' => 'Already up to date.', 'end' => 1,); } - } else { - $out = array('error' => 'Your WordPress version is not supported'); - } - $scanning_stages_storage->saveToDb(); + $scanning_stages_storage->saveToDb(); - // Adding to log - ScanningLogFacade::writeToLog( - '' . $stage_data_obj::getTitle() . ' ' . $stage_data_obj->getDescription() - ); + // Adding to log + ScanningLogFacade::writeToLog( + '' . $stage_data_obj::getTitle() . ' ' . $stage_data_obj->getDescription() + ); - // Sending data to frontend - $out['stage_data_for_logging'] = array( - 'title' => $stage_data_obj::getTitle(), - 'description' => $stage_data_obj->getDescription() - ); + // Sending data to frontend + $out['stage_data_for_logging'] = array( + 'title' => $stage_data_obj::getTitle(), + 'description' => $stage_data_obj->getDescription() + ); + } else { + $out = array('error' => 'Your WordPress version is not supported'); + } return $out; } From bba8e1cd3ddff00ef233e6bd0db4b665dfd05f36 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 27 Jul 2023 11:04:09 +0500 Subject: [PATCH 035/109] Mod. Rename login URl. For new instances default new login page rename to @custom-login-url" --- lib/CleantalkSP/SpbctWP/State.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CleantalkSP/SpbctWP/State.php b/lib/CleantalkSP/SpbctWP/State.php index d474c8b39..72bc164c5 100644 --- a/lib/CleantalkSP/SpbctWP/State.php +++ b/lib/CleantalkSP/SpbctWP/State.php @@ -42,7 +42,7 @@ class State extends \CleantalkSP\Common\State 'bfp__block_period__5_fails' => 3600, // By default ban IP for brute force for one hour 'bfp__count_interval' => 900, // Counting login attempts in this interval 'login_page_rename__enabled' => 0, - 'login_page_rename__name' => 'login', + 'login_page_rename__name' => 'custom-login-url', 'login_page_rename__redirect' => '', 'login_page_rename__send_email_notification' => 1, 'there_was_signature_treatment' => 0, From eda77008f1c20c0dbf77c236e5b734da4c439b87 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 27 Jul 2023 11:27:35 +0500 Subject: [PATCH 036/109] Mod. Debug. "Clear" button for local instances returned. --- inc/spbc-settings.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index b981308f7..1d94b74a9 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -2658,6 +2658,17 @@ function spbc_field_scanner() _e('Found outdated plugins or themes. Please, update to latest versions.', 'security-malware-firewall'); echo '

      '; + //* Debug Buttons + // Clear hashes + if (in_array(Server::getDomain(), array('lc', 'loc', 'lh', 'wordpress'), true)) { + echo '' + . '' + . '

      '; + } + //*/ + echo '
      ' . '' . __('Receiving core hashes', 'security-malware-firewall') . ' -> ' From 69b89725ba3f0c8e0e38476eeb758bac1a67eb4a Mon Sep 17 00:00:00 2001 From: alexandergull Date: Fri, 28 Jul 2023 14:34:25 +0500 Subject: [PATCH 037/109] Fix. Check response code on file delete. --- inc/spbc-scanner.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index dec22a893..b12c34771 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -438,8 +438,8 @@ function spbc_scanner_file_delete($direct_call = false, $file_id = null) $remembered_file_content = file_get_contents($file_path); $result = unlink($file_path); if ($result) { - $response_content = HTTP::getContentFromURL(get_option('home'), false); - $response_content_admin = HTTP::getContentFromURL(get_option('home') . '/wp-admin/', false); + $response_content = HTTP::getContentFromURL(get_option('home')); + $response_content_admin = HTTP::getContentFromURL(get_option('home') . '/wp-admin/'); if ( isset( $response_content['error'], From 07d6275678e9acca53157ab80108abc5a3d19d1d Mon Sep 17 00:00:00 2001 From: SVFCode Date: Fri, 28 Jul 2023 14:59:20 +0300 Subject: [PATCH 038/109] Fix. Front Scanner. Fixed modal view suspicious code for drive by download malware. (#227) --- js/spbc-settings_tab--scanner.min.js | 2 +- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/src/spbc-settings_tab--scanner.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/js/spbc-settings_tab--scanner.min.js b/js/spbc-settings_tab--scanner.min.js index 8e6d3d7bc..e3182018e 100644 --- a/js/spbc-settings_tab--scanner.min.js +++ b/js/spbc-settings_tab--scanner.min.js @@ -1,4 +1,4 @@ -function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
      "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
      ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

      "+t+"

      ").append("

      "+o+"

      "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
      %s

      %s


      '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

      %s


      ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
      %s

      %s


      ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
      %s

      %s


      ':a,s=l?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
      %s
      '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

      %s

      %s

      %s


      ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
    • ${o.created_at}
    • `;e=`
        +function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
        "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
        ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

        "+t+"

        ").append("

        "+o+"

        "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
        %s

        %s


        '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

        %s


        ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
        %s

        %s


        ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
        %s

        %s


        ':a,s=l&&!o.file[t].includes("iframe")?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
        %s
        '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

        %s

        %s

        %s


        ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
      • ${o.created_at}
      • `;e=`
          ${t}
        `;s.find("#spbc-fm-snapshot-list").append(e)}function drawCurrentSnapshot(s,t){var e={action:"spbc_file_monitoring_show_current_snapshot",snapshot_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,beforeSend:function(){jQuery("#spbc-file-monitoring-modal-preloader").show()},success:function(e){e.success&&(t.find("#spbc-fm-snapshot-view .wrap").remove(),t.find("[data-spanshot-id").removeClass("active"),t.find("[data-spanshot-id="+s+"]").addClass("active"),e=`
        diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map
        index 0b10266c8..e899332a2 100644
        --- a/js/spbc-settings_tab--scanner.min.js.map
        +++ b/js/spbc-settings_tab--scanner.min.js.map
        @@ -1 +1 @@
        -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text  = show_icon.attr('spbc_tip_text')  || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
        \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
        \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

        \" + tip_title + \"

        \")\n\t\t.append(\"

        \" + tip_text + \"

        \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
        %s

        %s


        ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
        %s

        %s


        ',\n\t\trow_template_bad = '
        %s

        %s


        ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\trow_template_bad = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
        %s
        '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

        %s

        %s

        %s


        ';\n\tlet row_template_bad = '

        %s

        %s

        %s


        ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
      • ${item.created_at}
      • `;\n\t}\n\n\tlet html =\n\t\t`
          \n ${list}\n
        `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
        \n
        \n                            \n                                ${result.data.content}\n                            \n                        
        \n
        `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
        ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text = show_icon.attr('spbc_tip_text') || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
        \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
        \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

        \" + tip_title + \"

        \")\n\t\t.append(\"

        \" + tip_text + \"

        \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
        %s

        %s


        ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
        %s

        %s


        ',\n\t\trow_template_bad = '
        %s

        %s


        ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\trow_template_bad = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string && !result.file[curr_row].includes('iframe')){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
        %s
        '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

        %s

        %s

        %s


        ';\n\tlet row_template_bad = '

        %s

        %s

        %s


        ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
      • ${item.created_at}
      • `;\n\t}\n\n\tlet html =\n\t\t`
          \n ${list}\n
        `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
        \n
        \n                            \n                                ${result.data.content}\n                            \n                        
        \n
        `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
        ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","includes","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file diff --git a/js/src/spbc-settings_tab--scanner.js b/js/src/spbc-settings_tab--scanner.js index e5c447287..4dac0a215 100644 --- a/js/src/spbc-settings_tab--scanner.js +++ b/js/src/spbc-settings_tab--scanner.js @@ -308,7 +308,7 @@ function spbc_scannerButtonViewBad_callback(result, data, params){ } else { unformatted_row = row_template } - if (is_bad_string){ + if (is_bad_string && !result.file[curr_row].includes('iframe')){ highlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num])); } else { highlited_row = unformatted_row.printf(curr_row, result.file[curr_row]); From b95cd3c71dd45cfe82feee239fe57ef730aa0b6f Mon Sep 17 00:00:00 2001 From: SVFCode Date: Fri, 28 Jul 2023 15:01:14 +0300 Subject: [PATCH 039/109] Fix. Whitelabel. Added rules for check brand info. (#229) * Fix. Whitelabel. Added rules for check brand info. * fix phpcs --- inc/spbc-admin.php | 2 +- inc/spbc-settings.php | 16 +++++++++------- security-malware-firewall.php | 4 +++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 62405cb6f..7cac76287 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -203,7 +203,7 @@ function spbc_plugin_links_meta($meta, $plugin_file) function changedPluginName(){ jQuery('.plugin-title strong').each(function(i, item){ if(jQuery(item).html() == '{$plugin_name}') - jQuery(item).html('{$spbc->data["wl_brandname"]}'); + jQuery(item).html('{$spbc->data["wl_brandname"]}' + '  Security'); }); } changedPluginName(); diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 1d94b74a9..b9f4a0ae4 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -2611,15 +2611,17 @@ function spbc_field_scanner() } echo ''; echo '
        '; - printf( - __('%sView all scan results for this website%s%s', 'security-malware-firewall'), - "", - '', - '' - ); + if (! $spbc->data["wl_mode_enabled"]) { + printf( + __('%sView all scan results for this website%s%s', 'security-malware-firewall'), + "", + '', + ',' + ); + } // show save to pdf link if ( ! empty($spbc->data['scanner']['last_scan'])) { - echo ',  ' + echo '  ' . __('Export results to PDF', 'security-malware-firewall') . ''; } diff --git a/security-malware-firewall.php b/security-malware-firewall.php index ce9a992bb..84cc68a9d 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -898,10 +898,12 @@ function spbc_login_form_notification() // @ToDo this section need to be refactored $link = ! $spbc->data["wl_mode_enabled"] ? $link : $spbc->data["wl_brandname"]; + $logo_img = $spbc->data["wl_mode_enabled"] ? "" : ""; echo "
        " . "

        " . __('Brute Force Protection by', 'security-malware-firewall') - . "" + . " " + . $logo_img . $link . ".

        " . "

        " . __('All attempts are logged.', 'security-malware-firewall') . "

        From bb81d6a5f55693388fc949601f486d286b7f4c63 Mon Sep 17 00:00:00 2001 From: SVFCode Date: Fri, 28 Jul 2023 15:02:46 +0300 Subject: [PATCH 040/109] Upd. Firewall. Protect login from brute force even if expired key. (#228) --- lib/CleantalkSP/SpbctWP/Firewall/BFP.php | 7 +++++ security-malware-firewall.php | 40 +++++++++++++++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php index 0d61d3119..1fc8a7a9a 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php @@ -16,6 +16,7 @@ class BFP extends FirewallModule protected $count_period = 900; // Counting login attempts in this interval protected $chance_to_clean = 100; // Chance to clean log table from old entries. In percents. + protected static $is_checked = false; /** * @psalm-suppress PossiblyUnusedProperty @@ -85,6 +86,10 @@ public function middleAction($result = null) public function updateLogs() { + if (self::$is_checked) { + return; + } + foreach ( $this->ip_array as $current_ip ) { $interval_time = Helper::getTimeIntervalStart($this->count_period); @@ -129,6 +134,8 @@ public function updateLogs() $this->db->execute($query); } } + + self::$is_checked = true; } private function clearTable() diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 84cc68a9d..6dcba2857 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -925,10 +925,11 @@ function spbc_login_form_notification() */ function spbc_authenticate($user, $username) { - global $spbc; if ( is_wp_error($user) ) { + spbc_authenticate__check_brute_force(); + $spbc->login_error = true; $err_codes = $user->get_error_codes(); @@ -1039,6 +1040,43 @@ function spbc_authenticate($user, $username) return $user; } +/** + * Check brute force attack + * + * @return void + */ +function spbc_authenticate__check_brute_force() +{ + global $spbc; + + $login_url = wp_login_url(); + if ($spbc->settings['login_page_rename__enabled']) { + $GLOBALS['wp_rewrite'] = new WP_Rewrite(); + $login_url = RenameLoginPage::getURL($spbc->settings['login_page_rename__name']); + } + + $bfp = new BFP( + array( + 'api_key' => $spbc->api_key, + 'state' => $spbc, + 'is_login_page' => strpos(Server::getURL(), $login_url) === 0, + 'is_logged_in' => Cookie::get('spbc_is_logged_in') === md5($spbc->data['salt'] . parse_url(get_option('home'), PHP_URL_HOST)), + 'bf_limit' => $spbc->settings['bfp__allowed_wrong_auths'], + 'block_period' => $spbc->settings['bfp__block_period__5_fails'], + 'count_period' => $spbc->settings['bfp__count_interval'], + ) + ); + + $bfp->setDb(new DB()); + $bfp->setIpArray([IP::get()]); + $bfp_result = $bfp->check(); + $bfp->middleAction(); + + if (!empty($bfp_result)) { + $bfp->_die($bfp_result[0]); + } +} + /** * Returns browser sign * From 650152c9efa992a9b63d0380dad07cf1c2f25b42 Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 28 Jul 2023 15:22:52 +0300 Subject: [PATCH 041/109] Update changelog and version. --- readme.txt | 13 ++++++++++++- security-malware-firewall.php | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index 441648038..5153dc356 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: security, firewall, malware, wordpress security, brute force Requires at least: 3.0 Tested up to: 6.2 Requires PHP: 5.6 -Stable tag: 2.114 +Stable tag: 2.115 License: GPLv2 License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -301,6 +301,17 @@ This is required for the Security FireWall to function properly. Plugins that ar == Changelog == += 2.115 July 31 2023 = +* New: Firewall. Protect login from brute force even if expired key. +* Fix: Whitelabel. Added rules for check brand info. +* Fix: Front Scanner. Fixed modal view suspicious code for drive by download malware. +* Fix: General. Check response code on file delete. +* Fix: Scanner. Bulk actions fixed and improved. +* Fix: Scanner. Entropy analyse - Index invalid or out of range. +* Ref: General. WP 6.3 compatibility. Fixed version checking before scanner run. +* Ref: Rename login URl. For new instances default new login page rename. +* Ref: Scanner. Accordeon fields custom length. + = 2.114 July 17 2023 = * New: Scanner. Added pop up with info how to fix file listening and unsafe permissions. * New: SecFW. Manage Firewall as option and refactored clear scanner logs button for admin access. diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 6dcba2857..f5692f60c 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.114.1-dev +Version: 2.115-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 44f15da219dcea1c191d380abb9ff4cb446980e4 Mon Sep 17 00:00:00 2001 From: svfcode Date: Sat, 29 Jul 2023 08:08:17 +0300 Subject: [PATCH 042/109] Upd. Scanner. Added extensions to find malware. --- inc/spbc-scanner.php | 2 +- inc/spbc-settings.php | 2 +- lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php | 2 +- lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index c68bb7bb9..778c3f15d 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -119,7 +119,7 @@ function spbc_scanner_count_files($direct_call = false, $path = ABSPATH) $root_path = realpath(ABSPATH); $init_params = array( 'count' => true, - 'extensions' => 'php, html, htm', + 'extensions' => 'php, html, htm, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', 'files_mandatory' => array(), 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index b9f4a0ae4..3e0ddda55 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -4570,7 +4570,7 @@ function spbc_bulk_actions_description() $description .= '

        '; $description .= '*
        '; - $description .= esc_html__('Website total files - only executable files (*.php, *.html, *.htm) except for the quarantined files, files of zero size and files larger than the acceptable size.', 'security-malware-firewall'); + $description .= esc_html__('Website total files - only executable files (*.php, *.html, *.htm, *.phtml, *.shtml, *.phar) except for the quarantined files, files of zero size and files larger than the acceptable size.', 'security-malware-firewall'); $description .= '
        '; $description .= esc_html__('Files scanned - files was checked. Some files will be added to the scan if the scanner deems it necessary.', 'security-malware-firewall'); diff --git a/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php b/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php index b4e1c4332..29ba195f6 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php @@ -67,7 +67,7 @@ public function setElements() $this->root, array_merge( array( - 'extensions' => 'php, html, htm', + 'extensions' => 'php, html, htm, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, js', 'extensions_exceptions' => array('jpg', 'jpeg', 'png', 'gif', 'css', 'txt', 'zip', 'xml', 'json'), ), $this->params diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 0354e4803..86c21ccfd 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -788,7 +788,7 @@ public function countFileSystem($path_to_scan = ABSPATH) $init_params = array( 'count' => true, 'file_exceptions' => 'wp-config.php', - 'extensions' => 'php, html, htm, js', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', 'files_mandatory' => array(), 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); @@ -835,7 +835,7 @@ public function file_system_analysis($offset = null, $amount = null, $path_to_sc 'full_hash' => true, 'offset' => $offset, 'amount' => $amount, - 'extensions' => 'php, html, htm, js', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', 'extensions_exceptions' => '', //array('jpg', 'jpeg', 'png', 'gif', 'css', 'txt', 'zip', 'xml', 'json') 'file_exceptions' => 'wp-config.php', 'files_mandatory' => array(), From dac52e0fe19d91ef14975d311b042ce2610ef846 Mon Sep 17 00:00:00 2001 From: svfcode Date: Sat, 29 Jul 2023 08:09:25 +0300 Subject: [PATCH 043/109] upd changelog --- readme.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.txt b/readme.txt index 5153dc356..48406c08f 100644 --- a/readme.txt +++ b/readme.txt @@ -303,6 +303,7 @@ This is required for the Security FireWall to function properly. Plugins that ar = 2.115 July 31 2023 = * New: Firewall. Protect login from brute force even if expired key. +* New: Scanner. Added extensions to find malware. * Fix: Whitelabel. Added rules for check brand info. * Fix: Front Scanner. Fixed modal view suspicious code for drive by download malware. * Fix: General. Check response code on file delete. From 0651b68b7a40f25c40641587fbc476ce3c3f0b14 Mon Sep 17 00:00:00 2001 From: svfcode Date: Tue, 1 Aug 2023 10:54:47 +0300 Subject: [PATCH 044/109] merge master to fix --- inc/spbc-admin.php | 2 +- inc/spbc-scanner.php | 75 +++++++-- inc/spbc-settings.php | 155 +++++++++++------- js/spbc-settings_tab--scanner.min.js | 2 +- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/src/spbc-settings_tab--scanner.js | 2 +- lib/CleantalkSP/SpbctWP/Firewall/BFP.php | 7 + lib/CleantalkSP/SpbctWP/ListTable.php | 8 +- .../SpbctWP/Scanner/DirectoryScan.php | 2 +- .../SpbctWP/Scanner/ScannerQueue.php | 30 ++-- lib/CleantalkSP/SpbctWP/State.php | 2 +- readme.txt | 14 +- security-malware-firewall.php | 46 +++++- 13 files changed, 251 insertions(+), 96 deletions(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 62405cb6f..7cac76287 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -203,7 +203,7 @@ function spbc_plugin_links_meta($meta, $plugin_file) function changedPluginName(){ jQuery('.plugin-title strong').each(function(i, item){ if(jQuery(item).html() == '{$plugin_name}') - jQuery(item).html('{$spbc->data["wl_brandname"]}'); + jQuery(item).html('{$spbc->data["wl_brandname"]}' + '  Security'); }); } changedPluginName(); diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index b12c34771..778c3f15d 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -119,7 +119,7 @@ function spbc_scanner_count_files($direct_call = false, $path = ABSPATH) $root_path = realpath(ABSPATH); $init_params = array( 'count' => true, - 'extensions' => 'php, html, htm', + 'extensions' => 'php, html, htm, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', 'files_mandatory' => array(), 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); @@ -1035,29 +1035,76 @@ function ($data) { return $out; } -function spbc_scanner_get_files_by_category($status) +/** + * Get SQL *WHERE* suffix for SELECT query depends on files category. + * @param string $category Category of files category which needs to be searched for + * @return string SQL *WHERE* suffix. + */ +function spbc_get_sql_where_addiction_for_table_of_category($category) { - global $wpdb; - - $ids = array(); - - switch ($status) { + global $spbc; + switch ($category) { case 'critical': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE severity = "CRITICAL" AND status <> "QUARANTINED"'); + $res = ' WHERE severity IN("CRITICAL") AND + (status <> "QUARANTINED" AND + status <> "APROVED" AND + status <> "APPROVED_BY_CT") + AND + (last_sent IS NULL OR + pscan_status = "DANGEROUS" OR + analysis_status = "DANGEROUS")'; break; case 'suspicious': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE status = "MODIFIED" AND severity <> "CRITICAL"'); - break; - case 'unknown': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE status <> "APROVED" AND source IS NULL AND path NOT LIKE "%wp-content%themes%" AND path NOT LIKE "%wp-content%plugins%" AND (severity <> "CRITICAL" OR severity IS NULL)'); + $res = ' WHERE severity <> "CRITICAL" AND + last_sent IS NULL AND + (status = "MODIFIED" AND severity IS NOT NULL) + OR (status = "INFECTED" AND severity IN ("SUSPICIOUS","DANGER") )'; break; case 'approved': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE status = "APROVED"'); + $res = ' WHERE status = "APROVED"'; break; case 'analysis_log': - $res = $wpdb->get_results('SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . ' WHERE last_sent IS NOT NULL'); + $res = ' WHERE last_sent IS NOT NULL'; + break; + case 'unknown': + $res = ' WHERE status NOT IN ("APROVED","APPROVED_BY_CT","APPROVED_BY_CLOUD") AND + detected_at >= ' . (time() - $spbc->settings['scanner__list_unknown__older_than'] * 86400) . ' AND + source IS NULL AND + path NOT LIKE "%wp-content%themes%" AND + path NOT LIKE "%wp-content%plugins%" AND + path NOT LIKE "%wp-content%cache%" AND + path NOT LIKE "%wp-config.php" AND + (severity IS NULL OR severity NOT IN ("CRITICAL", "DANGER", "SUSPICIOUS"))'; + break; + case 'quarantined': + $res = ' WHERE status = "QUARANTINED"'; break; + case 'frontend_malware': + $res = ' WHERE approved IS NULL OR approved <> 1'; + break; + case 'frontend_scan_results_approved': + $res = ' WHERE approved = 1'; + break; + default: + $res = ''; } + return $res; +} + +/** + * Get all files IDs of the category. + * @param string $category Category of files category which needs to be searched for + * @return array Array of IDs + */ +function spbc_scanner_get_files_by_category($category) +{ + global $wpdb; + + $ids = array(); + + $query = 'SELECT fast_hash from ' . SPBC_TBL_SCAN_FILES . spbc_get_sql_where_addiction_for_table_of_category($category); + + $res = $wpdb->get_results($query); foreach ($res as $tmp) { $ids[] = $tmp->fast_hash; diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 2388c98ba..3e0ddda55 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -2611,15 +2611,17 @@ function spbc_field_scanner() } echo ''; echo '
        '; - printf( - __('%sView all scan results for this website%s%s', 'security-malware-firewall'), - "", - '', - '' - ); + if (! $spbc->data["wl_mode_enabled"]) { + printf( + __('%sView all scan results for this website%s%s', 'security-malware-firewall'), + "", + '', + ',' + ); + } // show save to pdf link if ( ! empty($spbc->data['scanner']['last_scan'])) { - echo ',  ' + echo '  ' . __('Export results to PDF', 'security-malware-firewall') . ''; } @@ -2658,6 +2660,17 @@ function spbc_field_scanner() _e('Found outdated plugins or themes. Please, update to latest versions.', 'security-malware-firewall'); echo '

        '; + //* Debug Buttons + // Clear hashes + if (in_array(Server::getDomain(), array('lc', 'loc', 'lh', 'wordpress'), true)) { + echo '' + . '' + . '

        '; + } + //*/ + echo '
        ' . '' . __('Receiving core hashes', 'security-malware-firewall') . ' -> ' @@ -3083,13 +3096,13 @@ function spbc_list_table__get_args_by_type($table_type) $accordion_default_args, array( 'columns' => array( - 'cb' => array('heading' => '', 'class' => 'check-column',), - 'path' => array('heading' => 'Path', 'primary' => true,), - 'size' => array('heading' => 'Size, bytes',), - 'perms' => array('heading' => 'Permissions',), - 'weak_spots' => array('heading' => 'Detected'), - 'mtime' => array('heading' => 'Last Modified',), - 'status' => array('heading' => 'Analysis verdict',), + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 7), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 7), + 'weak_spots' => array('heading' => 'Detected', 'width_percent' => 18), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 10), + 'status' => array('heading' => 'Analysis verdict', 'width_percent' => 15), ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', 'if_empty_items' => '

        ' . __('No threats are found or all the files have been sent for analysis', 'security-malware-firewall') . '

        ', @@ -3126,14 +3139,7 @@ function spbc_list_table__get_args_by_type($table_type) 'quarantine' => array('name' => 'Quarantine it',), ), 'sql' => array( - 'where' => ' WHERE severity IN("CRITICAL") AND - (status <> "QUARANTINED" AND - status <> "APROVED" AND - status <> "APPROVED_BY_CT") - AND - (last_sent IS NULL OR - pscan_status = "DANGEROUS" OR - analysis_status = "DANGEROUS")', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('critical'), ), 'order_by' => array('path' => 'asc'), ) @@ -3146,6 +3152,15 @@ function spbc_list_table__get_args_by_type($table_type) $args = array_replace_recursive( $accordion_default_args, array( + 'columns' => array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 7), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 7), + 'weak_spots' => array('heading' => 'Detected', 'width_percent' => 18), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 10), + 'status' => array('heading' => 'Analysis verdict', 'width_percent' => 15), + ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', 'if_empty_items' => false, 'actions' => array( @@ -3181,9 +3196,7 @@ function spbc_list_table__get_args_by_type($table_type) 'quarantine' => array('name' => 'Quarantine it',), ), 'sql' => array( - 'where' => ' WHERE severity <> "CRITICAL" AND - last_sent IS NULL AND - (status = "MODIFIED" AND severity IS NOT NULL) OR (status = "INFECTED" AND severity IN ("SUSPICIOUS","DANGER") )', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('suspicious'), ), 'order_by' => array('path' => 'asc'), ) @@ -3204,21 +3217,33 @@ function spbc_list_table__get_args_by_type($table_type) 'pscan_pending_queue', 'analysis_status' ), - 'where' => ' WHERE last_sent IS NOT NULL', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('analysis_log'), ), 'order_by' => array('pscan_status' => 'desc'), 'sortable' => array('path', 'last_sent', 'analysis_status', 'pscan_status'), ) ); - $args['columns'] = array( - 'cb' => array('heading' => '', 'class' => 'check-column',), - 'path' => array('heading' => 'Path', 'primary' => true,), - 'detected_at' => array('heading' => 'Detected at',), - 'last_sent' => array('heading' => 'Sent for analysis at',), - 'pscan_status' => array('heading' => 'Cloud verdict',), - 'analysis_status' => array('heading' => 'Manual verdict',), - 'analysis_comment' => array('heading' => 'Comment',), - ); + if (!spbc__check_if_manual_analysis_results_exist()) { + $args['columns'] = array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'detected_at' => array('heading' => 'Detected at', 'width_percent' => 15), + 'last_sent' => array('heading' => 'Sent for analysis at', 'width_percent' => 15), + 'pscan_status' => array('heading' => 'Cloud verdict', 'width_percent' => 10), + 'analysis_comment' => array('heading' => 'Comment', 'width_percent' => 20), + ); + } else { + $args['columns'] = array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 38), + 'detected_at' => array('heading' => 'Detected at', 'width_percent' => 10), + 'last_sent' => array('heading' => 'Sent for analysis at', 'width_percent' => 10), + 'pscan_status' => array('heading' => 'Cloud verdict', 'width_percent' => 10), + 'analysis_status' => array('heading' => 'Manual verdict', 'width_percent' => 15), + 'analysis_comment' => array('heading' => 'Comment', 'width_percent' => 15), + ); + } + $args['actions'] = array( 'check_analysis_status' => array('name' => 'Refresh the analysis status'), 'copy_file_info' => array('name' => 'Copy file info'), @@ -3238,6 +3263,13 @@ function spbc_list_table__get_args_by_type($table_type) $accordion_default_args, array( 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', + 'columns' => array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 39), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 13), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 13), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 13), + ), 'if_empty_items' => false, 'actions' => array( 'approve' => array('name' => 'Approve',), @@ -3247,15 +3279,7 @@ function spbc_list_table__get_args_by_type($table_type) 'approve' => array('name' => 'Approve',), ), 'sql' => array( - 'where' => ' WHERE - status NOT IN ("APROVED","APPROVED_BY_CT","APPROVED_BY_CLOUD") AND - detected_at >= ' . (time() - $spbc->settings['scanner__list_unknown__older_than'] * 86400) . ' AND - source IS NULL AND - path NOT LIKE "%wp-content%themes%" AND - path NOT LIKE "%wp-content%plugins%" AND - path NOT LIKE "%wp-content%cache%" AND - path NOT LIKE "%wp-config.php" AND - (severity IS NULL OR severity NOT IN ("CRITICAL", "DANGER", "SUSPICIOUS"))', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('unknown'), ), 'order_by' => array('path' => 'asc'), ) @@ -3267,6 +3291,14 @@ function spbc_list_table__get_args_by_type($table_type) $accordion_default_args, array( 'func_data_prepare' => 'spbc_field_scanner__prepare_data__files', + 'columns' => array( + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'path' => array('heading' => 'Path', 'primary' => true, 'width_percent' => 40), + 'weak_spots' => array('heading' => 'Detected', 'width_percent' => 20), + 'size' => array('heading' => 'Size, bytes', 'width_percent' => 7), + 'perms' => array('heading' => 'Permissions', 'width_percent' => 7), + 'mtime' => array('heading' => 'Last Modified', 'width_percent' => 7), + ), 'if_empty_items' => false, 'actions' => array( 'disapprove' => array('name' => 'Disapprove',), @@ -3275,7 +3307,7 @@ function spbc_list_table__get_args_by_type($table_type) 'disapprove' => array('name' => 'Disapprove',), ), 'sql' => array( - 'where' => ' WHERE status = "APROVED"', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('approved'), ), 'order_by' => array('path' => 'asc'), ) @@ -3322,7 +3354,7 @@ function spbc_list_table__get_args_by_type($table_type) 'q_path', 'q_time', )), - 'where' => ' WHERE status = "QUARANTINED"', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('quarantined'), ), 'sortable' => array('path', 'previous_state', 'severity', 'q_time', 'size',), 'order_by' => array('path' => 'asc'), @@ -3393,18 +3425,18 @@ function spbc_list_table__get_args_by_type($table_type) 'offset' => 0, 'limit' => 20, 'get_array' => false, - 'where' => ' WHERE approved IS NULL OR approved <> 1', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('frontend_malware'), ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__frontend', 'func_data_get' => 'spbc_field_scanner__get_data__frontend_malware', 'if_empty_items' => __('No malware found', 'security-malware-firewall'), 'columns' => array( - 'cb' => array('heading' => '', 'class' => 'check-column',), - 'url' => array('heading' => 'Page', 'primary' => true,), - 'dbd_found' => array('heading' => 'Drive by Download',), - 'redirect_found' => array('heading' => 'Redirects',), - 'csrf' => array('heading' => 'CSRF',), - 'signature' => array('heading' => 'Signatures',), + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'url' => array('heading' => 'Page', 'primary' => true, 'width_percent' => 38), + 'dbd_found' => array('heading' => 'Drive by Download', 'width_percent' => 15), + 'redirect_found' => array('heading' => 'Redirects', 'width_percent' => 15), + 'csrf' => array('heading' => 'CSRF', 'width_percent' => 15), + 'signature' => array('heading' => 'Signatures', 'width_percent' => 15), ), 'order_by' => array('url' => 'asc'), 'sortable' => array('url', 'dbd_found', 'redirect_found', 'signature', 'csrf'), @@ -3434,7 +3466,7 @@ function spbc_list_table__get_args_by_type($table_type) 'offset' => 0, 'limit' => 20, 'get_array' => false, - 'where' => ' WHERE approved = 1', + 'where' => spbc_get_sql_where_addiction_for_table_of_category('frontend_scan_results_approved'), ), 'func_data_prepare' => 'spbc_field_scanner__prepare_data__frontend', 'func_data_get' => 'spbc_field_scanner__get_data__frontend_approved', @@ -4538,7 +4570,7 @@ function spbc_bulk_actions_description() $description .= '

        '; $description .= '*
        '; - $description .= esc_html__('Website total files - only executable files (*.php, *.html, *.htm) except for the quarantined files, files of zero size and files larger than the acceptable size.', 'security-malware-firewall'); + $description .= esc_html__('Website total files - only executable files (*.php, *.html, *.htm, *.phtml, *.shtml, *.phar) except for the quarantined files, files of zero size and files larger than the acceptable size.', 'security-malware-firewall'); $description .= '
        '; $description .= esc_html__('Files scanned - files was checked. Some files will be added to the scan if the scanner deems it necessary.', 'security-malware-firewall'); @@ -4806,3 +4838,16 @@ function spbc__get_count_outbound_links() "SELECT COUNT(*) FROM " . SPBC_TBL_SCAN_LINKS . ";" ); } + +/** + * Check if results table contains even a record with manual verdict in 'analysis_status' + * @return bool + */ +function spbc__check_if_manual_analysis_results_exist() +{ + global $wpdb; + + return (bool)$wpdb->get_var( + "SELECT COUNT(*) FROM " . SPBC_TBL_SCAN_FILES . " WHERE analysis_status IS NOT NULL;" + ); +} diff --git a/js/spbc-settings_tab--scanner.min.js b/js/spbc-settings_tab--scanner.min.js index 8e6d3d7bc..e3182018e 100644 --- a/js/spbc-settings_tab--scanner.min.js +++ b/js/spbc-settings_tab--scanner.min.js @@ -1,4 +1,4 @@ -function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
        "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
        ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

        "+t+"

        ").append("

        "+o+"

        "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
        %s

        %s


        '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

        %s


        ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
        %s

        %s


        ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
        %s

        %s


        ':a,s=l?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
        %s
        '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

        %s

        %s

        %s


        ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
      • ${o.created_at}
      • `;e=`
          +function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
          "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
          ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

          "+t+"

          ").append("

          "+o+"

          "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
          %s

          %s


          '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

          %s


        ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
        %s

        %s


        ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
        %s

        %s


        ':a,s=l&&!o.file[t].includes("iframe")?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
        %s
        '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

        %s

        %s

        %s


        ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
      • ${o.created_at}
      • `;e=`
          ${t}
        `;s.find("#spbc-fm-snapshot-list").append(e)}function drawCurrentSnapshot(s,t){var e={action:"spbc_file_monitoring_show_current_snapshot",snapshot_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,beforeSend:function(){jQuery("#spbc-file-monitoring-modal-preloader").show()},success:function(e){e.success&&(t.find("#spbc-fm-snapshot-view .wrap").remove(),t.find("[data-spanshot-id").removeClass("active"),t.find("[data-spanshot-id="+s+"]").addClass("active"),e=`
        diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map
        index 0b10266c8..e899332a2 100644
        --- a/js/spbc-settings_tab--scanner.min.js.map
        +++ b/js/spbc-settings_tab--scanner.min.js.map
        @@ -1 +1 @@
        -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text  = show_icon.attr('spbc_tip_text')  || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
        \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
        \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

        \" + tip_title + \"

        \")\n\t\t.append(\"

        \" + tip_text + \"

        \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
        %s

        %s


        ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
        %s

        %s


        ',\n\t\trow_template_bad = '
        %s

        %s


        ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\trow_template_bad = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
        %s
        '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

        %s

        %s

        %s


        ';\n\tlet row_template_bad = '

        %s

        %s

        %s


        ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
      • ${item.created_at}
      • `;\n\t}\n\n\tlet html =\n\t\t`
          \n ${list}\n
        `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
        \n
        \n                            \n                                ${result.data.content}\n                            \n                        
        \n
        `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
        ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text = show_icon.attr('spbc_tip_text') || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
        \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
        \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

        \" + tip_title + \"

        \")\n\t\t.append(\"

        \" + tip_text + \"

        \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
        %s

        %s


        ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
        %s

        %s


        ',\n\t\trow_template_bad = '
        %s

        %s


        ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\trow_template_bad = '
        ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

        %s

        ' +\n\t\t\t\t'
        ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string && !result.file[curr_row].includes('iframe')){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
        %s
        '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

        %s

        %s

        %s


        ';\n\tlet row_template_bad = '

        %s

        %s

        %s


        ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
      • ${item.created_at}
      • `;\n\t}\n\n\tlet html =\n\t\t`
          \n ${list}\n
        `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
        \n
        \n                            \n                                ${result.data.content}\n                            \n                        
        \n
        `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
        ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","includes","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file diff --git a/js/src/spbc-settings_tab--scanner.js b/js/src/spbc-settings_tab--scanner.js index e5c447287..4dac0a215 100644 --- a/js/src/spbc-settings_tab--scanner.js +++ b/js/src/spbc-settings_tab--scanner.js @@ -308,7 +308,7 @@ function spbc_scannerButtonViewBad_callback(result, data, params){ } else { unformatted_row = row_template } - if (is_bad_string){ + if (is_bad_string && !result.file[curr_row].includes('iframe')){ highlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num])); } else { highlited_row = unformatted_row.printf(curr_row, result.file[curr_row]); diff --git a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php index 0d61d3119..1fc8a7a9a 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php @@ -16,6 +16,7 @@ class BFP extends FirewallModule protected $count_period = 900; // Counting login attempts in this interval protected $chance_to_clean = 100; // Chance to clean log table from old entries. In percents. + protected static $is_checked = false; /** * @psalm-suppress PossiblyUnusedProperty @@ -85,6 +86,10 @@ public function middleAction($result = null) public function updateLogs() { + if (self::$is_checked) { + return; + } + foreach ( $this->ip_array as $current_ip ) { $interval_time = Helper::getTimeIntervalStart($this->count_period); @@ -129,6 +134,8 @@ public function updateLogs() $this->db->execute($query); } } + + self::$is_checked = true; } private function clearTable() diff --git a/lib/CleantalkSP/SpbctWP/ListTable.php b/lib/CleantalkSP/SpbctWP/ListTable.php index 6f4555240..44df9436f 100644 --- a/lib/CleantalkSP/SpbctWP/ListTable.php +++ b/lib/CleantalkSP/SpbctWP/ListTable.php @@ -400,9 +400,13 @@ public function displayColumnHeaders() } $hint = isset($column['hint']) ? '' . $column['hint'] . '' : ''; - + $style = ''; + if (isset($column['width_percent'])) { + $header_length = !empty($column['width_percent']) ? $column['width_percent'] . '%' : ''; + $style = "style='width:$header_length'"; + } // Out - echo "<$tag id='$id' class='$classes' $sort_direction_attr>{$column['heading']}$sortable$hint"; + echo "<$tag id='$id' class='$classes' $sort_direction_attr $style>{$column['heading']}$sortable$hint"; } unset($column_key); } diff --git a/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php b/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php index b4e1c4332..29ba195f6 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/DirectoryScan.php @@ -67,7 +67,7 @@ public function setElements() $this->root, array_merge( array( - 'extensions' => 'php, html, htm', + 'extensions' => 'php, html, htm, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, js', 'extensions_exceptions' => array('jpg', 'jpeg', 'png', 'gif', 'css', 'txt', 'zip', 'xml', 'json'), ), $this->params diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index aae467c07..86c21ccfd 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -388,22 +388,22 @@ public function get_cms_hashes() // phpcs:ignore PSR1.Methods.CamelCapsMethodNam $stage_data_obj->set('added_count_hashes', $result->cnt); $out = array('comment' => 'Already up to date.', 'end' => 1,); } - } else { - $out = array('error' => 'Your WordPress version is not supported'); - } - $scanning_stages_storage->saveToDb(); + $scanning_stages_storage->saveToDb(); - // Adding to log - ScanningLogFacade::writeToLog( - '' . $stage_data_obj::getTitle() . ' ' . $stage_data_obj->getDescription() - ); + // Adding to log + ScanningLogFacade::writeToLog( + '' . $stage_data_obj::getTitle() . ' ' . $stage_data_obj->getDescription() + ); - // Sending data to frontend - $out['stage_data_for_logging'] = array( - 'title' => $stage_data_obj::getTitle(), - 'description' => $stage_data_obj->getDescription() - ); + // Sending data to frontend + $out['stage_data_for_logging'] = array( + 'title' => $stage_data_obj::getTitle(), + 'description' => $stage_data_obj->getDescription() + ); + } else { + $out = array('error' => 'Your WordPress version is not supported'); + } return $out; } @@ -788,7 +788,7 @@ public function countFileSystem($path_to_scan = ABSPATH) $init_params = array( 'count' => true, 'file_exceptions' => 'wp-config.php', - 'extensions' => 'php, html, htm, js', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', 'files_mandatory' => array(), 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); @@ -835,7 +835,7 @@ public function file_system_analysis($offset = null, $amount = null, $path_to_sc 'full_hash' => true, 'offset' => $offset, 'amount' => $amount, - 'extensions' => 'php, html, htm, js', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', 'extensions_exceptions' => '', //array('jpg', 'jpeg', 'png', 'gif', 'css', 'txt', 'zip', 'xml', 'json') 'file_exceptions' => 'wp-config.php', 'files_mandatory' => array(), diff --git a/lib/CleantalkSP/SpbctWP/State.php b/lib/CleantalkSP/SpbctWP/State.php index d474c8b39..72bc164c5 100644 --- a/lib/CleantalkSP/SpbctWP/State.php +++ b/lib/CleantalkSP/SpbctWP/State.php @@ -42,7 +42,7 @@ class State extends \CleantalkSP\Common\State 'bfp__block_period__5_fails' => 3600, // By default ban IP for brute force for one hour 'bfp__count_interval' => 900, // Counting login attempts in this interval 'login_page_rename__enabled' => 0, - 'login_page_rename__name' => 'login', + 'login_page_rename__name' => 'custom-login-url', 'login_page_rename__redirect' => '', 'login_page_rename__send_email_notification' => 1, 'there_was_signature_treatment' => 0, diff --git a/readme.txt b/readme.txt index 441648038..48406c08f 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: security, firewall, malware, wordpress security, brute force Requires at least: 3.0 Tested up to: 6.2 Requires PHP: 5.6 -Stable tag: 2.114 +Stable tag: 2.115 License: GPLv2 License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -301,6 +301,18 @@ This is required for the Security FireWall to function properly. Plugins that ar == Changelog == += 2.115 July 31 2023 = +* New: Firewall. Protect login from brute force even if expired key. +* New: Scanner. Added extensions to find malware. +* Fix: Whitelabel. Added rules for check brand info. +* Fix: Front Scanner. Fixed modal view suspicious code for drive by download malware. +* Fix: General. Check response code on file delete. +* Fix: Scanner. Bulk actions fixed and improved. +* Fix: Scanner. Entropy analyse - Index invalid or out of range. +* Ref: General. WP 6.3 compatibility. Fixed version checking before scanner run. +* Ref: Rename login URl. For new instances default new login page rename. +* Ref: Scanner. Accordeon fields custom length. + = 2.114 July 17 2023 = * New: Scanner. Added pop up with info how to fix file listening and unsafe permissions. * New: SecFW. Manage Firewall as option and refactored clear scanner logs button for admin access. diff --git a/security-malware-firewall.php b/security-malware-firewall.php index aa8df9323..f1b703862 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.114.1-fix +Version: 2.115.1-fix Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n @@ -898,10 +898,12 @@ function spbc_login_form_notification() // @ToDo this section need to be refactored $link = ! $spbc->data["wl_mode_enabled"] ? $link : $spbc->data["wl_brandname"]; + $logo_img = $spbc->data["wl_mode_enabled"] ? "" : ""; echo "
        " . "

        " . __('Brute Force Protection by', 'security-malware-firewall') - . "" + . " " + . $logo_img . $link . ".

        " . "

        " . __('All attempts are logged.', 'security-malware-firewall') . "

        @@ -923,10 +925,11 @@ function spbc_login_form_notification() */ function spbc_authenticate($user, $username) { - global $spbc; if ( is_wp_error($user) ) { + spbc_authenticate__check_brute_force(); + $spbc->login_error = true; $err_codes = $user->get_error_codes(); @@ -1037,6 +1040,43 @@ function spbc_authenticate($user, $username) return $user; } +/** + * Check brute force attack + * + * @return void + */ +function spbc_authenticate__check_brute_force() +{ + global $spbc; + + $login_url = wp_login_url(); + if ($spbc->settings['login_page_rename__enabled']) { + $GLOBALS['wp_rewrite'] = new WP_Rewrite(); + $login_url = RenameLoginPage::getURL($spbc->settings['login_page_rename__name']); + } + + $bfp = new BFP( + array( + 'api_key' => $spbc->api_key, + 'state' => $spbc, + 'is_login_page' => strpos(Server::getURL(), $login_url) === 0, + 'is_logged_in' => Cookie::get('spbc_is_logged_in') === md5($spbc->data['salt'] . parse_url(get_option('home'), PHP_URL_HOST)), + 'bf_limit' => $spbc->settings['bfp__allowed_wrong_auths'], + 'block_period' => $spbc->settings['bfp__block_period__5_fails'], + 'count_period' => $spbc->settings['bfp__count_interval'], + ) + ); + + $bfp->setDb(new DB()); + $bfp->setIpArray([IP::get()]); + $bfp_result = $bfp->check(); + $bfp->middleAction(); + + if (!empty($bfp_result)) { + $bfp->_die($bfp_result[0]); + } +} + /** * Returns browser sign * From 9c0124039e199ef8c354e0f03bacc061c81a3588 Mon Sep 17 00:00:00 2001 From: svfcode Date: Tue, 1 Aug 2023 20:24:46 +0300 Subject: [PATCH 045/109] Update. Tested up to 6.3 --- readme.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.txt b/readme.txt index 48406c08f..5ac78ed36 100644 --- a/readme.txt +++ b/readme.txt @@ -2,7 +2,7 @@ Contributors: glomberg, artemacleantalk, alexandergull Tags: security, firewall, malware, wordpress security, brute force Requires at least: 3.0 -Tested up to: 6.2 +Tested up to: 6.3 Requires PHP: 5.6 Stable tag: 2.115 License: GPLv2 From e84cae6eac0b4a09b8108cf985e0f98faaef8960 Mon Sep 17 00:00:00 2001 From: Artem Anoshin Date: Tue, 8 Aug 2023 10:27:51 +0400 Subject: [PATCH 046/109] Added constants for custom description and FAQ link --- inc/spbc-admin.php | 22 ++++++++++++++++++++++ security-malware-firewall.php | 28 ++++++++++++++++++++++++---- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 7cac76287..f76461566 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -212,6 +212,10 @@ function changedPluginName(){ }); "; + if (!empty($spbc->data['wl_support_faq'])) { + $meta[] = '' . __('FAQ') . ''; + } + return $meta; } @@ -958,3 +962,21 @@ function spbc_set_malware_scan_warns() ); $spbc->save('data'); } + +/** + * Change the plugin description on all plugins page. + * @param $all_plugins + * @return array + */ +function spbc_admin__change_plugin_description($all_plugins) +{ + global $spbc; + if ( + $spbc->data["wl_mode_enabled"] && + isset($all_plugins['security-malware-firewall/security-malware-firewall.php']) && + $spbc->data["wl_plugin_description"] + ) { + $all_plugins['security-malware-firewall/security-malware-firewall.php']['Description'] = $spbc->data["wl_plugin_description"]; + } + return $all_plugins; +} diff --git a/security-malware-firewall.php b/security-malware-firewall.php index f5692f60c..26ccc0d6d 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -331,6 +331,7 @@ function spbc_change_author_name($link, $_author_id, $_author_nicename) if ( ( isset($pagenow) && $pagenow === 'plugins.php' ) || ( isset($_SERVER['REQUEST_URI']) && strpos($_SERVER['REQUEST_URI'], 'plugins.php') !== false ) ) { add_filter('plugin_action_links_' . SPBC_PLUGIN_BASE_NAME, 'spbc_plugin_action_links', 10, 2); add_filter('network_admin_plugin_action_links_' . SPBC_PLUGIN_BASE_NAME, 'spbc_plugin_action_links', 10, 2); + add_filter('all_plugins', 'spbc_admin__change_plugin_description'); add_filter('plugin_row_meta', 'spbc_plugin_links_meta', 10, 2); } @@ -2772,6 +2773,16 @@ function spbc_check_account_status($api_key) ? 1 : 0; + //todo:temporary solution for description, until we found the way to transfer this from cloud + if (defined('SPBC_WHITELABEL_PLUGIN_DESCRIPTION')) { + $result['wl_plugin_description'] = SPBC_WHITELABEL_PLUGIN_DESCRIPTION; + } + + //todo:temporary solution for FAQ + if (defined('SPBC_WHITELABEL_FAQ_LINK')) { + $result['wl_faq_url'] = SPBC_WHITELABEL_FAQ_LINK; + } + if ( $spbc->is_network && $spbc->is_mainsite && $spbc->ms__work_mode == 1 ) { $spbc->data['services_count '] = isset($result['services_count']) ? $result['services_count'] : ''; $spbc->data['services_max'] = isset($result['services_max']) ? $result['services_max'] : ''; @@ -2786,15 +2797,24 @@ function spbc_check_account_status($api_key) $spbc->data['wl_url'] = isset($result['wl_url']) ? Sanitize::cleanUrl($result['wl_url']) : $spbc->default_data['wl_url']; - $spbc->data['wl_support_faq'] = isset($result['wl_support_url']) - ? Sanitize::cleanUrl($result['wl_support_url']) - : $spbc->default_data['wl_support_url']; + + if (isset($result['wl_faq_url'])) { + $spbc->data['wl_support_faq'] = Sanitize::cleanUrl($result['wl_faq_url']); + } elseif (isset($result['wl_support_url'])) { + $spbc->data['wl_support_faq'] = Sanitize::cleanUrl($result['wl_support_url']); + } else { + $spbc->data['wl_support_faq'] = $spbc->default_data['wl_support_url']; + } + $spbc->data['wl_support_url'] = isset($result['wl_support_url']) ? Sanitize::cleanUrl($result['wl_support_url']) : $spbc->default_data['wl_support_url']; $spbc->data['wl_support_email'] = isset($result['wl_support_email']) ? Sanitize::cleanEmail($result['wl_support_email']) : $spbc->default_data['wl_support_email']; + $spbc->data['wl_plugin_description'] = isset($result['wl_plugin_description']) + ? Sanitize::cleanTextField($result['wl_plugin_description']) + : get_plugin_data('security-malware-firewall/security-malware-firewall.php')['Description']; } else { $spbc->data['wl_mode_enabled'] = false; $spbc->data['wl_brandname'] = $spbc->default_data['wl_brandname']; @@ -2815,7 +2835,7 @@ function spbc_check_account_status($api_key) $spbc->save('network_settings'); } } - +spbc_check_account_status('ejudaqupu5yzuse'); /** * Clears the table with security logs. Leaves only 50 entries. */ From 71e8cae9fff5b902152224b8e282fec0124bbd8a Mon Sep 17 00:00:00 2001 From: Artem Anoshin Date: Tue, 8 Aug 2023 10:30:23 +0400 Subject: [PATCH 047/109] Removed debug --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 26ccc0d6d..9e2abbada 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2835,7 +2835,7 @@ function spbc_check_account_status($api_key) $spbc->save('network_settings'); } } -spbc_check_account_status('ejudaqupu5yzuse'); + /** * Clears the table with security logs. Leaves only 50 entries. */ From b2a2af4c2e39ed380968356c6bfe74234ecd6401 Mon Sep 17 00:00:00 2001 From: Artem Anoshin Date: Wed, 9 Aug 2023 11:31:34 +0400 Subject: [PATCH 048/109] WL: there is no Templates if WL is active --- inc/spbc-admin.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index f76461566..955c39341 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -122,7 +122,11 @@ function spbc_admin_init() add_action('wp_ajax_spbc_private_list_add', 'spbc_private_list_add'); // Settings Templates - if ($spbc->is_mainsite || $spbc->ms__work_mode != 2) { + if ( + ! $spbc->data['wl_mode_enabled'] && + $spbc->is_mainsite || + $spbc->ms__work_mode != 2 + ) { new CleantalkSettingsTemplates($spbc->api_key); } From 58abb24f76097b55c44ad7847b209f55d9889e6b Mon Sep 17 00:00:00 2001 From: Artem Anoshin Date: Wed, 9 Aug 2023 11:44:59 +0400 Subject: [PATCH 049/109] WL: Fixed block pages --- lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php | 1 + lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html | 2 +- lib/CleantalkSP/SpbctWP/Firewall/die_page_fw.html | 2 +- lib/CleantalkSP/SpbctWP/Firewall/die_page_tc.html | 2 +- lib/CleantalkSP/SpbctWP/Firewall/die_page_waf.html | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php b/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php index a4349fb69..0c573e812 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php @@ -129,6 +129,7 @@ public function _die(Result $result) // phpcs:ignore PSR2.Methods.MethodDeclarat . date("D, d M Y H:i:s") . '', '{BRANDNAME}' => $spbc->data["wl_brandname"], + '{CLEANTALK_URL}' => esc_url($spbc->data['wl_url']), ); foreach ( $replaces as $place_holder => $replace ) { diff --git a/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html b/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html index 1a64ed024..b33e27159 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html +++ b/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html @@ -144,7 +144,7 @@
        "; if (!empty($spbc->data['wl_support_faq'])) { - $meta[] = '' . __('FAQ') . ''; + $meta[] = '' . __('FAQ') . ''; } return $meta; From 2a320e90c48ae7d7757ed61a4a42f96346a37e16 Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 11 Aug 2023 09:33:01 +0300 Subject: [PATCH 054/109] Upd. General. Up version and upd changelog. --- readme.txt | 10 +++++++++- security-malware-firewall.php | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index 5ac78ed36..b98b04f57 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: security, firewall, malware, wordpress security, brute force Requires at least: 3.0 Tested up to: 6.3 Requires PHP: 5.6 -Stable tag: 2.115 +Stable tag: 2.116 License: GPLv2 License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -301,6 +301,14 @@ This is required for the Security FireWall to function properly. Plugins that ar == Changelog == += 2.116 Aug 14 2023 = +* New: WL. Added constants for custom description and FAQ link. +* Fix: FW. Delete all lines after send fw logs. +* Fix: WL. Support link in errors. +* Fix: WL. Email 2FA fixed. +* Fix: WL. Fixed block pages. +* Fix: WL. There is no Templates if WL is active. + = 2.115 July 31 2023 = * New: Firewall. Protect login from brute force even if expired key. * New: Scanner. Added extensions to find malware. diff --git a/security-malware-firewall.php b/security-malware-firewall.php index ea1308545..7f86d0985 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.115-dev +Version: 2.116-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From af601a97f731fe14d1dca27a7d7964479fffd619 Mon Sep 17 00:00:00 2001 From: svfcode Date: Tue, 15 Aug 2023 10:27:59 +0300 Subject: [PATCH 055/109] Update version --- security-malware-firewall.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 7f86d0985..3a924f9f3 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.116-dev +Version: 2.116.1-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 88cf1d983429ec9241ddbd31ef5250bf4280375f Mon Sep 17 00:00:00 2001 From: svfcode Date: Tue, 15 Aug 2023 10:37:09 +0300 Subject: [PATCH 056/109] merge master to fix --- inc/spbc-admin.php | 28 ++++++++++++++- inc/spbc-settings.php | 8 ++++- lib/CleantalkSP/SpbctWP/Firewall/FW.php | 5 +-- .../SpbctWP/Firewall/FirewallModule.php | 1 + .../SpbctWP/Firewall/die_page_bfp.html | 2 +- .../SpbctWP/Firewall/die_page_fw.html | 2 +- .../SpbctWP/Firewall/die_page_tc.html | 2 +- .../SpbctWP/Firewall/die_page_waf.html | 2 +- readme.txt | 12 +++++-- security-malware-firewall.php | 35 +++++++++++++++---- 10 files changed, 79 insertions(+), 18 deletions(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 7cac76287..3d7da390c 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -122,7 +122,11 @@ function spbc_admin_init() add_action('wp_ajax_spbc_private_list_add', 'spbc_private_list_add'); // Settings Templates - if ($spbc->is_mainsite || $spbc->ms__work_mode != 2) { + if ( + ! $spbc->data['wl_mode_enabled'] && + $spbc->is_mainsite || + $spbc->ms__work_mode != 2 + ) { new CleantalkSettingsTemplates($spbc->api_key); } @@ -212,6 +216,10 @@ function changedPluginName(){ }); "; + if (!empty($spbc->data['wl_support_faq'])) { + $meta[] = '' . __('FAQ') . ''; + } + return $meta; } @@ -958,3 +966,21 @@ function spbc_set_malware_scan_warns() ); $spbc->save('data'); } + +/** + * Change the plugin description on all plugins page. + * @param $all_plugins + * @return array + */ +function spbc_admin__change_plugin_description($all_plugins) +{ + global $spbc; + if ( + $spbc->data["wl_mode_enabled"] && + isset($all_plugins['security-malware-firewall/security-malware-firewall.php']) && + $spbc->data["wl_plugin_description"] + ) { + $all_plugins['security-malware-firewall/security-malware-firewall.php']['Description'] = $spbc->data["wl_plugin_description"]; + } + return $all_plugins; +} diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 3e0ddda55..f00e522b4 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1448,7 +1448,13 @@ function spbc_settings__error__output() foreach ($errors_out as $value) { echo '

        ' . spbc_render_links_to_tag($value) . '

        '; } - echo '

        ' . sprintf(__('You can get support any time here: %s.', 'security-malware-firewall'), 'https://wordpress.org/support/plugin/security-malware-firewall') . '

        '; + + $link_to_support = 'https://wordpress.org/support/plugin/security-malware-firewall'; + if (!empty($spbc->data['wl_support_url'])) { + $link_to_support = esc_url($spbc->data['wl_support_url']); + } + + echo '

        ' . sprintf(__('You can get support any time here: %s.', 'security-malware-firewall'), '' . $link_to_support . '') . '

        '; echo '
        '; } } diff --git a/lib/CleantalkSP/SpbctWP/Firewall/FW.php b/lib/CleantalkSP/SpbctWP/Firewall/FW.php index cda46a2d3..108099fe9 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/FW.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/FW.php @@ -457,10 +457,7 @@ public static function sendLog($db, $log_table, $ct_key) //Checking answer and deleting all lines from the table if ( empty($result['error']) ) { if ( (int)$result['rows'] === count($data) ) { - $db->execute("DELETE FROM " . $log_table . " WHERE entry_id NOT IN (" . - "SELECT entry_id FROM (" . - "SELECT entry_id, entry_timestamp FROM " . $log_table . " ORDER BY entry_timestamp DESC LIMIT 20) too );"); - + $db->execute("TRUNCATE TABLE " . $log_table . ";"); return count($data); } diff --git a/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php b/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php index a4349fb69..0c573e812 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/FirewallModule.php @@ -129,6 +129,7 @@ public function _die(Result $result) // phpcs:ignore PSR2.Methods.MethodDeclarat . date("D, d M Y H:i:s") . '', '{BRANDNAME}' => $spbc->data["wl_brandname"], + '{CLEANTALK_URL}' => esc_url($spbc->data['wl_url']), ); foreach ( $replaces as $place_holder => $replace ) { diff --git a/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html b/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html index 1a64ed024..b33e27159 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html +++ b/lib/CleantalkSP/SpbctWP/Firewall/die_page_bfp.html @@ -144,7 +144,7 @@
        '; // JS before tab + $src = SPBC_PATH . '/js/spbc-' . $script . '?ver=' . SPBC_VERSION; + $target = 'spbc_tab-' . $elem_name; + echo ""; // JS before tab } } @@ -1105,10 +1111,16 @@ function spbc_settings__draw_elements($elems_to_draw = null, $direct_call = fals if (isset($elem['js_after'])) { foreach (explode(' ', $elem['js_after']) as $script) { if ( strpos($script, '.min') === false ) { - echo ''; + $src = SPBC_PATH . '/js/src/spbc-' . $script . '?ver=' . SPBC_VERSION; } else { - echo ''; // JS after tab + $src = SPBC_PATH . '/js/spbc-' . $script . '?ver=' . SPBC_VERSION; } + $target = 'spbc_tab-' . $elem_name; + echo ""; // JS after tab } } } else { From 69735b1295fa5e74215df23818b62f340a50040d Mon Sep 17 00:00:00 2001 From: svfcode Date: Tue, 22 Aug 2023 10:53:30 +0300 Subject: [PATCH 064/109] Upd. Scan. Find and show all malwares in Frontend Malware accordion. --- lib/CleantalkSP/SpbctWP/Scanner/Frontend.php | 23 ++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php index b11b3b553..6ced1b4c6 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php @@ -316,11 +316,26 @@ public function check() $page['bad'] = $results ? true : $page['bad']; + $page['found']['redirects'] = 0; + $page['found']['dbd'] = 0; + $page['found']['signatures'] = 0; + $page['found']['csrf'] = 0; + foreach ( $results as $result ) { - $page['found']['redirects'] = $result->type === 'redirects' ? 1 : 0; - $page['found']['dbd'] = $result->type === 'dbd' ? 1 : 0; - $page['found']['signatures'] = $result->type === 'signatures' ? 1 : 0; - $page['found']['csrf'] = $result->type === 'csrf' ? 1 : 0; + switch ($result->type) { + case 'redirects': + $page['found']['redirects'] = 1; + break; + case 'dbd': + $page['found']['dbd'] = 1; + break; + case 'signatures': + $page['found']['signatures'] = 1; + break; + case 'csrf': + $page['found']['csrf'] = 1; + break; + } $page['found']['line'] = $result->line; $page['found']['needle'] = $result->needle; From 9f04f9ad30ee726cafcc088f5b78c95a4805e653 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Tue, 22 Aug 2023 14:41:06 +0500 Subject: [PATCH 065/109] Fix. After tests. --- inc/spbc-scanner.php | 22 ++++++++++++++-------- inc/spbc-settings.php | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index 778c3f15d..74436aec5 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -1045,14 +1045,20 @@ function spbc_get_sql_where_addiction_for_table_of_category($category) global $spbc; switch ($category) { case 'critical': - $res = ' WHERE severity IN("CRITICAL") AND - (status <> "QUARANTINED" AND - status <> "APROVED" AND - status <> "APPROVED_BY_CT") - AND - (last_sent IS NULL OR - pscan_status = "DANGEROUS" OR - analysis_status = "DANGEROUS")'; + $res = ' WHERE status = "DENIED_BY_CLOUD" + OR ( + severity IN("CRITICAL") + AND ( + status <> "QUARANTINED" AND + status <> "APROVED" AND + status <> "APPROVED_BY_CT" + ) + AND ( + last_sent IS NULL OR + pscan_status = "DANGEROUS" OR + analysis_status = "DANGEROUS" + ) + )'; break; case 'suspicious': $res = ' WHERE severity <> "CRITICAL" AND diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 13feac8db..8c4e35bc8 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -4857,7 +4857,7 @@ function spbc__manual_cure_service_suggest_html($for) $out .= '

        '; // show triangle $out .= $show_exclaim_triangle - ? 'attention ' + ? 'attention ' : ''; // complete the suggestion text $out .= $text . ' ' . $href . '.'; From 6b230bf4329b6d9302297c55bad9ea733ac9a0e8 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Tue, 22 Aug 2023 14:52:31 +0500 Subject: [PATCH 066/109] Fix. Disable suggestion blocks for WL mode. --- inc/spbc-settings.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 8c4e35bc8..2790ee385 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -2788,7 +2788,7 @@ function spbc_field_scanner__show_accordion($direct_call = false) //critical description $critical_description = __('These files may not contain malicious code but they use very dangerous PHP functions and constructions! PHP developers don\'t recommend to use it and it looks very suspicious.', 'security-malware-firewall'); - if ($spbc->data['display_scanner_warnings']['analysis']) { + if ($spbc->data['display_scanner_warnings']['analysis'] && !$spbc->data['wl_mode_enabled']) { $critical_description .= spbc__manual_cure_service_suggest_html('critical'); } @@ -2802,7 +2802,7 @@ function spbc_field_scanner__show_accordion($direct_call = false) . __('option', 'security-malware-firewall') . ' ' . '' . __('here', 'security-malware-firewall') . '.'; - $unknown_files_description .= spbc__manual_cure_service_suggest_html('unknown'); + $unknown_files_description .= $spbc->data['wl_mode_enabled'] ? '' : spbc__manual_cure_service_suggest_html('unknown'); //cure log description $cure_log_description = '

        ' . From ea1a03b37cb8b5eed582fc39224911177b77a9f2 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 23 Aug 2023 11:42:52 +0500 Subject: [PATCH 067/109] New. Show different types of weakspots in severity order. --- js/spbc-settings_tab--scanner.min.js | 2 +- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/src/spbc-settings_tab--scanner.js | 72 ++++++++++++++++-------- 3 files changed, 49 insertions(+), 27 deletions(-) diff --git a/js/spbc-settings_tab--scanner.min.js b/js/spbc-settings_tab--scanner.min.js index e3182018e..ead42b042 100644 --- a/js/spbc-settings_tab--scanner.min.js +++ b/js/spbc-settings_tab--scanner.min.js @@ -1,4 +1,4 @@ -function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
        "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
        ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

        "+t+"

        ").append("

        "+o+"

        "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
        %s

        %s


        '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

        %s


        ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
        %s

        %s


        ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
        %s

        %s


        ':a,s=l&&!o.file[t].includes("iframe")?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
        %s
        '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

        %s

        %s

        %s


        ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
      • ${o.created_at}
      • `;e=`
          +function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
          "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
          ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

          "+t+"

          ").append("

          "+o+"

          "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
          %s

          %s


          '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o'+a+" weakspots:",d=jQuery("#spbc_dialog"),_=(d.append(c.printf("",_)),d.append(c.printf("...","...")),d.find("#"+l));for(p in _.parent().parent().css("text-align","center"),_.parent().parent().css("border","1px dotted"),_.parent().parent().css("background","darkgrey"),r[a]){p=[...new Set(p)].sort();var u=+r[a][p];for(let e=u-2;e<=2+u;e++)void 0!==s.file[e]&&d.append((u===e?'
          %s

          %s


          ':c).printf(e,s.file[e]));d.append(c.printf("...","..."))}}jQuery("#spbc_dialog div").last().remove();let b=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,f=document.documentElement.clientHeight/100*75,g=b{};if(1==o.success){console.log(o);var n,a='
          %s

          %s


          ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
          %s

          %s


          ':a,s=l&&!o.file[t].includes("iframe")?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
          %s
          '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

          %s

          %s

          %s


          ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
        • ${o.created_at}
        • `;e=`
            ${t}
          `;s.find("#spbc-fm-snapshot-list").append(e)}function drawCurrentSnapshot(s,t){var e={action:"spbc_file_monitoring_show_current_snapshot",snapshot_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,beforeSend:function(){jQuery("#spbc-file-monitoring-modal-preloader").show()},success:function(e){e.success&&(t.find("#spbc-fm-snapshot-view .wrap").remove(),t.find("[data-spanshot-id").removeClass("active"),t.find("[data-spanshot-id="+s+"]").addClass("active"),e=`
          diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map
          index e899332a2..404ffa8fb 100644
          --- a/js/spbc-settings_tab--scanner.min.js.map
          +++ b/js/spbc-settings_tab--scanner.min.js.map
          @@ -1 +1 @@
          -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text  = show_icon.attr('spbc_tip_text')  || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
          \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

          \" + tip_title + \"

          \")\n\t\t.append(\"

          \" + tip_text + \"

          \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
          %s

          %s


          ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
          %s

          %s


          ',\n\t\trow_template_bad = '
          %s

          %s


          ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
          ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

          %s

          ' +\n\t\t\t\t'
          ',\n\t\t\trow_template_bad = '
          ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

          %s

          ' +\n\t\t\t\t'
          ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string && !result.file[curr_row].includes('iframe')){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
          %s
          '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

          %s

          %s

          %s


          ';\n\tlet row_template_bad = '

          %s

          %s

          %s


          ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
        • ${item.created_at}
        • `;\n\t}\n\n\tlet html =\n\t\t`
            \n ${list}\n
          `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
          \n
          \n                            \n                                ${result.data.content}\n                            \n                        
          \n
          `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
          ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","includes","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text = show_icon.attr('spbc_tip_text') || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
          \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

          \" + tip_title + \"

          \")\n\t\t.append(\"

          \" + tip_text + \"

          \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
          %s

          %s


          ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() {\n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close');\n\t\t\t});\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
          %s

          %s


          ',\n\t\trow_template_bad = '
          %s

          %s


          ',\n\t\tseverity_parts = [],\n\t\tseverity_parts_sorted = [],\n\t\tseverity_keys_sorted = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots)\n\tfor(let severity in result.weak_spots){\n\t\tseverity_parts[severity] = Object.keys(result.weak_spots[severity])\n\t}\n\n\tseverity_keys_sorted = Object.keys(severity_parts).sort();\n\n\tfor(key in severity_keys_sorted){\n\t\tseverity_parts_sorted[severity_keys_sorted[key]] = severity_parts[severity_keys_sorted[key]]\n\t}\n\n\tfor (let severity_part in severity_parts_sorted) {\n\t\tlet header_name = 'spbc-dialog-row-header-' + severity_part.toLowerCase();\n\t\tlet header_html = '' + severity_part + ' weakspots:';\n\t\tconst dialog = jQuery('#spbc_dialog');\n\n\t\tdialog.append(row_template.printf('',header_html));\n\t\tdialog.append(row_template. printf('...','...'));\n\n\t\tlet header = dialog.find('#' + header_name);\n\t\theader.parent().parent().css('text-align', 'center');\n\t\theader.parent().parent().css('border', '1px dotted');\n\t\theader.parent().parent().css('background', 'darkgrey');\n\n\t\tfor(let str_num in severity_parts[severity_part]){\n\t\t\t// Sort bad line\n\t\t\tstr_num = [...new Set(str_num)].sort()\n\n\t\t\tlet row = +severity_parts[severity_part][str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tdialog.append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tdialog.append(row_template. printf('...','...'));\n\t\t}\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() {\n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close');\n\t\t\t});\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
          ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

          %s

          ' +\n\t\t\t\t'
          ',\n\t\t\trow_template_bad = '
          ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

          %s

          ' +\n\t\t\t\t'
          ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string && !result.file[curr_row].includes('iframe')){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
          %s
          '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() {\n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close');\n\t\t\t});\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

          %s

          %s

          %s


          ';\n\tlet row_template_bad = '

          %s

          %s

          %s


          ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
        • ${item.created_at}
        • `;\n\t}\n\n\tlet html =\n\t\t`
            \n ${list}\n
          `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
          \n
          \n                            \n                                ${result.data.content}\n                            \n                        
          \n
          `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
          ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});\n"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity_keys_sorted","severity","severity_part","row_template","severity_parts","severity_parts_sorted","weak_spots","JSON","parse","key","sort","str_num","header_name","toLowerCase","header_html","header","find","Set","curr_row","last","remove","afterClose","success","str_nums","concat","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","includes","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"AAAA,SAASA,sBAAsBC,GAIP,SAAnBC,EAA4BC,GAGjB,KAAA,IAANA,IAEyD,GAA9DC,OAAOD,EAAEE,MAAM,EAAEC,OAAO,0BAA0B,EAAEC,QAAeH,CAAAA,OAAOD,EAAEE,MAAM,EAAEG,SAAS,+BAA+B,GAC5HJ,OAAOD,EAAEE,MAAM,EAAEG,SAAS,6BAA6B,KAGzDJ,OAAO,0BAA0B,EAAEK,KAAK,EACxCL,OAAOM,QAAQ,EAAEC,IAAI,QAAST,CAAgB,EAEhD,CAdA,IAAIU,EAAYX,EAAUY,KAAK,gBAAgB,GAAK,KAChDC,EAAYb,EAAUY,KAAK,eAAe,GAAM,KAmBhDE,GAJJb,EAAiB,EAEjBD,EAAUe,MAAM,6CAA6C,EAEnDZ,OAAO,0BAA0B,GAE3CW,EAAIE,MAAM,EACRC,OAAO,2CAA2C,EAClDC,IAAI,CACJC,IAAKnB,EAAUoB,SAAS,EAAED,IAAM,EAChCE,KAAMrB,EAAUoB,SAAS,EAAEC,KAAO,EACnC,CAAC,EACFP,EAAIG,OAAO,2DAA2D,EACpEA,OAAO,qCAAuCN,EAAY,OAAO,EACjEM,OAAO,mCAAqCJ,EAAW,MAAM,EAE/DV,OAAOM,QAAQ,EAAEa,GAAG,QAASrB,CAAgB,EAC7CD,EAAUuB,QAAQ,IAAI,EAAED,GAAG,WAAYrB,CAAgB,CACxD,CAEA,SAASuB,oCAAoCV,GAC5C,IAAIW,EAAOtB,OAAOW,CAAG,EACjBY,EAAO,CACVC,OAAQ,yBACRC,QAASH,EAAKF,QAAQ,cAAc,EAAEX,KAAK,KAAK,CACjD,EACIiB,EAAS,CACZC,QAASL,EAAKpB,OAAO,EAAE0B,SAAS,sBAAsB,EACtDC,SAAUC,gCACVC,YAAa,SAASC,GAAMC,UAAUC,KAAK,EAAEC,SAAUH,CAAI,CAAG,CAC/D,EACAI,qBAAqBb,EAAMG,CAAM,CAClC,CAKA,SAASW,0CAA0C1B,GAClD,IAAMW,EAAOtB,OAAOW,CAAG,EACjBY,EAAO,CACZC,OAAQ,4CACRC,QAASH,EAAKF,QAAQ,cAAc,EAAEX,KAAK,KAAK,CACjD,EACIiB,EAAS,CACZC,QAASL,EAAKpB,OAAO,EAAE0B,SAAS,sBAAsB,EACtDC,SAAUS,OAAOC,SAASC,OAAO,EACjCT,YAAa,SAASC,GAAMC,UAAUC,KAAK,EAAEC,SAAUH,CAAI,CAAG,CAC/D,EACAI,qBAAqBb,EAAMG,CAAM,CAClC,CAEA,SAASe,oCAAoC9B,GAC5C,IAAIW,EAAOtB,OAAOW,CAAG,EACjBY,EAAO,CACVC,OAAQ,yBACRkB,SAAUpB,EAAKF,QAAQ,cAAc,EAAEX,KAAK,KAAK,CAClD,EACIiB,EAAS,CACZC,QAASL,EAAKpB,OAAO,EAAE0B,SAAS,sBAAsB,EACtDC,SAAUC,gCACVC,YAAa,SAASC,GAAMC,UAAUC,KAAK,EAAEC,SAAUH,CAAI,CAAG,CAC/D,EAEIW,EAAU3C,OAAO,SAAS,EAC1B4C,EAAgB5C,OAAO,cAAc,EA8BrC2B,GA5BJiB,EAAcC,OAAO,CACpBC,MAAM,CAAA,EACNC,MAAO,YACP9B,SAAU,CAAE+B,GAAI,aAAcC,GAAI,mBAAqBC,GAAIZ,MAAO,EAClEa,MAASR,EAAQQ,MAAM,EAAI,IAAM,GACjCC,KAAM,CAAEC,OAAQ,QAASC,SAAU,GAAI,EACvCC,UAAW,CAAA,EACXC,UAAW,CAAA,EACXC,UAAW,IACXC,QAAS,CAACC,YAAa,YAAY,EACnCzB,KAAM,SAAS0B,EAAOC,GACrBD,EAAM3D,OAAO6D,MAAMC,SAAW,OAC9B/D,OAAO,cAAc,EAAEgE,OAAQ1D,SAAS2D,gBAA4B,aAAI,IAAM,EAAE,CACjF,EACAC,YAAa,SAASN,EAAOC,GAC5BvD,SAAS6D,KAAKL,MAAMC,SAAW,OAC/B/D,OAAO,cAAc,EAAEa,MAAM,CAC9B,CACD,CAAC,EAED+B,EAAc9B,OAAO,mNAMhB,EAESd,OAAO,2BAA2B,GAC5CoE,EAAqC,KAAlBzB,EAAQQ,MAAM,EAErCxB,EAAQqC,OAAO,IAAMI,CAAe,EACpCzC,EAAQwB,MAAM,IAAMiB,CAAe,EACnCzC,EAAQZ,IAAI,CAACG,KAAM0B,EAAcO,MAAM,EAAE,EAAK,IAAMiB,EAAkB,CAAE,CAAC,EACzEzC,EAAQZ,IAAI,CAACC,IAAK4B,EAAcoB,OAAO,EAAE,EAAK,IAAMI,EAAkB,CAAE,CAAC,EAEzEhC,qBAAqBb,EAAMG,CAAM,CAClC,CAEA,SAASI,gCAAgCuC,GAExCC,IAOQC,EAPJ3B,EAAgB5C,OAAO,cAAc,EACzC4C,EAAc/B,MAAM,EAEpBb,OAAO,2BAA2B,EAAEe,IAAI,CAACyD,QAAQ,MAAM,CAAC,EAIxD,IAAQD,KAAOF,EAAOI,KACrB7B,EAAc9B,OAHI,yIAGgB4D,OAAOH,EAAKF,EAAOI,KAAKF,EAAI,CAAC,EAGhED,IAAIK,EAAmD,GAAlCC,OAAOC,KAAKR,EAAOI,IAAI,EAAEtE,OAAc,GAAK,GAAuC,GAAlCyE,OAAOC,KAAKR,EAAOI,IAAI,EAAEtE,OAC9F2E,EAAkBxE,SAAS2D,gBAA4B,aAAI,IAAM,GACjEF,EAAiBY,EAAiBG,EAAiB,SAAW,SAC9Dd,EAA8B,UAAbD,EAAwBe,EAAiBH,EAE3D/B,EAAc7B,IAAI,CACjBiD,OAAQA,EACRD,SAAUA,CACX,CAAC,EAEDnB,EAAcC,OAAO,CACpBC,MAAM,CAAA,EACNC,MAAQ,WAAasB,EAAOU,UAC5B9D,SAAU,CAAE+B,GAAI,aAAcC,GAAI,mBAAqBC,GAAIZ,MAAO,EAClEa,MAASnD,OAAO,SAAS,EAAEmD,MAAM,EAAI,IAAM,GAC3CC,KAAM,CAAEC,OAAQ,QAASC,SAAU,GAAI,EACvCC,UAAW,CAAA,EACXC,UAAW,CAAA,EACXC,UAAW,IACXC,QAAS,CAACC,YAAa,YAAY,EACnCzB,KAAM,SAAS0B,EAAOC,GACrBD,EAAM3D,OAAO6D,MAAMC,SAAWA,EAC9B/D,OAAO,cAAc,EAAEgE,OAAOA,CAAM,EACpChE,OAAO,oBAAoB,EAAEmB,GAAG,QAAS,WACxCnB,OAAO,cAAc,EAAE6C,OAAO,OAAO,CACtC,CAAC,CACF,EACAqB,YAAa,SAASN,EAAOC,GAC5BvD,SAAS6D,KAAKL,MAAMC,SAAW,OAC/B/D,OAAO,cAAc,EAAEa,MAAM,CAC9B,CACD,CAAC,EAEDmE,QAAQC,IAAI,aAAa,CAE1B,CAEA,SAASC,wCAAwCvE,GAChD,IAAIW,EAAOtB,OAAOW,CAAG,EACjBY,EAAO,CACVC,OAAQ,yBACRC,QAASH,EAAKF,QAAQ,cAAc,EAAEX,KAAK,KAAK,CACjD,EACIiB,EAAS,CACZC,QAASL,EAAKpB,OAAO,EAAE0B,SAAS,sBAAsB,EACtDC,SAAUsD,uCACVpD,YAAa,SAASC,GAAMC,UAAUC,KAAK,EAAEC,SAAUH,CAAI,CAAG,CAC/D,EACAI,qBAAqBb,EAAMG,CAAM,CAClC,CAEA,SAAS0D,wCAAwCzE,GAChD,IAAIW,EAAOtB,OAAOW,CAAG,EACjBY,EAAO,CACVC,OAAQ,yBACRkB,SAAUpB,EAAKpB,OAAO,EAAEO,KAAK,KAAK,CACnC,EACIiB,EAAS,CACZC,QAASL,EAAKpB,OAAO,EAAE0B,SAAS,sBAAsB,EACtDC,SAAUwD,mCACVtD,YAAa,SAASC,GAAMC,UAAUC,KAAK,EAAEC,SAAUH,CAAI,CAAG,CAC/D,EACAI,qBAAqBb,EAAMG,CAAM,CAClC,CAEA,SAASyD,uCAAuCd,EAAQ9C,EAAMG,GAE7DsD,QAAQC,IAAI,2BAA2B,EACvCD,QAAQC,IAAIK,SAAS,EACrBtF,OAAO,cAAc,EAAEa,MAAM,EAE7B,IAIC0E,EAGOC,EAUCC,EAjBLC,EAAmB,yIAEtBC,EAAiB,GACjBC,EAAwB,GAIzB,IAAQJ,KADRnB,EAAOwB,WAAaC,KAAKC,MAAM1B,EAAOwB,UAAU,EAC5BxB,EAAOwB,WAC1BF,EAAeH,GAAYZ,OAAOC,KAAKR,EAAOwB,WAAWL,EAAS,EAKnE,IAAIQ,OAFJT,EAAuBX,OAAOC,KAAKc,CAAc,EAAEM,KAAK,EAGvDL,EAAsBL,EAAqBS,MAAQL,EAAeJ,EAAqBS,MAGxF,IAASP,KAAiBG,EAAuB,CAChDtB,IAYQ4B,EAZJC,EAAc,0BAA4BV,EAAcW,YAAY,EACpEC,EAAc,aAAeF,EAAc,mCAAqCV,EAAgB,yBAC9F5C,EAAS7C,OAAO,cAAc,EAKhCsG,GAHJzD,EAAO/B,OAAO4E,EAAahB,OAAO,GAAG2B,CAAW,CAAC,EACjDxD,EAAO/B,OAAO4E,EAAiBhB,OAAO,aAAa,YAAY,CAAC,EAEnD7B,EAAO0D,KAAK,IAAMJ,CAAW,GAK1C,IAAQD,KAJRI,EAAOpG,OAAO,EAAEA,OAAO,EAAEa,IAAI,aAAc,QAAQ,EACnDuF,EAAOpG,OAAO,EAAEA,OAAO,EAAEa,IAAI,SAAU,YAAY,EACnDuF,EAAOpG,OAAO,EAAEA,OAAO,EAAEa,IAAI,aAAc,UAAU,EAElC4E,EAAeF,GAAe,CAEhDS,EAAU,CAAC,GAAG,IAAIM,IAAIN,CAAO,GAAGD,KAAK,EAErC3B,IAAIC,EAAM,CAACoB,EAAeF,GAAeS,GAIzC,IAAI5B,IAAImC,EAAWlC,EAHF,EAGuBkC,GAHvB,EAGmClC,EAAqBkC,CAAQ,GAC3C,KAAA,IAA1BpC,EAAOI,KAAKgC,IACtB5D,EAAO/B,QAAQyD,IAAQkC,EAvCP,kLAuCqCf,GAAchB,OAAO+B,EAAUpC,EAAOI,KAAKgC,EAAS,CAAC,EAK5G5D,EAAO/B,OAAO4E,EAAiBhB,OAAO,aAAa,YAAY,CAAC,CACjE,CACD,CAGA1E,OAAO,kBAAkB,EAAE0G,KAAK,EAAEC,OAAO,EAEzCrC,IAAIK,EAAqD,GAApC3E,OAAO,kBAAkB,EAAEG,OAAc,GAAK,GAAyC,GAApCH,OAAO,kBAAkB,EAAEG,OAClG2E,EAAkBxE,SAAS2D,gBAA4B,aAAI,IAAM,GACjEF,EAAiBY,EAAiBG,EAAiB,YAAc,SACjEd,EAA8B,UAAbD,EAAwBe,EAAiBH,EAE3D3E,OAAO,cAAc,EAAE6C,OAAO,CAC7BC,MAAM,CAAA,EACNC,MAAOsB,EAAOU,UACd9D,SAAU,CAAE+B,GAAI,aAAcC,GAAI,mBAAqBC,GAAIZ,MAAO,EAClEa,MAASnD,OAAO,SAAS,EAAEmD,MAAM,EAAI,IAAM,GAC3CC,KAAM,CAAEC,OAAQ,QAASC,SAAU,GAAI,EACvCC,UAAW,CAAA,EACXC,UAAW,CAAA,EACXC,UAAW,IACXC,QAAS,CAACC,YAAa,YAAY,EACnCzB,KAAM,SAAS0B,EAAOC,GACrBD,EAAM3D,OAAO6D,MAAMC,SAAWA,EAC9B/D,OAAO,cAAc,EAAEgE,OAAOA,CAAM,EACpChE,OAAO,oBAAoB,EAAEmB,GAAG,QAAS,WACxCnB,OAAO,cAAc,EAAE6C,OAAO,OAAO,CACtC,CAAC,CACF,EACAqB,YAAa,SAASN,EAAOC,GAC5BvD,SAAS6D,KAAKL,MAAMC,SAAW,OAC/B/D,OAAO,cAAc,EAAEa,MAAM,CAC9B,CACD,CAAC,CACF,CAEA,SAASwE,mCAAmChB,EAAQ9C,EAAMG,GAEzDsD,QAAQC,IAAI,sBAAsB,EAElCD,QAAQC,IAAIK,SAAS,EAErBhB,IAAIsC,EAAa,OAEjB,GAAuB,GAAlBvC,EAAOwC,QAAkB,CAC7B7B,QAAQC,IAAIZ,CAAM,EAClB,IAWQmB,EAXJE,EAAmB,uKAQtBoB,EAAW,GAGZ,IAAQtB,KADRnB,EAAOwB,WAAaC,KAAKC,MAAM1B,EAAOwB,UAAU,EAC5BxB,EAAOwB,WAC1BiB,EAAWA,EAASC,OAAOnC,OAAOC,KAAKR,EAAOwB,WAAWL,EAAS,CAAC,EAKpElB,IACQ4B,EAHRY,EAAW,CAAC,GAAG,IAAIN,IAAIM,CAAQ,GAAGb,KAAK,EAEnCe,EAAkB,IAAIC,IAAIrC,OAAOsC,QAAQ7C,EAAOwB,WAAWsB,QAAQ,CAAC,EACxE,IAAQjB,KAAWY,EAAS,CAE3BxC,IAAIC,EAAM,CAACuC,EAASZ,GAIpB,IAAI5B,IAAImC,EAAWlC,EAHF,EAGuBkC,GAHvB,EAGmClC,EAAqBkC,CAAQ,GAChF,GAAqC,KAAA,IAA1BpC,EAAOI,KAAKgC,GAA2B,CACjDnC,IAAI8C,EAAiB7C,IAAQkC,EAC7BnC,IAAI+C,EACAC,EAEHD,EADGD,EAzBa,6MA4BE1B,EAGlB4B,EADGF,GAAiB,CAAC/C,EAAOI,KAAKgC,GAAUc,SAAS,QAAQ,EAC5CF,EAAgB3C,OAAO+B,EAAUO,EAAgBQ,IAAIV,EAASZ,EAAQ,CAAC,EAEvEmB,EAAgB3C,OAAO+B,EAAUpC,EAAOI,KAAKgC,EAAS,EAEvEzG,OAAO,cAAc,EAAEc,OAAOwG,CAAa,CAC5C,CAIDtH,OAAO,cAAc,EAAEc,OAAO4E,EAAiBhB,OAAO,GAAI,EAAE,CAAC,EAG7D1E,OAAO,kBAAkB,EAAE0G,KAAK,EAAEC,OAAO,CAC1C,CACD,MAEC3G,OAAO,cAAc,EAAEc,OADF,uDACwB4D,OAAOL,EAAOoD,OAAO,CAAC,EACnEb,EAAa,KAAOtG,SAASiC,SAASC,OAAO,CAAE,EAGhD8B,IAAIK,EAAqD,GAApC3E,OAAO,kBAAkB,EAAEG,OAAc,GAAK,GAAyC,GAApCH,OAAO,kBAAkB,EAAEG,OAClG2E,EAAkBxE,SAAS2D,gBAA4B,aAAI,IAAM,GAEjEF,EAAiBY,EAAiBG,EAAiB,YAAc,SAElE9E,OAAO,cAAc,EAAE6C,OAAO,CAC7BC,MAAM,CAAA,EACNC,MAAOsB,EAAOU,UACd9D,SAAU,CAAE+B,GAAI,aAAcC,GAAI,mBAAqBC,GAAIZ,MAAO,EAClEa,MAASnD,OAAO,SAAS,EAAEmD,MAAM,EAAI,IAAM,GAC3CC,KAAM,CAAEC,OAAQ,QAASC,SAAU,GAAI,EACvCC,UAAW,CAAA,EACXC,UAAW,CAAA,EACXC,UAAW,IACXC,QAAS,CAACC,YAAa,YAAY,EACnCzB,KAAM,SAAS0B,EAAOC,GACrBD,EAAM3D,OAAO6D,MAAMC,SAAWA,EAC9B/D,OAAO,cAAc,EAAEgE,OAfP,MAeoB,EACpChE,OAAO,oBAAoB,EAAEmB,GAAG,QAAS,WACxCnB,OAAO,cAAc,EAAE6C,OAAO,OAAO,CACtC,CAAC,CACF,EACAqB,YAAa,SAASN,EAAOC,GAC5BvD,SAAS6D,KAAKL,MAAMC,SAAW,OAC/B/D,OAAO,cAAc,EAAEa,MAAM,CAC9B,EACA6G,MAAOd,CACR,CAAC,CACF,CAEA,SAASe,uCAAuChH,GAC/C,IAAIW,EAAOtB,OAAOW,CAAG,EACjBY,EAAO,CACVC,OAAQ,4BACRC,QAASH,EAAKF,QAAQ,cAAc,EAAEX,KAAK,KAAK,CACjD,EACIiB,EAAS,CACZC,QAASL,EAAKpB,OAAO,EAAE0B,SAAS,sBAAsB,EACtDC,SAAU+F,uCACV7F,YAAa,SAASC,GAAMC,UAAUC,KAAK,EAAEC,SAAUH,CAAI,CAAG,CAC/D,EACAI,qBAAqBb,EAAMG,CAAM,CAClC,CAEA,SAASkG,uCAAuCvD,EAAQ9C,EAAMG,GAE7DsD,QAAQC,IAAI,eAAe,EAE3BX,IAAIoB,EAAe,yLAGnB1F,OAAO,cAAc,EAAEc,OAAO4E,EAAahB,OAAO,2DAA4D,OAAQ,0DAA0D,CAAC,EAEjL,IAAI,IAAIH,EAAI,EAA0D,KAAA,IAApBF,EAAOI,KAAKF,IAA2D,KAAA,IAA7BF,EAAOwD,cAActD,GAAqBA,CAAG,GAMxI,GAJ8B,KAAA,IAApBF,EAAOI,KAAKF,KAA8BF,EAAOI,KAAKF,GAAO,IAChC,KAAA,IAA7BF,EAAOwD,cAActD,KAAqBF,EAAOwD,cAActD,GAAO,IAG3C,CAAC,GAAnCF,EAAOyD,WAAWC,QAAQxD,CAAG,EAAQ,CACvC,IAAID,IAAuBmC,EAAWlC,EAAd,EAAmCkC,GAAYlC,EAA/C,EAAoEkC,CAAQ,GAC9D,KAAA,IAA1BpC,EAAOI,KAAKgC,IAAkE,KAAA,IAA9BpC,EAAOwD,cAActD,IAC/EvE,OAAO,cAAc,EAAEc,QACrByD,IAAQkC,EAdS,kOAcqBf,GAAchB,OACpDL,EAAOI,KAAKgC,IAAoC,GAChDA,EACApC,EAAOwD,cAAcpB,IAA6C,EACnE,CACD,EAGFzG,OAAO,cAAc,EAAEc,OAAO4E,EAAiBhB,OAAO,GAAI,GAAI,EAAE,CAAC,CAClE,CAGD,IAAIC,EAAqD,GAApC3E,OAAO,kBAAkB,EAAEG,OAAc,GAC7D2E,EAAkBxE,SAAS2D,gBAA4B,aAAI,IAAM,GACjEF,EAAWY,EAAiBG,EAAiB,YAAc,SAC3Dd,EAAsB,UAAbD,EAAwBe,EAAiBH,EAEnD3E,OAAO,cAAc,EAAE6C,OAAO,CAC7BC,MAAM,CAAA,EACNC,MAAOsB,EAAOU,UACd9D,SAAU,CAAE+B,GAAI,aAAcC,GAAI,mBAAqBC,GAAIZ,MAAO,EAClEa,MAASnD,OAAO,SAAS,EAAEmD,MAAM,EAAI,IAAM,GAC3Ca,OAAQA,EACRZ,KAAM,CAAEC,OAAQ,QAASC,SAAU,GAAI,EACvCC,UAAW,CAAA,EACXC,UAAW,CAAA,EACXC,UAAW,IACXC,QAAS,CAACC,YAAa,YAAY,EACnCzB,KAAM,SAAS0B,EAAOC,GACrBvD,SAAS6D,KAAKL,MAAMC,SAAW,SAC/BH,EAAM3D,OAAO6D,MAAMC,SAAWA,EAC9B/D,OAAO,cAAc,EAAEgE,OAAOA,CAAM,CACrC,EACAE,YAAa,SAASN,EAAOC,GAC5BvD,SAAS6D,KAAKL,MAAMC,SAAW,OAC/B/D,OAAO,cAAc,EAAEa,MAAM,CAC9B,CACD,CAAC,CACF,CAEA,SAASmH,iCACRhI,OAAO,6BAA6B,EAAEiI,KAAKC,WAAWC,uBAAuB,EAS7E/F,qBARa,CACZZ,OAAQ,8BACT,EACe,CACdK,SAAU,IACTvB,SAAS8H,eAAe,8BAA8B,EAAEC,UAAYhE,EAAO9C,IAC5E,CACD,CACiC,CAClC,CAMA,SAAS+G,mDAAmD3H,GAE3D,IAAMW,EAAOtB,OAAOW,CAAG,EACjB4H,EAASjH,EAAKF,QAAQ,cAAc,EAAEX,KAAK,KAAK,EACtD,MAAM+H,EAAYlH,EAAKmH,QAAQ,cAAc,EAAElC,KAAK,QAAQ,EAAE0B,KAAK,EAG7DS,EAAU1I,OAAO,8CAA8C,EAC/C0I,EAAQA,QAAQ,EACxBxG,KAAK,EAGfX,EAAO,CACVC,OAAQ,sCACRC,QAAS8G,EACTI,SAAUC,aAAaC,UACxB,EAEA7I,OAAO8I,KAAK,CACXC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKL,aAAaM,QAClB3H,KAAMA,EACNsF,QAAS,SAASxC,GACbA,EAAOwC,UACV6B,EAAQnC,KAAK,2BAA2B,EAAEI,OAAO,EACjD+B,EAAQnC,KAAK,6BAA6B,EAAE0B,KAAKO,CAAS,EAC1DW,iBAAiB9E,EAAO9C,KAAMmH,CAAO,EACrCU,oBAAoB/E,EAAO9C,KAAK,GAAG8H,GAAIX,CAAO,EAIhD,CACD,CAAC,CACF,CAOA,SAASS,iBAAiB5H,EAAMmH,GAE/BpE,IAAIgF,EAAO,GAEX,IAAKhF,IAAIiF,KAAQhI,EAChB+H,4BAAiCC,EAAKF,OAAOE,EAAKC,kBAG/CC;cAESH;eAGbZ,EAAQnC,KAAK,wBAAwB,EAAEzF,OAAO2I,CAAI,CACnD,CAEA,SAASL,oBAAoBM,EAAahB,GAGzCpE,IAAI/C,EAAO,CACVC,OAAQ,6CACRkI,YAAAA,EACAf,SAAUC,aAAaC,UACxB,EAEA7I,OAAO8I,KAAK,CACXC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKL,aAAaM,QAClB3H,KAAMA,EACNoI,WAAY,WACX3J,OAAO,uCAAuC,EAAEoD,KAAK,CACtD,EACAyD,QAAS,SAASxC,GACbA,EAAOwC,UACV6B,EAAQnC,KAAK,8BAA8B,EAAEI,OAAO,EACpD+B,EAAQnC,KAAK,mBAAmB,EAAEqD,YAAY,QAAQ,EACtDlB,EAAQnC,KAAK,qBAAuBmD,EAAc,GAAG,EAAEG,SAAS,QAAQ,EAEpEJ;;;kCAI0BpF,EAAO9C,KAAKkG;;;4BAK1CzH,OAAO,uCAAuC,EAAEK,KAAK,EACrDqI,EAAQnC,KAAK,wBAAwB,EAAEzF,OAAO2I,CAAI,EAClDnJ,SAASwJ,iBAAiB,UAAU,EAAEC,QAAQ,IAC7CC,KAAKC,iBAAiBC,CAAE,CACzB,CAAC,EAIH,CACD,CAAC,CACF,CAMA,SAASC,2CAA2CxJ,GAK/CY,EAAO,CACVC,OAAQ,6BACR4I,eALYpK,OAAOW,CAAG,EACGS,QAAQ,cAAc,EAAEX,KAAK,KAAK,EAK3DkI,SAAUC,aAAaC,UACxB,EAEA7I,OAAO8I,KAAK,CACXC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKL,aAAaM,QAClB3H,KAAMA,EACNsF,QAAS,SAASxC,GACbA,EAAOwC,SACV5E,UAAUC,KAAK,EAAEmI,IAAIhG,EAAO9C,IAAI,EAChCjB,SAASgK,iBAAiB,kBAAmB,SAAUvK,GACtDO,SAASiC,SAASC,OAAO,CAC1B,CAAC,GAEDP,UAAUC,KAAK,EAAEC,SAASkC,EAAO9C,IAAI,CAEvC,CACD,CAAC,CACF,CAMA,SAASgJ,qDAAqD5J,GAKzDY,EAAO,CACVC,OAAQ,4CACR4I,eALYpK,OAAOW,CAAG,EACGS,QAAQ,cAAc,EAAEX,KAAK,KAAK,EAK3DkI,SAAUC,aAAaC,UACxB,EAEA7I,OAAO8I,KAAK,CACXC,KAAM,OACNC,MAAO,CAAA,EACPC,IAAKL,aAAaM,QAClB3H,KAAMA,EACNsF,QAAS,SAASxC,GACbA,EAAOwC,SACV5E,UAAUC,KAAK,EAAEmI,IAAIhG,EAAO9C,IAAI,EAChCjB,SAASgK,iBAAiB,kBAAmB,SAAUvK,GACtDO,SAASiC,SAASC,OAAO,CAC1B,CAAC,GAEDP,UAAUC,KAAK,EAAEC,SAASkC,EAAO9C,IAAI,CAEvC,CACD,CAAC,CACF,CAKA,SAASiJ,yCAEFC,QAAQ,2CAA2C,IAGzDzF,QAAQC,IAAI,OAAO,EAEnB7C,qBACC,CAAEZ,OAAQ,oBAAsB,EAChC,CACCuH,KAAM,MACN2B,gBAAiB,WAAYpK,SAASiC,SAAWjC,SAASiC,QAAS,EACnEoI,SAAU,KACV5I,YAAa,KACb6I,QAASC,KACTC,QAAS,IACTjE,QAAS,WACRvG,SAASiC,SAASC,OAAO,CAC1B,CACD,CACD,EACD,CAEAxC,OAAOM,QAAQ,EAAEyK,MAAM,WAGtBC,+BAA+B,EAC/BC,8BAA8B,EAC9BC,6BAA6B,EAC7BC,uBAAuB,EAEvBC,kBAAkB,EAGlBpL,OAAO,2BAA2B,EAAEqL,YAAY,CAC/CC,MAAO,EACPC,OAAQ,SAAU3H,EAAOC,GACxBD,EAAM3D,OAAO6D,MAAM7C,SAAW,WAC9B2C,EAAM3D,OAAO6D,MAAM0H,aAAe,MACnC,EACAC,OAAQ,SAAS7H,EAAOC,GACvB7D,OAAO,gCAAgC,EAAEiI,KAAKjI,OAAO4D,EAAM3D,MAAM,EAAEoL,YAAY,SAAU,OAAO,EAAI,IAAI,CACzG,CACD,CAAC,EAGDrL,OAAO,sBAAsB,EAAE0L,UAAU,CACxCpF,OAAQ,KACRqF,YAAa,UACbC,YAAa,CAAA,EACbC,OAAQ,CAAA,EACRC,SAAU,SAAUlI,EAAOC,GACC,IAAvBA,EAAGkI,SAAS5L,QAAwC,IAAxB0D,EAAGmI,UAAU7L,QAC5CH,OAAO,sBAAsB,EAAE0L,UAAU,SAAU,+BAAgC,yCAAyC,CAC9H,EACAO,eAAgB,SAAUrI,EAAOC,GACL,IAAvBA,EAAGkI,SAAS5L,QAAwC,IAAxB0D,EAAGmI,UAAU7L,QAC5CH,OAAO,sBAAsB,EAAE0L,UAAU,SAAU,+BAAgC,kBAAkB,CACvG,CACD,CAAC,EAGDpJ,OAAO4J,aAAe,IAAIC,mBAAmB,CAC5CC,SAAUlE,WAAWkE,SACrBC,OAAQnE,WAAWmE,OACnBC,OAAQtM,OAAO,oBAAoB,EACnC2B,QAAS3B,OAAO,oBAAoB,EAAEuM,KAAK,EAC3C1K,SAAU,KACV2K,iBAAkBxM,OAAO,+BAA+B,EACxDqL,YAAarL,OAAO,2BAA2B,EAC/CyM,iBAAkBzM,OAAO,gCAAgC,EACzD0M,QAASpM,SAASqM,uBAAuB,0BAA0B,EACnEC,SAAU,CACTC,UAAW7M,OAAO,+BAA+B,EACjD8M,SAAW9M,OAAO,8BAA8B,CACjD,CACD,CAAC,EAEDA,OAAOM,QAAQ,EAAEa,GAAG,QAAS,+BAAgC,WAC5DvB,sBAAuBI,OAAQ6K,IAAK,CAAE,CACvC,CAAC,EAED7K,OAAO,oBAAoB,EAAEmB,GAAG,QAAS,WACxCnB,OAAO,8BAA8B,EAAE2G,OAAO,EAC9CuF,aAAaa,cAAc,EAEtB/M,OAAO,+BAA+B,EAAEG,QAC5CH,OAAO,mBAAmB,EAAEc,OAAO,gCAAgC,EAGpEd,OAAO,mBAAmB,EAAEwD,UAAU,CACrCwJ,QAAS,OACTC,YAAa,UACd,CAAC,CACF,CAAC,EAEDjN,OAAO,8BAA8B,EAAEwD,UAAU,CAChDwJ,QAAS,OACTC,YAAa,UACd,CAAC,EAGDjN,OAAO,qBAAqB,EAAEmB,GAAG,QAAS,WAEnCsJ,QAAQ,2CAA2C,IAGzDzF,QAAQC,IAAI,OAAO,EAEnB7C,qBACC,CAAEZ,OAAQ,oBAAsB,EAChC,CACCuH,KAAM,MACN2B,gBAAiB,WAAYpK,SAASiC,SAAWjC,SAASiC,QAAS,EACnEoI,SAAU,KACV5I,YAAa,KACb6I,QAASC,KACTC,QAAS,IACTjE,QAAS,WACRvG,SAASiC,SAASC,OAAO,CAC1B,CACD,CACD,EACD,CAAC,EAEDxC,OAAO,2BAA2B,EAAEmB,GAAG,QAAS,WAC/CnB,OAAO8I,KAAK,CACXG,IAAKL,aAAaM,QAClBH,KAAM,OACNxH,KAAM,CACLC,OAAQ,2BACRmH,SAAUC,aAAaC,WACvBqE,SAAUC,KAAKC,OAAO,CACvB,EACAC,UAAW,CACVC,aAAc,MACf,EACAzG,QAAS,SAAStF,GACjBvB,OAAO8I,KAAK,CACVG,IAAKL,aAAaM,QAClBH,KAAM,OACNxH,KAAM,CACLC,OAAQ,iCACRmH,SAAUC,aAAaC,WACvBqE,SAAUC,KAAKC,OAAO,CACvB,EACAC,UAAW,CACVC,aAAc,MACf,EACAzG,QAAS,SAAS0G,GACjBjJ,IAAIkJ,EAAK,IAAIC,KAAK,CAAClM,EAAK,EACpBmM,EAAKpN,SAASqN,cAAc,GAAG,EACnCD,EAAKE,KAAKtL,OAAOuL,IAAIC,gBAAgBN,CAAI,EACzCE,EAAKK,SAASR,EAAShM,KACvBmM,EAAKM,MAAM,CACZ,CACD,CACD,CACD,CACD,CAAC,CACF,CAAC,EAGDhO,OAAOM,QAAQ,EAAEa,GAAG,QAAS,4CAA6C,WACzE,IAAM8M,EAAoBjO,OAAO6K,IAAI,EAAEtJ,KAAK,aAAa,EAGrD0M,IAFqBjO,OAAO,kDAAkD,EAAEuB,KAAK,aAAa,GAOtG6H,oBAAoB6E,EADJjO,OAAO,8CAA8C,CACvB,CAC/C,CAAC,CACF,CAAC"} \ No newline at end of file diff --git a/js/src/spbc-settings_tab--scanner.js b/js/src/spbc-settings_tab--scanner.js index 4dac0a215..d106d9f51 100644 --- a/js/src/spbc-settings_tab--scanner.js +++ b/js/src/spbc-settings_tab--scanner.js @@ -157,9 +157,9 @@ function spbc_scannerButtonView_callback(result){ open: function(event, ui) { event.target.style.overflow = overflow; jQuery('#spbc_dialog').height(height); - jQuery('.ui-widget-overlay').on('click', function() { - jQuery("#spbc_dialog").dialog('close'); - }); + jQuery('.ui-widget-overlay').on('click', function() { + jQuery("#spbc_dialog").dialog('close'); + }); }, beforeClose: function(event, ui) { document.body.style.overflow = 'auto'; @@ -207,29 +207,51 @@ function spbc_scannerButtonViewBadFile_callback(result, data, params){ var row_template = '
          %s

          %s


          ', row_template_bad = '
          %s

          %s


          ', - str_nums = []; + severity_parts = [], + severity_parts_sorted = [], + severity_keys_sorted = []; - result.weak_spots = JSON.parse(result.weak_spots); + result.weak_spots = JSON.parse(result.weak_spots) for(let severity in result.weak_spots){ - str_nums = str_nums.concat(Object.keys(result.weak_spots[severity])); + severity_parts[severity] = Object.keys(result.weak_spots[severity]) } - str_nums = [...new Set(str_nums)].sort(); // Sort bad line - for(let str_num in str_nums){ + severity_keys_sorted = Object.keys(severity_parts).sort(); - let row = +str_nums[str_num], - display_depth = 2; + for(key in severity_keys_sorted){ + severity_parts_sorted[severity_keys_sorted[key]] = severity_parts[severity_keys_sorted[key]] + } - // Display only existing lines of file - for(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){ - if( typeof result.file[curr_row] !== 'undefined' ){ - jQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row])); - } - } + for (let severity_part in severity_parts_sorted) { + let header_name = 'spbc-dialog-row-header-' + severity_part.toLowerCase(); + let header_html = '' + severity_part + ' weakspots:'; + const dialog = jQuery('#spbc_dialog'); + + dialog.append(row_template.printf('',header_html)); + dialog.append(row_template. printf('...','...')); + + let header = dialog.find('#' + header_name); + header.parent().parent().css('text-align', 'center'); + header.parent().parent().css('border', '1px dotted'); + header.parent().parent().css('background', 'darkgrey'); + + for(let str_num in severity_parts[severity_part]){ + // Sort bad line + str_num = [...new Set(str_num)].sort() + + let row = +severity_parts[severity_part][str_num], + display_depth = 2; - // Placing an empty string between results - jQuery('#spbc_dialog').append(row_template. printf('', '')); + // Display only existing lines of file + for(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){ + if( typeof result.file[curr_row] !== 'undefined' ){ + dialog.append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row])); + } + } + // Placing an empty string between results + dialog.append(row_template. printf('...','...')); + } } // Removing last empty string @@ -253,9 +275,9 @@ function spbc_scannerButtonViewBadFile_callback(result, data, params){ open: function(event, ui) { event.target.style.overflow = overflow; jQuery('#spbc_dialog').height(height); - jQuery('.ui-widget-overlay').on('click', function() { - jQuery("#spbc_dialog").dialog('close'); - }); + jQuery('.ui-widget-overlay').on('click', function() { + jQuery("#spbc_dialog").dialog('close'); + }); }, beforeClose: function(event, ui) { document.body.style.overflow = 'auto'; @@ -347,9 +369,9 @@ function spbc_scannerButtonViewBad_callback(result, data, params){ open: function(event, ui) { event.target.style.overflow = overflow; jQuery('#spbc_dialog').height(height); - jQuery('.ui-widget-overlay').on('click', function() { - jQuery("#spbc_dialog").dialog('close'); - }); + jQuery('.ui-widget-overlay').on('click', function() { + jQuery("#spbc_dialog").dialog('close'); + }); }, beforeClose: function(event, ui) { document.body.style.overflow = 'auto'; @@ -793,4 +815,4 @@ jQuery(document).ready(function(){ const remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]'); drawCurrentSnapshot(currentSnapshotId, remodal) }); -}); \ No newline at end of file +}); From 6187ffe5b425788afa51de4f3b7c38618249205e Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 23 Aug 2023 11:49:30 +0500 Subject: [PATCH 068/109] New. Heuristics. Detect super variables in the system commands. --- .../HeuristicAnalyser/HeuristicAnalyser.php | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php index ee2dfb63e..cfbc1cfcd 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php @@ -105,6 +105,15 @@ class HeuristicAnalyser ), ); + private $super_globals = array( + '$_GET', + '$_POST', + '$_COOKIE', + '$_FILES', + '$_SERVER', + '$GLOBALS', + ); + /** * Contains a set of dangerous values that have been decoded * @var string[] @@ -417,6 +426,13 @@ public function makeVerdict() $set_of_functions, true ); + + // If common bad structures found, then check containment for superglobals + if ($found_malware_key !== false && $this->checkingSuperGlobalsInTheSystemCommands($this->tokens->current)) { + $this->verdict['CRITICAL'][$this->tokens->current->line][] = 'Super variables in the system command found'; + break; + } + $this->verdict[$severity][$this->tokens->current->line][] = $set_of_functions[$found_malware_key]; } } @@ -586,6 +602,19 @@ private function checkingDecryptedToken(DataStructures\Token $token) return false; } + private function checkingSuperGlobalsInTheSystemCommands(DataStructures\Token $token) + { + $next_semicolon = $this->tokens->searchForward($token->key, ';'); + $depth = $next_semicolon ? $next_semicolon - $token->key : 0; + foreach ($this->super_globals as $super_global) { + $forward_look_super_globals = $this->tokens->searchForward($token->key, $super_global, $depth); + if (false !== $forward_look_super_globals) { + return true; + } + } + return false; + } + private function getResultCode() { $output = ''; From 07478a1fd818dae4c24413a6ac8f32c7a1a21161 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Wed, 23 Aug 2023 09:54:19 +0300 Subject: [PATCH 069/109] Fix. Tests. BFP test cases fixed. --- lib/CleantalkSP/SpbctWP/Firewall/BFP.php | 4 ++-- tests/Standalone/TestBFP.php | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php index 1fc8a7a9a..b8b2bcfb7 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php @@ -15,8 +15,8 @@ class BFP extends FirewallModule protected $block_period = 3600; // Default block period for $bf_limit wrong attempts protected $count_period = 900; // Counting login attempts in this interval - protected $chance_to_clean = 100; // Chance to clean log table from old entries. In percents. - protected static $is_checked = false; + public $chance_to_clean = 100; // Chance to clean log table from old entries. In percents. + public static $is_checked = false; /** * @psalm-suppress PossiblyUnusedProperty diff --git a/tests/Standalone/TestBFP.php b/tests/Standalone/TestBFP.php index 16ca1204a..064cad7ff 100644 --- a/tests/Standalone/TestBFP.php +++ b/tests/Standalone/TestBFP.php @@ -27,11 +27,13 @@ protected function setUp() 'count_period' => $spbc->settings['bfp__count_interval'], // Counting login attempts in this interval ) ); + $this->bfp->chance_to_clean = 0; } public function testIpv4Block() { $ip = '127.0.0.1'; + $this->bfp->setIpArray(array($ip)); $this->db->execute(' TRUNCATE TABLE ' . SPBC_TBL_BFP_BLOCKED); @@ -41,8 +43,8 @@ public function testIpv4Block() $this->bfp->setDb($this->db); for ($i = 0; $i<=5; $i++){ - $this->bfp->setIpArray(array($ip)); $this->bfp->updateLogs(); + $this->bfp::$is_checked = false; } $bfp_result = $this->bfp->check(); @@ -53,6 +55,7 @@ public function testIpv4Block() public function testIpv6Block() { $ip = 'fddc:0002:aa98:00dd:0000:0000:0000:ffee'; + $this->bfp->setIpArray(array($ip)); $this->db->execute(' TRUNCATE TABLE ' . SPBC_TBL_BFP_BLOCKED); @@ -62,11 +65,12 @@ public function testIpv6Block() $this->bfp->setDb($this->db); for ($i = 0; $i<=5; $i++){ - $this->bfp->setIpArray(array($ip)); $this->bfp->updateLogs(); + $this->bfp::$is_checked = false; } $bfp_result = $this->bfp->check(); + $this->assertEquals($bfp_result[0]->ip, $ip); $this->assertEquals($bfp_result[0]->status, 'DENY_BY_BFP'); } From 38c26a5563279ddeaa699579042ee8c55bfc3a92 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Wed, 23 Aug 2023 10:00:31 +0300 Subject: [PATCH 070/109] Fix. Code. Psalm notices fixed. --- lib/CleantalkSP/SpbctWP/Firewall/BFP.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php index b8b2bcfb7..d3cbbe107 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php @@ -79,7 +79,7 @@ public function check() * @return void * @psalm-suppress PossiblyUnusedMethod */ - public function middleAction($result = null) + public function middleAction() { add_action('spbc_log_wrong_auth', array($this, 'updateLogs')); } From 053587ceeb82e206c9baadbba1bee49b7e9066ff Mon Sep 17 00:00:00 2001 From: Glomberg Date: Wed, 23 Aug 2023 11:03:03 +0300 Subject: [PATCH 071/109] Fix. Code. Dummy commit. --- security-malware-firewall.php | 1 + 1 file changed, 1 insertion(+) diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 106777a1b..3e790069d 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -493,6 +493,7 @@ function spbc_firewall__check() if ( class_exists('Poppyz_Core') ) { //fix poppyz plugin early start conflict $GLOBALS['wp_rewrite'] = new WP_Rewrite(); // Fix for early load WP_Rewrite } + $login_url = wp_login_url(); if ( $spbc->settings['login_page_rename__enabled'] ) { //todo This rewrite could break permalinks, need to implement new logic From 8259dcc8aaee22ae0a9c72f9a247b24fcd698c60 Mon Sep 17 00:00:00 2001 From: svfcode Date: Thu, 24 Aug 2023 09:17:08 +0300 Subject: [PATCH 072/109] Add. Settings. Add ability to change admin email. --- css/spbc-settings.min.css | 2 +- css/src/spbc-settings.css | 14 +++ inc/spbc-admin.php | 1 + inc/spbc-settings.php | 154 +++++++++++++++++++++++++++--- js/spbc-settings.min.js | 2 +- js/spbc-settings.min.js.map | 2 +- js/src/spbc-settings.js | 69 ++++++++++++- lib/CleantalkSP/SpbctWP/State.php | 1 + security-malware-firewall.php | 2 +- 9 files changed, 229 insertions(+), 18 deletions(-) diff --git a/css/spbc-settings.min.css b/css/spbc-settings.min.css index 03ba3333b..afbb6c611 100644 --- a/css/spbc-settings.min.css +++ b/css/spbc-settings.min.css @@ -1 +1 @@ -.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4{margin:10px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText{display:none;position:absolute;top:0;background:rgba(150,150,150,.9);color:#fff;padding:7px;border:1px solid #333;border-radius:5px;z-index:20}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_rate_block_stars{margin:1em 0}.star-icon{color:#ddd;font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_auto_link,.spbc_manual_link{text-decoration:none;font-size:13px;line-height:26px;height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;margin:0;display:inline-block;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_manual_link:hover{color:#000}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file +.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4{margin:10px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_auto_link,.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText{display:none;position:absolute;top:0;background:rgba(150,150,150,.9);color:#fff;padding:7px;border:1px solid #333;border-radius:5px;z-index:20}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_auto_link,.spbc_manual_link{height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;display:inline-block;cursor:pointer}.spbc_rate_block_stars{margin:1em 0}.star-icon{color:#ddd;font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;text-decoration:none;font-size:13px;line-height:26px;margin:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none;font-size:13px;line-height:26px;margin:0;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_manual_link:hover{color:#000}.spbc-btn-as-link{padding:0;margin:0;vertical-align:baseline;color:gray;border:0;border-bottom:1px solid;cursor:pointer}#spbc-account-email[contenteditable=true]{padding:6px;background-color:#fff;border:1px solid #ccc}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file diff --git a/css/src/spbc-settings.css b/css/src/spbc-settings.css index c8ca6f516..7bd6895f4 100644 --- a/css/src/spbc-settings.css +++ b/css/src/spbc-settings.css @@ -454,6 +454,20 @@ div.pagination{ { color:black; } +.spbc-btn-as-link { + padding: 0; + margin: 0; + vertical-align: baseline; + color: gray; + border: 0 none; + border-bottom: 1px solid; + cursor: pointer; +} +#spbc-account-email[contenteditable="true"] { + padding: 6px; + background-color: #fff; + border: 1px solid #ccc; +} .spbc_dismiss{ width: 20px; height: 20px; border-radius: 5px; diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 3d7da390c..5093c083e 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -113,6 +113,7 @@ function spbc_admin_init() add_action('wp_ajax_spbc_settings__check_renew_banner', 'spbc_settings__check_renew_banner'); add_action('wp_ajax_spbc_sync', 'spbc_sync'); add_action('wp_ajax_spbc_get_key_auto', 'spbc_get_key_auto'); + add_action('wp_ajax_spbc_update_account_email', 'spbc_settings__update_account_email'); // Confirm the email to activate 2FA add_action('wp_ajax_spbc_generate_confirmation_code', 'spbctGenerateAndSendConfirmationCode'); diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index f00e522b4..308a92515 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -387,7 +387,7 @@ function spbc_settings__register() 'title_first' => true, 'title' => __('Send the notification with the new login page URL to the admin email address', 'security-malware-firewall'), 'description' => __('The email will be send to', 'security-malware-firewall') - . ' (' . get_option('admin_email') . ')', + . ' (' . spbc_get_admin_email() . ')', 'long_description' => true, 'parent' => 'login_page_rename__enabled', 'disabled' => !current_user_can('activate_plugins') @@ -1297,7 +1297,7 @@ function spbc_settings_page() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } // Outputs errors if exists @@ -1673,7 +1673,7 @@ function spbc_field_key() } else { echo ''; echo '

          '; - echo ' + echo ' '; echo ' ' . __('or', 'security-malware-firewall') . ' '; @@ -1683,12 +1683,20 @@ function spbc_field_key() . '' . ''; echo '

          '; - echo '
          ' - . sprintf( - __('Admin e-mail (%s) will be used for registration', 'security-malware-firewall'), - get_option('admin_email') - ) - . '
          '; + + // admin email + printf( + __( + 'Admin e-mail %s %s will be used for registration.', + 'security-malware-firewall' + ), + '' +// $spbc->data['account_email'] ? $spbc->data['account_email'] : + . spbc_get_admin_email() + . '', + spbc_settings__btn_change_account_email_html() + ); + echo '
          '; echo ''; echo '
          '; } +/** + * Current site admin e-mail + * + * @return string Admin e-mail + */ +function spbc_get_admin_email() +{ + global $spbc; + + if ( ! is_multisite() ) { + // Not WPMS + $admin_email = get_option('admin_email'); + } elseif ( is_main_site() || $spbc->network_settings['multisite__work_mode'] != 3) { + // WPMS - Main site, common account + $admin_email = get_site_option('admin_email'); + } else { + // WPMS - Individual account, individual Access key + $admin_email = get_blog_option(get_current_blog_id(), 'admin_email'); + } + + if ( $spbc->data['account_email'] ) { + add_filter('spbc_get_api_key_email', function () { + global $spbc; + return $spbc->data['account_email']; + }); + } + + return $admin_email; +} + +/** + * Show button for changed account email + */ +function spbc_settings__btn_change_account_email_html() +{ + global $spbc; + + if ( + ! is_main_site() && + isset($spbc->network_settings['multisite__work_mode']) && + $spbc->network_settings['multisite__work_mode'] == 1) { + return ''; + } + + return '()'; +} + function spbc_field_service_utilization() { global $spbc; @@ -1747,7 +1812,7 @@ function spbc_settings_2fa_description_callback() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } echo '
          ' @@ -3798,7 +3863,7 @@ function spbc_sanitize_settings($settings) ($settings['login_page_rename__send_email_notification'] && current_user_can('activate_plugins')) ) { $mail = wp_mail( - get_option('admin_email'), + spbc_get_admin_email(), $spbc->data["wl_brandname"] . esc_html__(': New login URL', 'security-malware-firewall'), sprintf( esc_html__('New login URL is: %s', 'security-malware-firewall'), @@ -3951,7 +4016,7 @@ function spbc_get_key_auto($direct_call = false) $wpms = SPBC_WPMS && defined('SUBDOMAIN_INSTALL') && ! SUBDOMAIN_INSTALL; $white_label = false; $hoster_api_key = $spbc->ms__hoster_api_key; - $admin_email = get_option('admin_email'); + $admin_email = spbc_get_admin_email(); /** * Filters the email to get API key @@ -4017,6 +4082,69 @@ function spbc_get_key_auto($direct_call = false) die(json_encode($out)); } +function spbc_settings__update_account_email($direct_call = false) +{ + if ( ! $direct_call) { + spbc_check_ajax_referer('spbc_secret_nonce', 'security'); + } + + global $spbc; + + $account_email = Post::get('accountEmail'); + + // not valid email + if (!$account_email || !filter_var(Post::get('accountEmail'), FILTER_VALIDATE_EMAIL)) { + die( + json_encode( + array( + 'error' => 'Please, enter valid email.' + ) + ) + ); + } + + // protection against accidental request from a child site in the shared account mode + if (!is_main_site() && isset($spbc->network_settings['multisite__work_mode']) && $spbc->network_settings['multisite__work_mode'] != 3) { + die( + json_encode( + array( + 'error' => 'Please, enter valid email.' + ) + ) + ); + } + + // email not changed + if (isset($spbc->data['account_email']) && $account_email === $spbc->data['account_email']) { + die( + json_encode( + array( + 'success' => 'ok' + ) + ) + ); + } + + $spbc->data['account_email'] = $account_email; + $spbc->save('data'); + + // Link GET ACCESS KEY MANUALLY + $manually_link = sprintf( + 'https://cleantalk.org/register?platform=wordpress&email=%s&website=%s', + urlencode(spbc_get_admin_email()), + urlencode(get_bloginfo('url')) + ); + + die( + json_encode( + array( + 'success' => 'ok', + 'manuallyLink' => $manually_link + ) + ) + ); +} + function spbc_show_more_security_logs_callback() { spbc_check_ajax_referer('spbc_secret_nonce', 'security'); @@ -4416,7 +4544,7 @@ function spbctGenerateAndSendConfirmationCode() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } spbc_check_ajax_referer('spbc_secret_nonce', 'security'); diff --git a/js/spbc-settings.min.js b/js/spbc-settings.min.js index 3912541c8..00b3c637b 100644 --- a/js/spbc-settings.min.js +++ b/js/spbc-settings.min.js @@ -1,2 +1,2 @@ -function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
          ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); +function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}function spbcToggleClass(t,s){for(let e=0;e
          ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)}),jQuery(document).on("click","#spbc-change-account-email",function(e){e.preventDefault();var e=jQuery(this),t=jQuery("#spbc-account-email"),s=t.text();spbcToggleClass(e,"active"),e.hasClass("active")?(e.text(e.data("save-text")),t.attr("contenteditable","true"),t.focus(),t.on("keydown",function(e){"Enter"===e.code&&e.preventDefault()}),t.on("input",function(e){"insertParagraph"===e.inputType&&e.preventDefault()})):(spbc_sendAJAXRequest({action:"spbc_update_account_email",accountEmail:s},{timeout:5e3,callback:function(e,t,s,c){void 0!==e.success&&"ok"===e.success&&void 0!==e.manuallyLink&&jQuery("#spbc-key-manually-link").attr("href",e.manuallyLink),void 0!==e.error&&jQuery("#spbc-account-email").css("border-color","red")},errorOutput:function(e){spbcModal.loaded=e,spbcModal.open()}}),t.attr("contenteditable","false"),e.text(e.data("default-text")))})}); //# sourceMappingURL=spbc-settings.min.js.map diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 3aff6c443..12a53ca5f 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
          ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_settings__show_recommendation","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","remove_recommendation_func","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","secfw_enabled","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
          ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n\n\t/**\n * Change cleantalk account email\n */\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\n e.preventDefault();\n\n let $this = jQuery(this);\n let accountEmailField = jQuery('#spbc-account-email');\n let accountEmail = accountEmailField.text();\n\n\t\tspbcToggleClass($this, 'active');\n\n if ($this.hasClass('active')) {\n $this.text($this.data('save-text'));\n accountEmailField.attr('contenteditable', 'true');\n\t\t\taccountEmailField.focus();\n accountEmailField.on('keydown', function(e) {\n if (e.code === 'Enter') {\n e.preventDefault();\n }\n });\n accountEmailField.on('input', function(e) {\n if (e.inputType === 'insertParagraph') {\n e.preventDefault();\n }\n });\n } else {\n spbc_sendAJAXRequest(\n {\n action: 'spbc_update_account_email',\n accountEmail: accountEmail,\n },\n {\n timeout: 5000,\n callback: function(result, data, params, obj) {\n if (result.success !== undefined && result.success === 'ok') {\n if (result.manuallyLink !== undefined) {\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\n }\n }\n\n if (result.error !== undefined) {\n\t\t\t\t\t\t\n jQuery('#spbc-account-email').css('border-color', 'red');\n }\n },\n\t\t\t\t\terrorOutput: function(msg) {\n\t\t\t\t\t\tspbcModal.loaded = msg;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t}\n },\n );\n\n accountEmailField.attr('contenteditable', 'false');\n $this.text($this.data('default-text'));\n }\n });\n});\n\n/**\n * @param {string} className\n */\nfunction spbcToggleClass(arr, className) {\n\tfor (let i=0; i false, 'notice_review' => false, 'service_id' => '', + 'account_email' => '', 'license_trial' => 0, 'account_name_ob' => '', 'salt' => '', diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 3a924f9f3..e635bb4dc 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2416,7 +2416,7 @@ function spbc_send_daily_report($skip_data_rotation = false) // Hours $report_interval = 24 * 7; - $admin_email = get_option('admin_email'); + $admin_email = spbc_get_admin_email(); if ( ! $admin_email ) { error_log( sprintf( From 96d3f7579fddd557b75763ce5ea0afc3aa356693 Mon Sep 17 00:00:00 2001 From: svfcode Date: Thu, 24 Aug 2023 09:24:37 +0300 Subject: [PATCH 073/109] fix phpcs --- inc/spbc-settings.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 308a92515..8a84ad216 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1691,7 +1691,6 @@ function spbc_field_key() 'security-malware-firewall' ), '' -// $spbc->data['account_email'] ? $spbc->data['account_email'] : . spbc_get_admin_email() . '', spbc_settings__btn_change_account_email_html() @@ -1721,7 +1720,6 @@ function spbc_field_key() /** * Current site admin e-mail - * * @return string Admin e-mail */ function spbc_get_admin_email() From 54f1dedaaea0ea1fa1a695f871aa22b2396fe167 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 23 Aug 2023 12:12:10 +0500 Subject: [PATCH 074/109] Fix. More superglobals. --- .../Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php index cfbc1cfcd..83c6ab9a9 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php @@ -112,6 +112,8 @@ class HeuristicAnalyser '$_FILES', '$_SERVER', '$GLOBALS', + '$_SESSION', + '$_REQUEST', ); /** From 9c578e861d67d630aa20f56e0d080ee1048b160d Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 23 Aug 2023 17:19:11 +0500 Subject: [PATCH 075/109] Fix. Some heuristic descriptions added. --- inc/spbc-settings.php | 22 +++++++++++++++---- .../HeuristicAnalyser/HeuristicAnalyser.php | 2 +- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index f00e522b4..77d55d05c 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -4271,6 +4271,10 @@ function spbc_settings__get_description() 'title' => 'Suspicious', 'desc' => __('The code looks suspicious. Make sure it is safe.', 'security-malware-firewall') ), + 'signatures_MALWARE' => array( + 'title' => 'Malware', + 'desc' => __('Malware has been found during the signature analysis.', 'security-malware-firewall') + ), 'heuristic_assert' => array( 'title' => 'assert()', 'desc' => __('Using the function in production is not recommended', 'security-malware-firewall') @@ -4319,6 +4323,14 @@ function spbc_settings__get_description() 'title' => 'syslog()', 'desc' => __('Generate a system log message', 'security-malware-firewall') ), + 'heuristic_global_variables_in_a_sys_command' => array( + 'title' => 'Super global in system command', + 'desc' => __('Found direct request to super global variables in the system commands functions.', 'security-malware-firewall') + ), + 'heuristic_base64_decode' => array( + 'title' => 'base64_decode()', + 'desc' => __('Suspicious base64_decode usage.', 'security-malware-firewall') + ), 'heuristic_the_function_contains_suspicious_arguments' => array( 'title' => '', 'desc' => __('The function contains suspicious arguments', 'security-malware-firewall') @@ -4334,13 +4346,15 @@ function spbc_settings__get_description() Disable this option if you have mail connection issues or SMTP service is not configured on this WordPress instance. Please note that only user that has permissions to activate plugins can disable this option.', 'security-malware-firewall'), ), + 'no_description' => array( + 'title' => esc_html($setting_id), + 'desc' => __('No description provided yet for this item. We are sorry about this. Please, contact support@cleantalk.org for further help.', 'security-malware-firewall'), + ), ); - if (!isset($descriptions[ $setting_id ])) { - return; - } + $out = isset($descriptions[ $setting_id ]) ? $descriptions[ $setting_id ] : $descriptions['no_description']; - wp_send_json($descriptions[ $setting_id ]); + wp_send_json($out); } /** diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php index 83c6ab9a9..f83f47645 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php @@ -431,7 +431,7 @@ public function makeVerdict() // If common bad structures found, then check containment for superglobals if ($found_malware_key !== false && $this->checkingSuperGlobalsInTheSystemCommands($this->tokens->current)) { - $this->verdict['CRITICAL'][$this->tokens->current->line][] = 'Super variables in the system command found'; + $this->verdict['CRITICAL'][$this->tokens->current->line][] = 'global variables in a sys command'; break; } From 5a1757b6d97100312261b0176f6c1ac9a836261c Mon Sep 17 00:00:00 2001 From: alexandergull Date: Wed, 23 Aug 2023 17:27:19 +0500 Subject: [PATCH 076/109] Docs added. --- .../Scanner/HeuristicAnalyser/HeuristicAnalyser.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php index f83f47645..c97fe3df7 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php @@ -3,6 +3,7 @@ namespace CleantalkSP\Common\Scanner\HeuristicAnalyser; use CleantalkSP\Common\Scanner\HeuristicAnalyser\DataStructures\ExtendedSplFixedArray; +use CleantalkSP\Common\Scanner\HeuristicAnalyser\DataStructures\Token; use CleantalkSP\Common\Scanner\HeuristicAnalyser\Modules\CodeStyle; use CleantalkSP\Common\Scanner\HeuristicAnalyser\Modules\Entropy; use CleantalkSP\Common\Scanner\HeuristicAnalyser\Modules\Evaluations; @@ -604,11 +605,18 @@ private function checkingDecryptedToken(DataStructures\Token $token) return false; } + /** + * Check if super global variables found in the token applications. + * @param Token $token + * @return bool + */ private function checkingSuperGlobalsInTheSystemCommands(DataStructures\Token $token) { + //search for next semicolon to find depth of seek $next_semicolon = $this->tokens->searchForward($token->key, ';'); $depth = $next_semicolon ? $next_semicolon - $token->key : 0; foreach ($this->super_globals as $super_global) { + //search for superglobs usage $forward_look_super_globals = $this->tokens->searchForward($token->key, $super_global, $depth); if (false !== $forward_look_super_globals) { return true; From 9639d84485d3ba595a2a1aaf06c603cf7dc757c9 Mon Sep 17 00:00:00 2001 From: alexandergull Date: Thu, 24 Aug 2023 12:43:44 +0500 Subject: [PATCH 077/109] Fix. Psalm fixes from entropy class of composer heurisitc package. --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index 8db64f8f8..aa90f723d 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -30,7 +30,6 @@ public function __construct($path) * * @param Variables $variables * @return void - * @psalm-suppress UndefinedClass */ public function analyse(Variables $variables) { @@ -48,7 +47,7 @@ public function analyse(Variables $variables) $encoder = new Encoder(); $detected_unreadable_variables = []; foreach ( $variable_names as $variable ) { - if ( ! isset($variables_obj[$variable][0]) ) { + if ( empty($variables_obj[$variable]) ) { continue; } if ( strpos($variable, '_') === 0 || strlen($variable) < 5 ) { @@ -74,7 +73,6 @@ public function analyse(Variables $variables) * * @param $path * @return bool - * @psalm-suppress UndefinedClass */ private function analyseFile($path) { From 40dcd02aa4a3c68a3ee813b2d957562648cf60ca Mon Sep 17 00:00:00 2001 From: Glomberg Date: Thu, 24 Aug 2023 17:25:11 +0300 Subject: [PATCH 078/109] Fix. Scanner. Background frontend scanner counting pages fixed. --- lib/CleantalkSP/SpbctWP/Scanner/Frontend.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php index b11b3b553..a72ddc558 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php @@ -264,7 +264,9 @@ static function ($response) { public static function getTotalPages() { - return wp_count_posts()->publish + wp_count_posts('page')->publish; + global $wpdb; + $query = "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type IN ( 'post', 'page' ) AND post_status = 'publish'"; + return $wpdb->get_var($query); } /** From 42e44267e514858331f018fbdcf80ca5d553bf84 Mon Sep 17 00:00:00 2001 From: svfcode Date: Thu, 24 Aug 2023 19:30:17 +0300 Subject: [PATCH 079/109] Upd. Security. Improve security logs view. --- css/spbc-settings.min.css | 2 +- css/src/spbc-settings.css | 18 ++++++++++++++ inc/spbc-settings.php | 50 +++++++++++++++++++++++++++++++++------ 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/css/spbc-settings.min.css b/css/spbc-settings.min.css index 03ba3333b..2384a053f 100644 --- a/css/spbc-settings.min.css +++ b/css/spbc-settings.min.css @@ -1 +1 @@ -.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4{margin:10px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText{display:none;position:absolute;top:0;background:rgba(150,150,150,.9);color:#fff;padding:7px;border:1px solid #333;border-radius:5px;z-index:20}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_rate_block_stars{margin:1em 0}.star-icon{color:#ddd;font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_auto_link,.spbc_manual_link{text-decoration:none;font-size:13px;line-height:26px;height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;margin:0;display:inline-block;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_manual_link:hover{color:#000}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file +.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4{margin:10px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText,.spbcFullText-right{display:none;position:absolute;top:0;background:rgba(150,150,150,.9);padding:7px;z-index:20;color:#fff}.spbcFullText{border:1px solid #333;border-radius:5px}.spbcFullText-right{right:0;border:1px solid #333;border-radius:5px}.spbcFullText a{color:#fff}.spbcFullText a:hover{color:#ddd}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_rate_block_stars{margin:1em 0}.star-icon{color:#ddd;font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_auto_link,.spbc_manual_link{text-decoration:none;font-size:13px;line-height:26px;height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;margin:0;display:inline-block;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_manual_link:hover{color:#000}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file diff --git a/css/src/spbc-settings.css b/css/src/spbc-settings.css index c8ca6f516..9b18a38be 100644 --- a/css/src/spbc-settings.css +++ b/css/src/spbc-settings.css @@ -154,6 +154,24 @@ table.spbc_table_general th, table.spbc_table_general td {position: relative; bo border-radius: 5px; z-index: 20; } +.spbcFullText-right{ + display: none; + position: absolute; + top: 0; + right: 0; + background: rgba(150,150,150,.9); + color: white; + padding: 7px; + border: 1px solid rgb(51, 51, 51); + border-radius: 5px; + z-index: 20; +} +.spbcFullText a { + color: white; +} +.spbcFullText a:hover { + color: #ddd; +} /* Pagination */ div.pagination{ diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 43c8ce0c7..94ba073a9 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1852,16 +1852,52 @@ function spbc_field_security_logs__prepare_data(&$table) $row->user_login ); - $page = $row->page === null ? '-' : "" . $row->page . ""; + $url = $row->page; + if ($url === null) { + $page = '-'; + } elseif (strlen($url) >= 60) { + $page = '' + . '
          ' + . '' . $url . '' + . '
          '; + } else { + $page = "" . $url . ""; + } + + $action = ''; + $is_add_time = true; + if (!is_null($url)) { + switch ($url) { + case '/wp-admin/edit.php': + $action = __('Viewing the posts list', 'security-malware-firewall'); + break; + case '/wp-admin/edit.php': + $action = __('Viewing the posts list', 'security-malware-firewall'); + break; + case '/wp-admin/edit.php?post_type=page': + $action = __('Viewing the pages list', 'security-malware-firewall'); + break; + case (preg_match('#/wp-admin/post.php\?post=[\d\w]+&action=edit#', $url) ? true : false): + $action = __('Editing post', 'security-malware-firewall'); + break; + case (preg_match('#/wp-admin/plugins.php\?action=activate#', $url) ? true : false): + $action = __('Activate plugin', 'security-malware-firewall'); + $is_add_time = false; + break; + case (preg_match('#/wp-admin/plugins.php\?action=deactivate#', $url) ? true : false): + $action = __('Deactivate plugin', 'security-malware-firewall'); + $is_add_time = false; + break; + } + } switch ($row->event) { case 'view': - $event = sprintf( - __('Viewing admin page (%s)', 'security-malware-firewall'), - $row->page_time === null - ? 'Calculating' - : strval($row->page_time) . ' seconds' - ); + $time = $row->page_time === null ? '(Calculating)' : '(' . strval($row->page_time) . ' seconds)'; + $event = $action !== '' ? $action . ' ' : __('Viewing admin page ', 'security-malware-firewall'); + $event .= $is_add_time ? $time : ''; break; case 'auth_failed': $event = __('Failed authentication', 'security-malware-firewall'); From 04d3283c1c35c065af9fca62b44aa7f21bcf8447 Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 25 Aug 2023 09:42:46 +0300 Subject: [PATCH 080/109] Fix. Remove duplicated case. --- inc/spbc-settings.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 94ba073a9..a4f084dd8 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1870,9 +1870,6 @@ function spbc_field_security_logs__prepare_data(&$table) $is_add_time = true; if (!is_null($url)) { switch ($url) { - case '/wp-admin/edit.php': - $action = __('Viewing the posts list', 'security-malware-firewall'); - break; case '/wp-admin/edit.php': $action = __('Viewing the posts list', 'security-malware-firewall'); break; From cb713895981eeb32897af9f38209d95e3ab79e0e Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 25 Aug 2023 10:59:11 +0300 Subject: [PATCH 081/109] Fix. Removed useless conditions. --- inc/spbc-settings.php | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 8a84ad216..05fe65073 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1727,13 +1727,8 @@ function spbc_get_admin_email() global $spbc; if ( ! is_multisite() ) { - // Not WPMS $admin_email = get_option('admin_email'); - } elseif ( is_main_site() || $spbc->network_settings['multisite__work_mode'] != 3) { - // WPMS - Main site, common account - $admin_email = get_site_option('admin_email'); } else { - // WPMS - Individual account, individual Access key $admin_email = get_blog_option(get_current_blog_id(), 'admin_email'); } @@ -4101,17 +4096,6 @@ function spbc_settings__update_account_email($direct_call = false) ); } - // protection against accidental request from a child site in the shared account mode - if (!is_main_site() && isset($spbc->network_settings['multisite__work_mode']) && $spbc->network_settings['multisite__work_mode'] != 3) { - die( - json_encode( - array( - 'error' => 'Please, enter valid email.' - ) - ) - ); - } - // email not changed if (isset($spbc->data['account_email']) && $account_email === $spbc->data['account_email']) { die( From e631f8f8138ff7f96c35098d056a7f832ecd2680 Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 25 Aug 2023 12:47:42 +0300 Subject: [PATCH 082/109] Fix. Change admin email only on main site. --- inc/spbc-settings.php | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 05fe65073..600257f02 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1693,7 +1693,7 @@ function spbc_field_key() '' . spbc_get_admin_email() . '', - spbc_settings__btn_change_account_email_html() + is_main_site() ? spbc_settings__btn_change_account_email_html() : '' ); echo '
          '; @@ -1747,15 +1747,6 @@ function spbc_get_admin_email() */ function spbc_settings__btn_change_account_email_html() { - global $spbc; - - if ( - ! is_main_site() && - isset($spbc->network_settings['multisite__work_mode']) && - $spbc->network_settings['multisite__work_mode'] == 1) { - return ''; - } - return '('; echo '

          '; - echo '
          ' - . sprintf( - __('Admin e-mail (%s) will be used for registration', 'security-malware-firewall'), - get_option('admin_email') - ) - . '
          '; + + // admin email + printf( + __( + 'Admin e-mail %s %s will be used for registration.', + 'security-malware-firewall' + ), + '' + . spbc_get_admin_email() + . '', + is_main_site() ? spbc_settings__btn_change_account_email_html() : '' + ); + echo '
          '; echo ''; echo '
          '; } +/** + * Current site admin e-mail + * @return string Admin e-mail + */ +function spbc_get_admin_email() +{ + global $spbc; + + if ( ! is_multisite() ) { + $admin_email = get_option('admin_email'); + } else { + $admin_email = get_blog_option(get_current_blog_id(), 'admin_email'); + } + + if ( $spbc->data['account_email'] ) { + add_filter('spbc_get_api_key_email', function () { + global $spbc; + return $spbc->data['account_email']; + }); + } + + return $admin_email; +} + +/** + * Show button for changed account email + */ +function spbc_settings__btn_change_account_email_html() +{ + return '()'; +} + function spbc_field_service_utilization() { global $spbc; @@ -1759,7 +1808,7 @@ function spbc_settings_2fa_description_callback() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } echo '
          ' @@ -3853,7 +3902,7 @@ function spbc_sanitize_settings($settings) ($settings['login_page_rename__send_email_notification'] && current_user_can('activate_plugins')) ) { $mail = wp_mail( - get_option('admin_email'), + spbc_get_admin_email(), $spbc->data["wl_brandname"] . esc_html__(': New login URL', 'security-malware-firewall'), sprintf( esc_html__('New login URL is: %s', 'security-malware-firewall'), @@ -4006,7 +4055,7 @@ function spbc_get_key_auto($direct_call = false) $wpms = SPBC_WPMS && defined('SUBDOMAIN_INSTALL') && ! SUBDOMAIN_INSTALL; $white_label = false; $hoster_api_key = $spbc->ms__hoster_api_key; - $admin_email = get_option('admin_email'); + $admin_email = spbc_get_admin_email(); /** * Filters the email to get API key @@ -4072,6 +4121,58 @@ function spbc_get_key_auto($direct_call = false) die(json_encode($out)); } +function spbc_settings__update_account_email($direct_call = false) +{ + if ( ! $direct_call) { + spbc_check_ajax_referer('spbc_secret_nonce', 'security'); + } + + global $spbc; + + $account_email = Post::get('accountEmail'); + + // not valid email + if (!$account_email || !filter_var(Post::get('accountEmail'), FILTER_VALIDATE_EMAIL)) { + die( + json_encode( + array( + 'error' => 'Please, enter valid email.' + ) + ) + ); + } + + // email not changed + if (isset($spbc->data['account_email']) && $account_email === $spbc->data['account_email']) { + die( + json_encode( + array( + 'success' => 'ok' + ) + ) + ); + } + + $spbc->data['account_email'] = $account_email; + $spbc->save('data'); + + // Link GET ACCESS KEY MANUALLY + $manually_link = sprintf( + 'https://cleantalk.org/register?platform=wordpress&email=%s&website=%s', + urlencode(spbc_get_admin_email()), + urlencode(get_bloginfo('url')) + ); + + die( + json_encode( + array( + 'success' => 'ok', + 'manuallyLink' => $manually_link + ) + ) + ); +} + function spbc_show_more_security_logs_callback() { spbc_check_ajax_referer('spbc_secret_nonce', 'security'); @@ -4485,7 +4586,7 @@ function spbctGenerateAndSendConfirmationCode() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } spbc_check_ajax_referer('spbc_secret_nonce', 'security'); diff --git a/js/spbc-settings.min.js b/js/spbc-settings.min.js index 3912541c8..00b3c637b 100644 --- a/js/spbc-settings.min.js +++ b/js/spbc-settings.min.js @@ -1,2 +1,2 @@ -function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
          ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); +function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}function spbcToggleClass(t,s){for(let e=0;e
          ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)}),jQuery(document).on("click","#spbc-change-account-email",function(e){e.preventDefault();var e=jQuery(this),t=jQuery("#spbc-account-email"),s=t.text();spbcToggleClass(e,"active"),e.hasClass("active")?(e.text(e.data("save-text")),t.attr("contenteditable","true"),t.focus(),t.on("keydown",function(e){"Enter"===e.code&&e.preventDefault()}),t.on("input",function(e){"insertParagraph"===e.inputType&&e.preventDefault()})):(spbc_sendAJAXRequest({action:"spbc_update_account_email",accountEmail:s},{timeout:5e3,callback:function(e,t,s,c){void 0!==e.success&&"ok"===e.success&&void 0!==e.manuallyLink&&jQuery("#spbc-key-manually-link").attr("href",e.manuallyLink),void 0!==e.error&&jQuery("#spbc-account-email").css("border-color","red")},errorOutput:function(e){spbcModal.loaded=e,spbcModal.open()}}),t.attr("contenteditable","false"),e.text(e.data("default-text")))})}); //# sourceMappingURL=spbc-settings.min.js.map diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 3aff6c443..12a53ca5f 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
          ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_settings__show_recommendation","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","remove_recommendation_func","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","secfw_enabled","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
          ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n\n\t/**\n * Change cleantalk account email\n */\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\n e.preventDefault();\n\n let $this = jQuery(this);\n let accountEmailField = jQuery('#spbc-account-email');\n let accountEmail = accountEmailField.text();\n\n\t\tspbcToggleClass($this, 'active');\n\n if ($this.hasClass('active')) {\n $this.text($this.data('save-text'));\n accountEmailField.attr('contenteditable', 'true');\n\t\t\taccountEmailField.focus();\n accountEmailField.on('keydown', function(e) {\n if (e.code === 'Enter') {\n e.preventDefault();\n }\n });\n accountEmailField.on('input', function(e) {\n if (e.inputType === 'insertParagraph') {\n e.preventDefault();\n }\n });\n } else {\n spbc_sendAJAXRequest(\n {\n action: 'spbc_update_account_email',\n accountEmail: accountEmail,\n },\n {\n timeout: 5000,\n callback: function(result, data, params, obj) {\n if (result.success !== undefined && result.success === 'ok') {\n if (result.manuallyLink !== undefined) {\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\n }\n }\n\n if (result.error !== undefined) {\n\t\t\t\t\t\t\n jQuery('#spbc-account-email').css('border-color', 'red');\n }\n },\n\t\t\t\t\terrorOutput: function(msg) {\n\t\t\t\t\t\tspbcModal.loaded = msg;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t}\n },\n );\n\n accountEmailField.attr('contenteditable', 'false');\n $this.text($this.data('default-text'));\n }\n });\n});\n\n/**\n * @param {string} className\n */\nfunction spbcToggleClass(arr, className) {\n\tfor (let i=0; i false, 'notice_review' => false, 'service_id' => '', + 'account_email' => '', 'license_trial' => 0, 'account_name_ob' => '', 'salt' => '', diff --git a/security-malware-firewall.php b/security-malware-firewall.php index f7a038751..47f8b1444 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -2417,7 +2417,7 @@ function spbc_send_daily_report($skip_data_rotation = false) // Hours $report_interval = 24 * 7; - $admin_email = get_option('admin_email'); + $admin_email = spbc_get_admin_email(); if ( ! $admin_email ) { error_log( sprintf( From dbbcbfdd4df1197e15fd64eeabebd1b45ee1a4f5 Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 25 Aug 2023 13:39:17 +0300 Subject: [PATCH 085/109] Compress js and css. --- css/spbc-settings.min.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/css/spbc-settings.min.css b/css/spbc-settings.min.css index afbb6c611..ddebbb5a1 100644 --- a/css/spbc-settings.min.css +++ b/css/spbc-settings.min.css @@ -1 +1 @@ -.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4{margin:10px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_auto_link,.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText{display:none;position:absolute;top:0;background:rgba(150,150,150,.9);color:#fff;padding:7px;border:1px solid #333;border-radius:5px;z-index:20}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_auto_link,.spbc_manual_link{height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;display:inline-block;cursor:pointer}.spbc_rate_block_stars{margin:1em 0}.star-icon{color:#ddd;font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;text-decoration:none;font-size:13px;line-height:26px;margin:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none;font-size:13px;line-height:26px;margin:0;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_manual_link:hover{color:#000}.spbc-btn-as-link{padding:0;margin:0;vertical-align:baseline;color:gray;border:0;border-bottom:1px solid;cursor:pointer}#spbc-account-email[contenteditable=true]{padding:6px;background-color:#fff;border:1px solid #ccc}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file +.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}#spbcTopWarning h4,div.pagination{margin:10px}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_auto_link,.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText,.spbcFullText-right{display:none;position:absolute;background:rgba(150,150,150,.9);padding:7px;z-index:20;color:#fff;top:0}.spbcFullText{border:1px solid #333;border-radius:5px}.spbcFullText-right{right:0;border:1px solid #333;border-radius:5px}.spbcFullText a{color:#fff}.spbcFullText a:hover,.star-icon{color:#ddd}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_auto_link,.spbc_manual_link{height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;display:inline-block;cursor:pointer}.spbc_rate_block_stars{margin:1em 0}.star-icon{font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;text-decoration:none;font-size:13px;line-height:26px;margin:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none;font-size:13px;line-height:26px;margin:0;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_manual_link:hover{color:#000}.spbc-btn-as-link{padding:0;margin:0;vertical-align:baseline;color:gray;border:0;border-bottom:1px solid;cursor:pointer}#spbc-account-email[contenteditable=true]{padding:6px;background-color:#fff;border:1px solid #ccc}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file From 2d20f0c6205fcfc53b51b744be68c205aadb263b Mon Sep 17 00:00:00 2001 From: svfcode Date: Fri, 25 Aug 2023 13:39:50 +0300 Subject: [PATCH 086/109] Up version and upd changelog. --- readme.txt | 11 ++++++++++- security-malware-firewall.php | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/readme.txt b/readme.txt index b98b04f57..0d9bf3245 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: security, firewall, malware, wordpress security, brute force Requires at least: 3.0 Tested up to: 6.3 Requires PHP: 5.6 -Stable tag: 2.116 +Stable tag: 2.117 License: GPLv2 License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -301,6 +301,15 @@ This is required for the Security FireWall to function properly. Plugins that ar == Changelog == += 2.117 Aug 28 2023 = +* New: Settings. Add ability to change admin email. +* New: Heuristics. Detect super variables in the system commands. +* New: Show different types of weakspots in severity order. +* Upd: Scan. Find and show all malwares in Frontend Malware accordion. +* Upd: Security. Improve security logs view. +* Upd: Scan. Unset approved by ct status if no hash in list. +* Upd: Scan. Added .otc files for scanning. + = 2.116 Aug 14 2023 = * New: WL. Added constants for custom description and FAQ link. * Fix: FW. Delete all lines after send fw logs. diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 47f8b1444..edd1bc882 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.116.1-dev +Version: 2.117.1-dev Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n From 632dd8fc95670181e4b76f7d744ea5b0410271c2 Mon Sep 17 00:00:00 2001 From: svfcode Date: Mon, 28 Aug 2023 10:53:27 +0300 Subject: [PATCH 087/109] Fix. spbct_js_after and plugin default description --- inc/spbc-settings.php | 5 ++++- security-malware-firewall.php | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 1c1a3bca9..764b164cb 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -1117,7 +1117,10 @@ function spbc_settings__draw_elements($elems_to_draw = null, $direct_call = fals } $target = 'spbc_tab-' . $elem_name; echo ""; // JS after tab diff --git a/security-malware-firewall.php b/security-malware-firewall.php index edd1bc882..cb07b75f4 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -42,7 +42,7 @@ } // Getting version form main file (look above) -$plugin_info = get_file_data(__FILE__, array('Version' => 'Version', 'Name' => 'Plugin Name',)); +$plugin_info = get_file_data(__FILE__, array('Version' => 'Version', 'Name' => 'Plugin Name', 'Description' => 'Description')); $plugin_version__agent = $plugin_info['Version']; // Converts xxx.xxx.xx-dev to xxx.xxx.2xx // And xxx.xxx.xx-fix to xxx.xxx.1xx @@ -2733,7 +2733,7 @@ function spbc_scanner_resend_pscan_files() function spbc_check_account_status($api_key) { - global $spbc; + global $spbc, $plugin_info; // Checking account status $result = SpbcAPI::method__notice_paid_till( @@ -2818,7 +2818,7 @@ function spbc_check_account_status($api_key) : $spbc->default_data['wl_support_email']; $spbc->data['wl_plugin_description'] = isset($result['wl_plugin_description']) ? Sanitize::cleanTextField($result['wl_plugin_description']) - : get_plugin_data('security-malware-firewall/security-malware-firewall.php')['Description']; + : $plugin_info['Description']; } else { $spbc->data['wl_mode_enabled'] = false; $spbc->data['wl_brandname'] = $spbc->default_data['wl_brandname']; From 06b3c10b5855af0afda751c9ed7d20aedaedf840 Mon Sep 17 00:00:00 2001 From: svfcode Date: Wed, 30 Aug 2023 11:58:32 +0300 Subject: [PATCH 088/109] Fix. Scan. Check total site pages. --- lib/CleantalkSP/SpbctWP/Scanner/Frontend.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php index 60a613fc9..3ada27985 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php @@ -456,10 +456,12 @@ public static function sendFmsLogs() ? $spbc->data['scanner']['scanner_start_local_date'] : current_time('Y-m-d H:i:s'); + $total_site_pages = isset($spbc->data['scanner']['total_site_pages']) ? $spbc->data['scanner']['total_site_pages'] : self::getTotalPages(); + if (count($fms_logs_data_prepare) > 0) { $result_fms = API::method__security_fms_logs( $spbc->settings['spbc_key'], // API key - $spbc->data['scanner']['total_site_pages'], // Total pages + $total_site_pages, // Total pages count($fms_logs_data_prepare), // Total infected pages $scanner_start_local_date, // Scanner start date json_encode($fms_logs_data_prepare) // Logs data From d70325ed7e5b1a20b4c6fb937a317c813a397e8c Mon Sep 17 00:00:00 2001 From: svfcode Date: Wed, 30 Aug 2023 12:29:55 +0300 Subject: [PATCH 089/109] merge master to dev --- .../Common/Scanner/HeuristicAnalyser/Modules/Entropy.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index aa90f723d..3a2800c82 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -47,7 +47,7 @@ public function analyse(Variables $variables) $encoder = new Encoder(); $detected_unreadable_variables = []; foreach ( $variable_names as $variable ) { - if ( empty($variables_obj[$variable]) ) { + if ( ! isset($variables_obj[$variable][0]) ) { continue; } if ( strpos($variable, '_') === 0 || strlen($variable) < 5 ) { From 7a55187115ffa8882b9aae3b3621fbb25deda71a Mon Sep 17 00:00:00 2001 From: svfcode Date: Wed, 30 Aug 2023 12:40:14 +0300 Subject: [PATCH 090/109] merge master to fix --- composer.json | 3 + css/spbc-settings.min.css | 2 +- css/src/spbc-settings.css | 32 ++ inc/spbc-admin.php | 1 + inc/spbc-scanner.php | 22 +- inc/spbc-settings.php | 284 +++++++++++++++--- js/spbc-settings.min.js | 2 +- js/spbc-settings.min.js.map | 2 +- js/spbc-settings_tab--scanner.min.js | 2 +- js/spbc-settings_tab--scanner.min.js.map | 2 +- js/src/spbc-settings.js | 69 ++++- js/src/spbc-settings_tab--scanner.js | 72 +++-- .../HeuristicAnalyser/HeuristicAnalyser.php | 39 +++ .../HeuristicAnalyser/Modules/Entropy.php | 2 - .../Scanner/SignaturesAnalyser/Controller.php | 2 +- lib/CleantalkSP/SpbctWP/Firewall/BFP.php | 2 +- lib/CleantalkSP/SpbctWP/Scanner/Frontend.php | 27 +- .../SpbctWP/Scanner/ScannerQueue.php | 23 +- lib/CleantalkSP/SpbctWP/State.php | 1 + readme.txt | 11 +- security-malware-firewall.php | 10 +- tests/Standalone/TestBFP.php | 12 +- 22 files changed, 524 insertions(+), 98 deletions(-) diff --git a/composer.json b/composer.json index e05a11ed7..88a8e85d8 100644 --- a/composer.json +++ b/composer.json @@ -28,6 +28,9 @@ ], "just_phpunit": [ "vendor/bin/phpunit --configuration tests/phpunit.xml --debug" + ], + "just_psalm": [ + "vendor/bin/psalm --no-cache --config=psalm.xml --debug" ] }, "config": { diff --git a/css/spbc-settings.min.css b/css/spbc-settings.min.css index 03ba3333b..ddebbb5a1 100644 --- a/css/spbc-settings.min.css +++ b/css/spbc-settings.min.css @@ -1 +1 @@ -.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4{margin:10px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText{display:none;position:absolute;top:0;background:rgba(150,150,150,.9);color:#fff;padding:7px;border:1px solid #333;border-radius:5px;z-index:20}div.pagination{margin:10px}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_rate_block_stars{margin:1em 0}.star-icon{color:#ddd;font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_auto_link,.spbc_manual_link{text-decoration:none;font-size:13px;line-height:26px;height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;margin:0;display:inline-block;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{background:#ccc;border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_manual_link:hover{color:#000}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file +.circle{border-radius:50%;align-items:center;justify-content:center;position:relative;background-color:#03A9F4;clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,50% 0,50% 50%,50% 50%)}.circle-inner{width:100%;height:100%;border-radius:50%;background:#f7f7f7;transform:scale(.7)}.circle--small{width:16px;height:16px}.circle--mid{width:30px;height:30px}.-animation--circle{animation:animation-circle 2s linear forwards}.-animation--30s{animation-duration:30s!important}.-animation--2min{animation-duration:120s!important}@keyframes animation-circle{12.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 0,0 0,50% 50%,50% 50%)}25%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 50%,0 50%,50% 50%,50% 50%)}37.5%{clip-path:polygon(50% 0,100% 0,100% 100%,0 100%,0 100%,0 100%,0 100%,50% 50%,50% 50%)}50%{clip-path:polygon(50% 0,100% 0,100% 100%,50% 100%,50% 100%,50% 100%,50% 100%,50% 50%,50% 50%)}62.5%{clip-path:polygon(50% 0,100% 0,100% 100%,100% 100%,100% 100%,100% 100%,100% 100%,50% 50%,50% 50%)}75%{clip-path:polygon(50% 0,100% 0,100% 50%,100% 50%,100% 50%,100% 50%,100% 50%,50% 50%,50% 50%)}87.5%{clip-path:polygon(50% 0,100% 0,100% 0,100% 0,100% 0,100% 0,100% 0,50% 50%,50% 50%)}100%{clip-path:polygon(50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 0,50% 50%,50% 50%)}}#confirmation-code--resend .circle{margin-left:5px;display:inline-block;vertical-align:text-bottom}#spbcTopWarning h4,div.pagination{margin:10px}.spbc---hidden,.spbc_waf_reason{display:none}#spbcTopWarning{margin-bottom:5px}#spbcTopWarning h3{margin:10px 0 5px}#spbcTopWarning h4 span{margin-top:5px}#spbc_gdpr_open_modal:hover{cursor:pointer}.spbc---gray{color:gray}.spbc---red{color:red}.spbc_bold{font-weight:800}.spbc---top{z-index:9999!important}.spbc_waf_reason_title{text-decoration:underline}.spbc_waf_reason_title:hover+.spbc_waf_reason{display:inline}.spbc_warning_counter{margin:0 5px;padding:0 7px;font-size:14px;height:23px;display:inline-block;text-align:center;border-radius:3px}.spbc_sub_setting{margin-left:30px!important}.spbc_sub2_setting{margin-left:60px!important}.spbc_affiliate_shortcode{width:inherit!important;min-width:inherit!important}.spbc_warning_counter--black{color:#fff;background-color:#000}.spbc_warning_counter--red{color:#000;background-color:red}.spbc_warning_counter--orange{color:#000;background-color:orange}.spbc_warning_counter--green{color:#000;background-color:green}.spbc_highlighted{outline-offset:5px;outline-color:red;outline-width:3px!important;outline-style:solid!important}.spbc_status_icon{vertical-align:text-bottom;margin:0 5px}.spbc_progressbar_counter{position:absolute;height:22px;width:100%;left:0;top:0;text-align:center}.spbc_progressbar_counter span{vertical-align:sub;line-height:22px;font-weight:600;font-size:18px}.spbc_preloader,.spbc_preloader_button{margin-left:5px;vertical-align:text-top;display:none}.spbc_compare_file_row_wrapper,.spbc_view_file_row,.spbc_view_file_row_wrapper{line-height:19px}.ui-progressbar-value{background-image:url(../images/pbar-ani.gif)!important}.spbc_preloader{width:20px}.spbc_preloader_button{height:15px}.spbc_spinner_big{display:block;margin:40px auto}.spbc_scan_result_row td{text-align:center}.spbc_scan_result_row td:nth-child(1){text-align:left}.spbc_scan_result_row td:nth-child(2){text-align:right}.spbc_scan_result_row td:last-child button{margin-left:3px}.spbc_view_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_wrapper:nth-child(even){background:#ddd}.spbc_auto_link,.spbc_compare_file_row_wrapper:nth-child(odd){background:#ccc}.spbc_view_file_row_num{display:inline-block;width:30px;margin:0 0 0 5px;border-right:1px solid #000}.spbc_view_file_row{display:inline;margin:0 0 0 5px;font-size:1em}.spbc_compare_file_headings{text-align:center;width:100%;display:inline-block;font-weight:700}.spbc_compare_file_row_wrapper:nth-child(even){background:#ddd}.spbc_compare_file_row_num{display:inline-block;width:20px;box-shadow:-2px 0 0 0 #000,2px 0 0 0 #000;padding:0 1%}.spbc_compare_file_row{display:inline-block;width:45%;margin:0;padding:0 1%}table.spbc_table_general{width:100%;border:0;border-spacing:0;border-collapse:collapse}table.spbc_table_general td,table.spbc_table_general th{position:relative;border:1px solid #666;padding:2px 10px}.spbcShortText{display:inline-block;width:100%}.spbcFullText,.spbcFullText-right{display:none;position:absolute;background:rgba(150,150,150,.9);padding:7px;z-index:20;color:#fff;top:0}.spbcFullText{border:1px solid #333;border-radius:5px}.spbcFullText-right{right:0;border:1px solid #333;border-radius:5px}.spbcFullText a{color:#fff}.spbcFullText a:hover,.star-icon{color:#ddd}ul.pagination{display:inline-block;margin:0}li.pagination{display:inline-block;margin-left:10px}span.current_page{font-size:1.3em;font-weight:600}.spbc_new{color:red;position:relative;font-size:10px;vertical-align:bottom;top:-8px}.spbc_wrapper_settings{margin:10px 0 0}.spbc_tabs_nav_wrapper{display:block;border-bottom:1px solid #ccc}.spbc_tab_nav{display:inline-block;margin:10px 0 0 .5em;padding:5px 10px;height:24px;border:1px solid #ccc;border-bottom:none;font-size:14px;line-height:24px;background:#e5e5e5;color:#555;cursor:pointer}.spbc_tab_nav:hover{background:#fff}.spbc_tab_nav--active{margin-bottom:-1px;border-bottom:1px solid #f1f1f1;background:#f1f1f1;color:#000}.spbc_tab_nav--active:hover{background:#f1f1f1}.spbc_tab{display:none;margin:15px 0}.spbc_tab--active{display:block}.spbc_tab_fields_group{position:relative;min-width:255px;margin:10px auto;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04);-webkit-box-shadow:0 1px 1px rgba(0,0,0,.04);background:#fdfdfd}.spbc_group_header{margin:0 0 10px;padding:10px;border-bottom:1px solid #eee}.spbc_group_header>h3{margin:0}.spbc_group_header>h3>a{color:#1d2327;text-decoration:none}.spbc_wrapper_field{margin:0 15px 15px}.spbc_long_description__show:hover{color:#aaa;cursor:pointer}.spbc_settings_description{font-size:9pt;color:#888}.spbc_settings_description select{display:inline;position:relative;transform:scale(.7);left:-50px}.spbc_tab-settings_general input[type=text]{min-width:255px;width:100%}.spbc_short_text_field input{min-width:70px!important;width:70px!important}.spbc_middle_text_field input{min-width:200px!important;width:200px!important}.spbc_long_text_field input[type=text]{min-width:200px;width:500px}.spbc_wrapper_field label{vertical-align:baseline}.spbc_wrapper_field h4{margin:10px 15px 5px}.spbc_wrapper_footer{margin:15px}#spbc_wrapper_error{margin:0;padding:5px}#spbc_wrapper_error h3,#spbc_wrapper_error h4{margin:5px}#showHideLink{display:inline-block;margin-top:5px;color:#777}.spbc__wrapper--center{margin:10px 0;text-align:center}.spbc__show_more_logs{display:none}.spbc_settings_banner{display:inline-block;margin:1em 0;vertical-align:top;text-align:center}#spbc_translate_plugin{margin-left:10px}.spbc_rate_block{border:1px dashed #666;width:400px;padding:.2em}#spbc_translate_plugin .spbc_button_rate{margin-bottom:10px}.spbc_button_rate{display:inline-block;text-align:center;vertical-align:middle;padding:12px 24px;border:1px solid #216298;border-radius:8px;background:#35a0f7;background:-webkit-gradient(linear,left top,left bottom,from(#35a0f7),to(#216298));background:-moz-linear-gradient(top,#35a0f7,#216298);background:linear-gradient(to bottom,#35a0f7,#216298);text-shadow:#153e5f 1px 1px 1px;font:normal normal bold 16px verdana;color:#fff;text-decoration:none}.spbc_button_rate:focus,.spbc_button_rate:hover{border:1px solid #297bbe;background:#40c0ff;background:-webkit-gradient(linear,left top,left bottom,from(#40c0ff),to(#2876b6));background:-moz-linear-gradient(top,#40c0ff,#2876b6);background:linear-gradient(to bottom,#40c0ff,#2876b6);color:#fff;text-decoration:none}.spbc_button_rate:active{background:#216298;background:-webkit-gradient(linear,left top,left bottom,from(#216298),to(#216298));background:-moz-linear-gradient(top,#216298,#216298);background:linear-gradient(to bottom,#216298,#216298)}#spbc_rate_plugin .spbc_button_rate:before{content:"\0000a0";display:inline-block;height:24px;width:24px;line-height:24px;margin:0 4px -6px -4px;position:relative;top:0;left:0;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACjElEQVRIie1UTWsTURQ9dzKpofQLobQFlxqENF1JG0GE6sKuRLDtTKaBkJUIRdwpba2g9ge48gMEUUyTbrUutFmk1X6Q7kxDgi1YUSmlpsGYiTXtuy7GCYnaSRu3PczAfe/dd8695z0ecIAKsFVK0DQNLpcL8Xi8KgHZalFRNWe7uyMs2+RtkBQIjQerU/k3uVceHhmdyed/8NbWFg8OXrlXDY+020JdXf2NQMB/yuE4hHw+j5yur1df7h9QvQMXpiKRHSEECyF4cvJlQVG149VwlZ1BX58fsn1H7e29+OhMd7cEAMyM6PTMNAgfFUWrJSIAQgCAYAKIAECABACABGFt7fPPaDRqjItVqyrqG5vGAn7/kMfTBYMIyGQyeD0VMZKYweYGM2ZjpnR+eWVl8V08fnYiNP6t1Jbzc3PzbNryP38stsiKqp0uWuTz+eBqd9/s6uo02vpdPTOXxZuZDB7cfwgQGa0TIEmS7nA4PhhDkgBgdXV1FkTzRYHCtjjS4XZ3mGQmSsdEhKbGRqhqPwRz0ZOlRKImGBy/FA4F31gd8tG2tjaZmf+VUybS2tpaNpfeTMsADu+2xxRw2O12ENFftpTG6XQat26PQZIIzEA2m/1SKBSGGXhhWZmiaifezs7yfhGdnmFF1TqtuM0OksvvlzMnPZ4mq+RkMoVsNlu83ImlxDqATxUFwqHg94aGhsc9PeeuNjc372pRMpnExsZX5HI5xBZjd3aEuBsOBTcs7TGherXaa9eHIqlUioUQltYIIXhkZPT5XnjL7qXi1Wpkm6w5nccGWlpanLJNlkGQyEw1Pui6rs8tLFx+9vTJq30JlKK/3ycRCQkSFZ8Dcwszi4lwUOylgwNUxC8cBKAS7hIWzwAAAABJRU5ErkJggg==) left center no-repeat;background-size:100% 100%}.spbc_auto_link,.spbc_manual_link{height:28px;padding:0 10px 1px;border-width:1px;border-style:solid;-webkit-appearance:none;white-space:nowrap;display:inline-block;cursor:pointer}.spbc_rate_block_stars{margin:1em 0}.star-icon{font-size:18px;position:relative}.star-icon.full:before{color:#FDE16D;content:'\2605';position:absolute;left:0;text-shadow:0 0 2px rgba(0,0,0,.7)}.spbc_hint{color:#666}.spbc_hint_warning{font-size:17px;font-weight:600;text-align:center;color:#eb8f00}.spbc_hint--link{color:#aaa;text-decoration:underline;cursor:pointer}.spbc_hint--top_right{position:relative;float:right;top:0;right:10px}.spbc_auto_link{border-color:#999;-webkit-box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(200,200,200,.5),0 1px 0 rgba(0,0,0,.15);color:#000;text-decoration:none;font-size:13px;line-height:26px;margin:0;-webkit-border-radius:2px;border-radius:2px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_auto_link:hover{color:#fff}.spbc_manual_link{background:#2ea2cc;border-color:#0074a2;-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);box-shadow:inset 0 1px 0 rgba(120,200,230,.5),0 1px 0 rgba(0,0,0,.15);color:#fff;text-decoration:none;font-size:13px;line-height:26px;margin:0;border-radius:3px;-webkit-border-radius:3px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.spbc_manual_link:hover{color:#000}.spbc-btn-as-link{padding:0;margin:0;vertical-align:baseline;color:gray;border:0;border-bottom:1px solid;cursor:pointer}#spbc-account-email[contenteditable=true]{padding:6px;background-color:#fff;border:1px solid #ccc}.spbc_long_desc,.spbc_popup_tip--wrapper{min-height:80px;max-width:500px;padding:10px;z-index:10}.spbc_dismiss{width:20px;height:20px;border-radius:5px}.spbc-links:visited{color:#fff}.spbc_long_desc{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_long_desc p{color:#fff!important}i.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block;font-size:25px;line-height:20px;color:rgba(120,200,230,1);margin:25px}@keyframes spin{to{transform:rotate(359deg)}}.spbc_long_desc__angle,.spbc_long_desc__angle_top_left{width:10px;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);position:absolute;height:10px;background:#5a5a5a}.spbc_long_desc__cancel{position:absolute;top:5px;right:5px;color:rgba(255,255,255,.5)}.spbc_long_desc__cancel:hover{color:#fff}.spbc_long_desc__link,.spbc_long_desc__title{color:rgba(120,200,230,1)}.spbc_long_desc__angle{top:5px;left:-17px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__angle_top_left{top:-10px;left:-9px;transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_long_desc__title{margin:0}.spbc_long_desc__link:hover{color:rgba(140,220,250,1)}.spbc_long_desc h4{color:#50a0be;margin:10px 0 3px}.spbc_long_desc span{margin:0 0 0 10px;display:inline-block}.spbc_long_desc img{width:300px}.spbc_popup_tip--icon---show:hover{color:#aaa;cursor:pointer}.spbc_popup_tip--wrapper{position:absolute;background:#5a5a5a;min-width:80px;color:#fff}.spbc_popup_tip--icon---cancel{position:absolute;top:0;right:5px;color:rgba(255,255,255,.5)}.spbc_popup_tip--icon---cancel:hover{color:#fff}.spbc_popup_tip--angle{position:absolute;top:5px;left:-17px;width:10px;height:10px;background:#5a5a5a;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg);-webkit-transform-origin:100% 100%;-ms-transform-origin:100% 100%;transform-origin:100% 100%}.spbc_popup_tip--title{color:rgba(120,200,230,1);margin:0}.spbc_popup_tip--text{color:#fff!important}tr:hover .spbc_hint--wrapper{display:none}.spbc_log-wrapper{padding:5px;border:1px solid #000;width:98%;min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}.spbc_log-wrapper .panel-body{height:100%;overflow-y:auto}.spbc_log-line{margin:0;padding:0 5px}.spbc_log-line:nth-child(odd){background:#d3d3d3}.spbc_log-block_header{margin:10px 0}.spbc_log-input--checkbox,.spbc_log-label--checkbox{width:auto}button.ct_support_link{border:none;background:0 0;color:#666;text-decoration:underline;cursor:pointer}#spbc-modal-content{text-align:center}#spbc-modal-content>*{display:block;width:100%}.spbc-popup-msg{width:98%;height:15px;text-align:center;padding:4px;border-radius:7px;position:relative;top:0;right:0;bottom:0;left:0;margin:auto}.popup--green{background:#DFD;color:#060;border:1px solid #060}.popup--red{background:#FDD;color:#600;border:1px solid #600}#spbcscan-results-log-module{min-height:300px;height:300px;border-bottom:5px dashed #5a5a5a}#spbcscan-results-log-module .panel-body{height:100%;overflow-y:auto}#spbcscan-scanner-caption h4{margin:10px 0;font-size:14px}#spbcscan-results-log-caption p{font-size:13px;margin:0 0 6px}#spbcscan-scanner-caption{display:flex;flex-wrap:wrap;flex-direction:row-reverse}#spbcscan-scanner-caption .column:first-child{width:75%;flex:0 0 75%}#spbcscan-scanner-caption .column:last-child{width:25%;flex:0 0 25%;padding-right:10px;box-sizing:border-box}.spbc-scan-log-title{color:#1d2327;font-size:1.3em;margin:0 0 15px!important;font-weight:600}.spbc--status{position:relative;padding-left:26px}.spbc--marker-green::before,.spbc--marker-red::before,.spbc--marker-yellow::before{content:'';position:absolute;width:10px;height:10px;border-radius:50%;left:10px;top:4px}.spbc--marker-green::before{background:#1dda23}.spbc--marker-yellow::before{background:#ffb000}.spbc--marker-red::before{background:#d63638} \ No newline at end of file diff --git a/css/src/spbc-settings.css b/css/src/spbc-settings.css index c8ca6f516..4298e6d03 100644 --- a/css/src/spbc-settings.css +++ b/css/src/spbc-settings.css @@ -154,6 +154,24 @@ table.spbc_table_general th, table.spbc_table_general td {position: relative; bo border-radius: 5px; z-index: 20; } +.spbcFullText-right{ + display: none; + position: absolute; + top: 0; + right: 0; + background: rgba(150,150,150,.9); + color: white; + padding: 7px; + border: 1px solid rgb(51, 51, 51); + border-radius: 5px; + z-index: 20; +} +.spbcFullText a { + color: white; +} +.spbcFullText a:hover { + color: #ddd; +} /* Pagination */ div.pagination{ @@ -454,6 +472,20 @@ div.pagination{ { color:black; } +.spbc-btn-as-link { + padding: 0; + margin: 0; + vertical-align: baseline; + color: gray; + border: 0 none; + border-bottom: 1px solid; + cursor: pointer; +} +#spbc-account-email[contenteditable="true"] { + padding: 6px; + background-color: #fff; + border: 1px solid #ccc; +} .spbc_dismiss{ width: 20px; height: 20px; border-radius: 5px; diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 3d7da390c..5093c083e 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -113,6 +113,7 @@ function spbc_admin_init() add_action('wp_ajax_spbc_settings__check_renew_banner', 'spbc_settings__check_renew_banner'); add_action('wp_ajax_spbc_sync', 'spbc_sync'); add_action('wp_ajax_spbc_get_key_auto', 'spbc_get_key_auto'); + add_action('wp_ajax_spbc_update_account_email', 'spbc_settings__update_account_email'); // Confirm the email to activate 2FA add_action('wp_ajax_spbc_generate_confirmation_code', 'spbctGenerateAndSendConfirmationCode'); diff --git a/inc/spbc-scanner.php b/inc/spbc-scanner.php index 778c3f15d..74436aec5 100644 --- a/inc/spbc-scanner.php +++ b/inc/spbc-scanner.php @@ -1045,14 +1045,20 @@ function spbc_get_sql_where_addiction_for_table_of_category($category) global $spbc; switch ($category) { case 'critical': - $res = ' WHERE severity IN("CRITICAL") AND - (status <> "QUARANTINED" AND - status <> "APROVED" AND - status <> "APPROVED_BY_CT") - AND - (last_sent IS NULL OR - pscan_status = "DANGEROUS" OR - analysis_status = "DANGEROUS")'; + $res = ' WHERE status = "DENIED_BY_CLOUD" + OR ( + severity IN("CRITICAL") + AND ( + status <> "QUARANTINED" AND + status <> "APROVED" AND + status <> "APPROVED_BY_CT" + ) + AND ( + last_sent IS NULL OR + pscan_status = "DANGEROUS" OR + analysis_status = "DANGEROUS" + ) + )'; break; case 'suspicious': $res = ' WHERE severity <> "CRITICAL" AND diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 0a4c99ca2..764b164cb 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -387,7 +387,7 @@ function spbc_settings__register() 'title_first' => true, 'title' => __('Send the notification with the new login page URL to the admin email address', 'security-malware-firewall'), 'description' => __('The email will be send to', 'security-malware-firewall') - . ' (' . get_option('admin_email') . ')', + . ' (' . spbc_get_admin_email() . ')', 'long_description' => true, 'parent' => 'login_page_rename__enabled', 'disabled' => !current_user_can('activate_plugins') @@ -1117,7 +1117,10 @@ function spbc_settings__draw_elements($elems_to_draw = null, $direct_call = fals } $target = 'spbc_tab-' . $elem_name; echo ""; // JS after tab @@ -1309,7 +1312,7 @@ function spbc_settings_page() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } // Outputs errors if exists @@ -1685,7 +1688,7 @@ function spbc_field_key() } else { echo ''; echo '

          '; - echo ' + echo ' '; echo ' ' . __('or', 'security-malware-firewall') . ' '; @@ -1695,12 +1698,19 @@ function spbc_field_key() . '' . ''; echo '

          '; - echo '
          ' - . sprintf( - __('Admin e-mail (%s) will be used for registration', 'security-malware-firewall'), - get_option('admin_email') - ) - . '
          '; + + // admin email + printf( + __( + 'Admin e-mail %s %s will be used for registration.', + 'security-malware-firewall' + ), + '' + . spbc_get_admin_email() + . '', + is_main_site() ? spbc_settings__btn_change_account_email_html() : '' + ); + echo '
          '; echo ''; echo '
          '; } +/** + * Current site admin e-mail + * @return string Admin e-mail + */ +function spbc_get_admin_email() +{ + global $spbc; + + if ( ! is_multisite() ) { + $admin_email = get_option('admin_email'); + } else { + $admin_email = get_blog_option(get_current_blog_id(), 'admin_email'); + } + + if ( $spbc->data['account_email'] ) { + add_filter('spbc_get_api_key_email', function () { + global $spbc; + return $spbc->data['account_email']; + }); + } + + return $admin_email; +} + +/** + * Show button for changed account email + */ +function spbc_settings__btn_change_account_email_html() +{ + return '()'; +} + function spbc_field_service_utilization() { global $spbc; @@ -1759,7 +1811,7 @@ function spbc_settings_2fa_description_callback() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } echo '
          ' @@ -1852,16 +1904,49 @@ function spbc_field_security_logs__prepare_data(&$table) $row->user_login ); - $page = $row->page === null ? '-' : "" . $row->page . ""; + $url = $row->page; + if ($url === null) { + $page = '-'; + } elseif (strlen($url) >= 60) { + $page = '' + . '
          ' + . '' . $url . '' + . '
          '; + } else { + $page = "" . $url . ""; + } + + $action = ''; + $is_add_time = true; + if (!is_null($url)) { + switch ($url) { + case '/wp-admin/edit.php': + $action = __('Viewing the posts list', 'security-malware-firewall'); + break; + case '/wp-admin/edit.php?post_type=page': + $action = __('Viewing the pages list', 'security-malware-firewall'); + break; + case (preg_match('#/wp-admin/post.php\?post=[\d\w]+&action=edit#', $url) ? true : false): + $action = __('Editing post', 'security-malware-firewall'); + break; + case (preg_match('#/wp-admin/plugins.php\?action=activate#', $url) ? true : false): + $action = __('Activate plugin', 'security-malware-firewall'); + $is_add_time = false; + break; + case (preg_match('#/wp-admin/plugins.php\?action=deactivate#', $url) ? true : false): + $action = __('Deactivate plugin', 'security-malware-firewall'); + $is_add_time = false; + break; + } + } switch ($row->event) { case 'view': - $event = sprintf( - __('Viewing admin page (%s)', 'security-malware-firewall'), - $row->page_time === null - ? 'Calculating' - : strval($row->page_time) . ' seconds' - ); + $time = $row->page_time === null ? '(Calculating)' : '(' . strval($row->page_time) . ' seconds)'; + $event = $action !== '' ? $action . ' ' : __('Viewing admin page ', 'security-malware-firewall'); + $event .= $is_add_time ? $time : ''; break; case 'auth_failed': $event = __('Failed authentication', 'security-malware-firewall'); @@ -2798,6 +2883,24 @@ function spbc_field_scanner__show_accordion($direct_call = false) '
          ' . '
          '; + //critical description + $critical_description = __('These files may not contain malicious code but they use very dangerous PHP functions and constructions! PHP developers don\'t recommend to use it and it looks very suspicious.', 'security-malware-firewall'); + if ($spbc->data['display_scanner_warnings']['analysis'] && !$spbc->data['wl_mode_enabled']) { + $critical_description .= spbc__manual_cure_service_suggest_html('critical'); + } + + //unknown files description + $unknown_files_description = __('These files do not include known malware signatures or dangerous code. In same time these files do not belong to the WordPress core or any plugin, theme which are hosted on wordpress.org.', 'security-malware-firewall') + . '
          ' + . __('To disable this list deactivate the', 'security-malware-firewall') + . ' ' + . __('List unknown files', 'security-malware-firewall') + . ' ' + . __('option', 'security-malware-firewall') + . ' ' + . '' . __('here', 'security-malware-firewall') . '.'; + $unknown_files_description .= $spbc->data['wl_mode_enabled'] ? '' : spbc__manual_cure_service_suggest_html('unknown'); + //cure log description $cure_log_description = '
          ' . __('These files were automatically cured. ', 'security-malware-firewall') . @@ -2811,7 +2914,7 @@ function spbc_field_scanner__show_accordion($direct_call = false) //set descritpions $tables_files = array( - 'critical' => __('These files may not contain malicious code but they use very dangerous PHP functions and constructions! PHP developers don\'t recommend to use it and it looks very suspicious.', 'security-malware-firewall'), + 'critical' => $critical_description, 'suspicious' => __('Found modified executable files', 'security-malware-firewall'), 'approved' => __('Approved files. When an approved file is added to the CleanTalk cloud, it will be removed from this list.', 'security-malware-firewall'), 'quarantined' => __('Punished files.', 'security-malware-firewall'), @@ -2820,15 +2923,7 @@ function spbc_field_scanner__show_accordion($direct_call = false) ); if ($spbc->settings['scanner__list_unknown']) { - $tables_files['unknown'] = __('These files do not include known malware signatures or dangerous code. In same time these files do not belong to the WordPress core or any plugin, theme which are hosted on wordpress.org.', 'security-malware-firewall') - . '
          ' - . __('To disable this list deactivate the', 'security-malware-firewall') - . ' ' - . __('List unknown files', 'security-malware-firewall') - . ' ' - . __('option', 'security-malware-firewall') - . ' ' - . '' . __('here', 'security-malware-firewall') . '.'; + $tables_files['unknown'] = $unknown_files_description; } if ($spbc->settings['scanner__outbound_links']) { @@ -3810,7 +3905,7 @@ function spbc_sanitize_settings($settings) ($settings['login_page_rename__send_email_notification'] && current_user_can('activate_plugins')) ) { $mail = wp_mail( - get_option('admin_email'), + spbc_get_admin_email(), $spbc->data["wl_brandname"] . esc_html__(': New login URL', 'security-malware-firewall'), sprintf( esc_html__('New login URL is: %s', 'security-malware-firewall'), @@ -3963,7 +4058,7 @@ function spbc_get_key_auto($direct_call = false) $wpms = SPBC_WPMS && defined('SUBDOMAIN_INSTALL') && ! SUBDOMAIN_INSTALL; $white_label = false; $hoster_api_key = $spbc->ms__hoster_api_key; - $admin_email = get_option('admin_email'); + $admin_email = spbc_get_admin_email(); /** * Filters the email to get API key @@ -4029,6 +4124,58 @@ function spbc_get_key_auto($direct_call = false) die(json_encode($out)); } +function spbc_settings__update_account_email($direct_call = false) +{ + if ( ! $direct_call) { + spbc_check_ajax_referer('spbc_secret_nonce', 'security'); + } + + global $spbc; + + $account_email = Post::get('accountEmail'); + + // not valid email + if (!$account_email || !filter_var(Post::get('accountEmail'), FILTER_VALIDATE_EMAIL)) { + die( + json_encode( + array( + 'error' => 'Please, enter valid email.' + ) + ) + ); + } + + // email not changed + if (isset($spbc->data['account_email']) && $account_email === $spbc->data['account_email']) { + die( + json_encode( + array( + 'success' => 'ok' + ) + ) + ); + } + + $spbc->data['account_email'] = $account_email; + $spbc->save('data'); + + // Link GET ACCESS KEY MANUALLY + $manually_link = sprintf( + 'https://cleantalk.org/register?platform=wordpress&email=%s&website=%s', + urlencode(spbc_get_admin_email()), + urlencode(get_bloginfo('url')) + ); + + die( + json_encode( + array( + 'success' => 'ok', + 'manuallyLink' => $manually_link + ) + ) + ); +} + function spbc_show_more_security_logs_callback() { spbc_check_ajax_referer('spbc_secret_nonce', 'security'); @@ -4283,6 +4430,10 @@ function spbc_settings__get_description() 'title' => 'Suspicious', 'desc' => __('The code looks suspicious. Make sure it is safe.', 'security-malware-firewall') ), + 'signatures_MALWARE' => array( + 'title' => 'Malware', + 'desc' => __('Malware has been found during the signature analysis.', 'security-malware-firewall') + ), 'heuristic_assert' => array( 'title' => 'assert()', 'desc' => __('Using the function in production is not recommended', 'security-malware-firewall') @@ -4331,6 +4482,14 @@ function spbc_settings__get_description() 'title' => 'syslog()', 'desc' => __('Generate a system log message', 'security-malware-firewall') ), + 'heuristic_global_variables_in_a_sys_command' => array( + 'title' => 'Super global in system command', + 'desc' => __('Found direct request to super global variables in the system commands functions.', 'security-malware-firewall') + ), + 'heuristic_base64_decode' => array( + 'title' => 'base64_decode()', + 'desc' => __('Suspicious base64_decode usage.', 'security-malware-firewall') + ), 'heuristic_the_function_contains_suspicious_arguments' => array( 'title' => '', 'desc' => __('The function contains suspicious arguments', 'security-malware-firewall') @@ -4346,13 +4505,15 @@ function spbc_settings__get_description() Disable this option if you have mail connection issues or SMTP service is not configured on this WordPress instance. Please note that only user that has permissions to activate plugins can disable this option.', 'security-malware-firewall'), ), + 'no_description' => array( + 'title' => esc_html($setting_id), + 'desc' => __('No description provided yet for this item. We are sorry about this. Please, contact support@cleantalk.org for further help.', 'security-malware-firewall'), + ), ); - if (!isset($descriptions[ $setting_id ])) { - return; - } + $out = isset($descriptions[ $setting_id ]) ? $descriptions[ $setting_id ] : $descriptions['no_description']; - wp_send_json($descriptions[ $setting_id ]); + wp_send_json($out); } /** @@ -4428,7 +4589,7 @@ function spbctGenerateAndSendConfirmationCode() if (isset($user->ID) && $user->ID > 0) { $email = $user->user_email; } else { - $email = get_option('admin_email'); + $email = spbc_get_admin_email(); } spbc_check_ajax_referer('spbc_secret_nonce', 'security'); @@ -4827,6 +4988,59 @@ function spbc__key_not_valid_tab_html() . '.
          '; } +/** + * Generate HTML code for accordions to suggest user manual audit services. + * @param $for string destination accordion name + * @return string html + */ +function spbc__manual_cure_service_suggest_html($for) +{ + if ($for === 'critical') { + $text = __('With a high degree of probability, your site has been infected. If you need professional help + from security specialists, feel free to order', 'security-malware-firewall'); + $button_id = 'spbct_request_cure'; + $classes = 'notice notice-warning'; + $show_exclaim_triangle = true; + } elseif ($for === 'unknown') { + $text = __('If you are not sure about the results or looking for professional help from security specialists, + feel free to order', 'security-malware-firewall'); + $button_id = 'spbct_request_audit'; + $classes = 'notice notice-info'; + $show_exclaim_triangle = false; + } else { + return ''; + } + + $cure_request_url = 'https://cleantalk.org/my/support/open'; + $help_href_text = __('the Professional Security Audit service', 'security-malware-firewall'); + $button_text = __('Request Professional Security Audit', 'security-malware-firewall'); + $href = '' . $help_href_text . ''; + + $out = '
          '; + $out .= '

          '; + // show triangle + $out .= $show_exclaim_triangle + ? 'attention ' + : ''; + // complete the suggestion text + $out .= $text . ' ' . $href . '.'; + $out .= '

          '; + // generate button + $out .= '
          '; + $out .= ' + '; + $out .= '
          '; + $out .= '
          '; + + return $out; +} + /** * @return int|void */ diff --git a/js/spbc-settings.min.js b/js/spbc-settings.min.js index 3912541c8..00b3c637b 100644 --- a/js/spbc-settings.min.js +++ b/js/spbc-settings.min.js @@ -1,2 +1,2 @@ -function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}String.prototype.printf=function(){var e,t=this;for(e in arguments)var s=t.substring(0,t.indexOf("%s",0)),c=t.substring(t.indexOf("%s",0)+2,t.length),t=s+arguments[e]+c;return t},jQuery(document).ready(function(){jQuery("#spbc_gdpr_open_modal").on("click",function(){jQuery("#gdpr_dialog").dialog({modal:!0,show:!0,position:{my:"center",at:"center",of:window},width:jQuery("#wpbody").width()/100*70,height:"auto",title:"GDPR compliance",draggable:!1,resizable:!1,closeText:"Close"})}),jQuery(document).on("click","[name*=fa__enable]:not([value=0]),#confirmation-code--resend",function(e){e.preventDefault(),jQuery("#confirmation-code--resend").attr("disabled","disabled").append('
          ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)})}); +function spbc_switchTab(e,t){var s=e.classList[1].replace("spbc_tab_nav-",""),c=new URLSearchParams(window.location.search),n=(c.set("spbc_tab",s),window.location.hash),n=window.location.pathname+"?"+c.toString()+n;if(history.replaceState(null,"",n),"backups"!==c.get("spbc_tab")&&jQuery(".spbc_tab_nav-backups").hide(),jQuery(".spbc_tab_nav").removeClass("spbc_tab_nav--active"),jQuery(".spbc_tab").removeClass("spbc_tab--active"),jQuery(e).addClass("spbc_tab_nav--active"),jQuery(".spbc_tab-"+s).addClass("spbc_tab--active"),jQuery(e).data("loaded")){if(t&&t.action)switch(t.action){case"highlight":spbcHighlightElement(t.target,t.times);break;case"click":setTimeout(function(){jQuery("#"+t.additional.target).click()},500)}}else{n={action:"spbc_settings__draw_elements",tab_name:s,security:spbcSettings.ajax_nonce},t={callback:spbc_draw_settings_callback,notJson:!0,additional:t||null};spbc_sendAJAXRequest(n,t,e)}}function spbc_draw_settings_callback(e,t,s,c){jQuery(c).data("loaded",!0),jQuery(".spbc_tab-"+t.tab_name).replaceWith(e);c=jQuery(".spbc_tab-"+t.tab_name);if(c.addClass("spbc_tab--active"),jQuery(document).off("click",".spbc_long_description__show"),jQuery(document).on("click",".spbc_long_description__show",function(){spbc_settings__show_description(self=jQuery(this),self.attr("setting"))}),jQuery(document).off("click",".spbc_long_recommendation__show"),jQuery(document).on("click",".spbc_long_recommendation__show",function(){spbc_settings__show_recommendation(self=jQuery(this),self.attr("setting"))}),s.additional)switch(s.additional.action){case"highlight":spbcHighlightElement(s.additional.target,s.additional.times);break;case"click":setTimeout(function(){jQuery("#"+s.additional.target).click()},500)}jQuery(c).on("click",".spbc_hint-send_"+t.tab_name,function(){jQuery(".spbc_hint-send_"+t.tab_name).hide(),spbc_sendAJAXRequest({action:"spbc_send_"+t.tab_name,tab_name:t.tab_name},{callback:spbc_send_logs_callback})}),window.location.hash&&document.getElementById(window.location.hash.substring(1)).scrollIntoView()}function spbc_send_logs_callback(e,t,s,c){jQuery(".spbc_tab_nav-"+t.tab_name).data("loaded",!1),spbc_switchTab(document.getElementsByClassName("spbc_tab_nav-"+t.tab_name)[0])}function spbcSettingsDependenciesbyId(e,o){"string"==typeof e&&((tmp=[]).push(e),e=tmp),o=void 0===o?null:+o,e.forEach(function(e,t,s){function c(){a.setAttribute("disabled","disabled")}function n(){a.removeAttribute("disabled")}var a=document.getElementById("spbc_setting_"+e);(null!==o?1===o?n:c:null===a.getAttribute("disabled")?c:n)()})}function spbcSettingsDependencies(e,o){e="string"==typeof e?e.split(","):e,o=void 0===o?+event.target.checked:+o,e.forEach(function(e,t,s){document.getElementsByName("spbc_settings["+e+"]").forEach(function(e,t,s){function c(){e.setAttribute("disabled","disabled")}function n(){e.removeAttribute("disabled")}(null!==o?1===o?n:c:null===e.getAttribute("disabled")?c:n)();var a=e.getAttribute("children");null!==a&&spbcSettingsDependencies(a,o&&e.checked)})})}function spbc_settings__show_description(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_description__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_description",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbc_settings__show_recommendation(e,t){function n(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_long_desc").length&&!jQuery(e.target).hasClass("spbc_long_desc__cancel")||jQuery(e.target).hasClass("spbc_long_recommendation__show"))||(jQuery(".spbc_long_desc").remove(),jQuery(document).off("click",n))}n(),e.after("
          ");var s=jQuery("#spbc_long_desc__"+t);s.append("").append("
          ").css({top:e.position().top+25,left:e.position().left+5}),spbc_sendAJAXRequest({action:"spbc_settings__get_recommendation",setting_id:t},{spinner:s.children("img"),callback:function(e,t,s,c){c.empty().append("
          ").append("").append("

          "+e.title+"

          ").append("

          "+e.desc+"

          "),jQuery(document).on("click",n)}},s)}function spbcStartShowHide(){jQuery(".spbcShortText").off("mouseover").on("mouseover",function(){jQuery(this).next().show()}).off("mouseout").on("mouseout",function(){jQuery(this).next().hide()}),jQuery(".spbcFullText").off("mouseout").on("mouseout",function(){jQuery(this).hide()}).off("mouseover").on("mouseover",function(){jQuery(this).show()})}function spbctGenerateConfirmationCode(){var e={},t={success:!1};return e.security=spbcSettings.ajax_nonce,e.action="spbc_generate_confirmation_code",jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?t.success=!0:t.text=e.data}}),t}function spbctCheckConfirmationCode(e,t,s){var c=e,e={};e.security=spbcSettings.ajax_nonce,e.action="spbc_check_confirmation_code",e.code=jQuery("#confirmation-code input").val(),jQuery.ajax({type:"POST",async:!1,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success?(jQuery("[name *= 2fa__enable]").attr("checked",""),c.checked=!0,jQuery("#spbc_setting_2fa__roles").removeAttr("disabled"),jQuery("#spbc_setting_2fa__roles > option:first").attr("selected","selected"),clearTimeout(t),s.remove(),jQuery("#confirmation-code").dialog("close")):alert("Code verification failed!")}})}function spbc_banner_check(){var n=setInterval(function(){spbc_sendAJAXRequest({action:"spbc_settings__check_renew_banner"},{callback:function(e,t,s,c){e.close_renew_banner&&(jQuery("#spbc_renew_notice").length&&jQuery("#spbc_renew_notice").hide("slow"),jQuery("#spbc_trial_notice").length&&jQuery("#spbc_trial_notice").hide("slow"),clearInterval(n))}})},6e4)}function spbcToggleClass(t,s){for(let e=0;e
          ');var t=setTimeout(function(){jQuery("#confirmation-code--resend").removeAttr("disabled"),jQuery("#confirmation-code--resend>.circle").remove()},3e4),s=spbctGenerateConfirmationCode();s.success?(jQuery("#confirmation-code input").val(""),jQuery("#confirmation-code").dialog({modal:!0,title:"Confirmation code",width:310,buttons:{Cancel:function(){jQuery(this).dialog("close"),clearTimeout(t),jQuery("#confirmation-code--resend>.circle").remove()},Ok:function(){spbctCheckConfirmationCode(e.target,t,jQuery("#confirmation-code--resend>.circle"))}},draggable:!1,resizable:!1})):alert(s.text)}),(jQuery("#spbc_renew_notice").length||jQuery("#spbc_trial_notice").length)&&spbc_banner_check(),jQuery("#spbc_button__sync").on("click",function(){spbc_sendAJAXRequest({action:"spbc_sync"},{timeout:25e3,button:document.getElementById("spbc_button__sync"),spinner:jQuery("#spbc_button__sync .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_button__sync .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_button__sync .spbc_success").hide(300)},2e3),e.reload&&document.location.reload()}})}),spbcSettings.key_changed&&jQuery("#spbc_button__sync").click(),jQuery(document).on("click","#spbc_setting_get_key_auto",function(){spbc_sendAJAXRequest({action:"spbc_get_key_auto"},{timeout:25e3,button:document.getElementById("spbc_setting_get_key_auto"),spinner:jQuery("#spbc_setting_get_key_auto .spbc_preloader_button"),callback:function(e,t,s,c){jQuery("#spbc_setting_get_key_auto .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_setting_get_key_auto .spbc_success").hide(300)},2e3),e.reload&&document.location.reload(),e.getTemplates&&(spbcModal.loaded=e.getTemplates,spbcModal.open(),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}))}})}),jQuery(document).on("click","#spbc_settings_templates_import_button",function(){jQuery("#spbc-ajax-result").remove();var n,e=jQuery("option:selected",jQuery("#spbc_settings_templates_import"));jQuery("#spbc_settings_templates_import_name").css("border-color","inherit"),void 0===e.data("id")?console.log('Attribute "data-id" not set for the option.'):(e={template_id:e.data("id"),template_name:e.data("name"),settings:e.data("settings")},n=this,spbc_sendAJAXRequest({action:"spbc_settings_templates_import",data:e},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_import_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_import_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_import_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}}))}),jQuery(document).on("click","#spbc_settings_templates_export_button",function(){jQuery("#spbc-ajax-result").remove();var e=jQuery("option:selected",jQuery("#spbc_settings_templates_export")),t=jQuery("#spbc_settings_templates_export_name");if(t.css("border-color","inherit"),void 0===e.data("id"))console.log('Attribute "data-id" not set for the option.');else{if("new_template"===e.data("id")){var s=t.val();if(""===s)return void t.css("border-color","red");s={template_name:s}}else s={template_id:e.data("id")};var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_export",data:s},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_export_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_export_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_export_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}}),jQuery(document).on("click","#spbc_settings_templates_reset_button",function(){var n=this;spbc_sendAJAXRequest({action:"spbc_settings_templates_reset"},{timeout:25e3,button:n,spinner:jQuery("#spbc_settings_templates_reset_button .spbc_preloader_button"),callback:function(e,t,s,c){e.success?(jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n)),jQuery("#spbc_settings_templates_reset_button .spbc_success").show(300),setTimeout(function(){jQuery("#spbc_settings_templates_reset_button .spbc_success").hide(300)},2e3),document.addEventListener("spbcModalClosed",function(e){document.location.reload()}),setTimeout(function(){spbcModal.close()},2e3)):jQuery("

          "+e.data+"

          ").insertAfter(jQuery(n))}})}),jQuery(document).on("change","#spbc_settings_templates_export",function(){"new_template"===jQuery("option:selected",this).data("id")?jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").show():jQuery(this).parent().parent().find("#spbc_settings_templates_export_name").hide()}),jQuery(".spbc_tab_nav-summary").data("loaded",!0),jQuery(".spbc_tabs_nav_wrapper").on("click",".spbc_tab_nav",function(e){spbc_switchTab(e.currentTarget)});var e={target:location.search.match(/spbc_target=(\S*?)(&|$)/)?location.search.match(/spbc_target=(\S*?)(&|$)/)[1]:null,action:location.search.match(/spbc_action=(\S*?)(&|$)/)?location.search.match(/spbc_action=(\S*?)(&|$)/)[1]:null,times:location.search.match(/spbc_times=(\S*?)(&|$)/)?location.search.match(/spbc_times=(\S*?)(&|$)/)[1]:3},t=(e.target=location.search.match(/spbc_highlight=(\S*?)(&|$)/)?location.search.match(/spbc_highlight=(\S*?)(&|$)/)[1]:e.target,e.action=-1!=location.search.search(/spbc_highlight=(\S*?)(&|$)/)?"highlight":e.action,document.getElementsByClassName("spbc_tab_nav-"+(location.search.match(/spbc_tab=(\S*?)(&|$)/)?location.search.match(/spbc_tab=(\S*?)(&|$)/)[1]:""))[0]||null),s=(t||(+spbcSettings.debug?t=document.getElementsByClassName("spbc_tab_nav-debug")[0]:+spbcSettings.wpms&&!+spbcSettings.is_main_site?t=document.getElementsByClassName("spbc_tab_nav-security_log")[0]:+spbcSettings.key_is_ok&&+spbcSettings.secfw_enabled?t=document.getElementsByClassName("spbc_tab_nav-traffic_control")[0]:+spbcSettings.key_is_ok?t=document.getElementsByClassName("spbc_tab_nav-scanner")[0]:(t=document.getElementsByClassName("spbc_tab_nav-settings_general")[0],e={target:"spbc_key",action:"highlight",times:3})),t&&spbc_switchTab(t,e),!1);jQuery(document).on("keyup",function(e){17==(e.which||e.keyCode)&&(s=!1)}),jQuery(document).on("keydown",function(e){var t;116==(e.which||e.keyCode)&&s?(e.preventDefault(),"scanner"!==(t=jQuery(".spbc_tab_nav--active")[0]).classList[1].replace("spbc_tab_nav-","")&&(jQuery(t).data("loaded",!1),spbc_switchTab(t))):17==(e.which||e.keyCode)&&(s=!0)}),jQuery(document).on("click","#spbc-change-account-email",function(e){e.preventDefault();var e=jQuery(this),t=jQuery("#spbc-account-email"),s=t.text();spbcToggleClass(e,"active"),e.hasClass("active")?(e.text(e.data("save-text")),t.attr("contenteditable","true"),t.focus(),t.on("keydown",function(e){"Enter"===e.code&&e.preventDefault()}),t.on("input",function(e){"insertParagraph"===e.inputType&&e.preventDefault()})):(spbc_sendAJAXRequest({action:"spbc_update_account_email",accountEmail:s},{timeout:5e3,callback:function(e,t,s,c){void 0!==e.success&&"ok"===e.success&&void 0!==e.manuallyLink&&jQuery("#spbc-key-manually-link").attr("href",e.manuallyLink),void 0!==e.error&&jQuery("#spbc-account-email").css("border-color","red")},errorOutput:function(e){spbcModal.loaded=e,spbcModal.open()}}),t.attr("contenteditable","false"),e.text(e.data("default-text")))})}); //# sourceMappingURL=spbc-settings.min.js.map diff --git a/js/spbc-settings.min.js.map b/js/spbc-settings.min.js.map index 3aff6c443..12a53ca5f 100644 --- a/js/spbc-settings.min.js.map +++ b/js/spbc-settings.min.js.map @@ -1 +1 @@ -{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
          ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n});"],"names":["spbc_switchTab","tab","params","tab_name","classList","replace","searchParams","URLSearchParams","window","location","search","hashParam","set","hash","newRelativePathQuery","pathname","toString","history","replaceState","get","jQuery","hide","removeClass","addClass","data","action","spbcHighlightElement","target","times","setTimeout","additional","click","security","spbcSettings","ajax_nonce","callback","spbc_draw_settings_callback","notJson","spbc_sendAJAXRequest","result","obj","replaceWith","document","off","on","spbc_settings__show_description","self","this","attr","spbc_settings__show_recommendation","spbc_send_logs_callback","getElementById","substring","scrollIntoView","getElementsByClassName","spbcSettingsDependenciesbyId","settingsIDs","enable","tmp","push","forEach","settingID","i","arr","do_disable","elem","setAttribute","do_enable","removeAttribute","getAttribute","spbcSettingsDependencies","settingNames","split","event","checked","settingName","getElementsByName","children","label","setting_id","remove_desc_func","e","parent","length","hasClass","remove","after","append","css","top","position","left","spinner","empty","title","desc","remove_recommendation_func","spbcStartShowHide","next","show","spbctGenerateConfirmationCode","res","success","ajax","type","async","url","ajaxurl","text","spbctCheckConfirmationCode","radioButton","timeout","timer","element","code","val","removeAttr","clearTimeout","dialog","alert","spbc_banner_check","bannerChecker","setInterval","close_renew_banner","clearInterval","String","prototype","printf","arg","formatted","arguments","before_formatted","indexOf","after_formatted","ready","modal","my","at","of","width","height","draggable","resizable","closeText","preventDefault","enableResend","buttons","Cancel","Ok","button","reload","key_changed","getTemplates","spbcModal","loaded","open","addEventListener","optionSelected","console","log","template_id","template_name","settings","insertAfter","close","templateNameInput","templateName","find","currentTarget","match","spbc_tab","ctrlKeyDown","debug","wpms","is_main_site","key_is_ok","secfw_enabled","which","keyCode","active_tab"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings.min.js","sources":["spbc-settings.js"],"sourcesContent":["// Printf for JS\nString.prototype.printf = function(){\n var formatted = this;\n for( var arg in arguments ) {\n var before_formatted = formatted.substring(0, formatted.indexOf(\"%s\", 0));\n var after_formatted = formatted.substring(formatted.indexOf(\"%s\", 0)+2, formatted.length);\n formatted = before_formatted + arguments[arg] + after_formatted;\n }\n return formatted;\n};\n\n// Switching tabs\nfunction spbc_switchTab(tab, params){\n\n\tvar tab_name = tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t// update url \n\tvar searchParams = new URLSearchParams(window.location.search)\n searchParams.set(\"spbc_tab\", tab_name);\n\tvar hashParam = window.location.hash;\n var newRelativePathQuery = window.location.pathname + '?' + searchParams.toString() + hashParam;\n\n history.replaceState(null, '', newRelativePathQuery);\n\n\t// Hiding a tab 'Backups' if exist\n if(searchParams.get('spbc_tab') !== 'backups') {\n \tjQuery('.spbc_tab_nav-backups').hide();\n }\n\n // update active tab\n\tjQuery('.spbc_tab_nav').removeClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab').removeClass('spbc_tab--active');\n\tjQuery(tab).addClass('spbc_tab_nav--active');\n\tjQuery('.spbc_tab-'+tab_name).addClass('spbc_tab--active');\n\n\tif(!jQuery(tab).data('loaded')){\n\t\tvar data = {\n\t\t\taction: 'spbc_settings__draw_elements',\n\t\t\ttab_name: tab_name,\n\t\t\tsecurity: spbcSettings.ajax_nonce\n\t\t};\n\t\tvar params = {\n\t\t\tcallback: spbc_draw_settings_callback,\n\t\t\tnotJson: true,\n additional: params || null,\n\t\t};\n\t\tspbc_sendAJAXRequest( data, params, tab );\n\t}else if(params && params.action){\n switch (params.action){\n case 'highlight':\n spbcHighlightElement(params.target, params.times);\n break;\n case 'click':\n setTimeout(function(){\n jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n\t}\n}\n\nfunction spbc_draw_settings_callback(result, data, params, obj){\n\n\tjQuery(obj).data('loaded', true);\n\tjQuery('.spbc_tab-'+data.tab_name).replaceWith(result);\n\tvar tab = jQuery('.spbc_tab-'+data.tab_name);\n\ttab.addClass('spbc_tab--active');\n\n\tjQuery(document).off( 'click', '.spbc_long_description__show');\n\tjQuery(document).on('click', '.spbc_long_description__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_description(self, self.attr('setting'));\n\t});\n\n\tjQuery(document).off( 'click', '.spbc_long_recommendation__show');\n\tjQuery(document).on('click', '.spbc_long_recommendation__show', function(){\n\t\tself = jQuery(this);\n\t\tspbc_settings__show_recommendation(self, self.attr('setting'));\n\t});\n\n\tif(params.additional){\n\t switch (params.additional.action) {\n case 'highlight':\n\t\t spbcHighlightElement(params.additional.target, params.additional.times);\n break;\n case 'click':\n setTimeout(function(){\n\t\t jQuery('#'+params.additional.target).click();\n }, 500);\n break;\n }\n }\n\n\tjQuery(tab).on('click', '.spbc_hint-send_'+data.tab_name, function(){\n\t\t\tjQuery('.spbc_hint-send_'+data.tab_name).hide();\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_send_'+data.tab_name, tab_name: data.tab_name},\n\t\t\t{callback: spbc_send_logs_callback}\n\t\t);\n\t});\n\n\t// scroll to anchor\n\tif (window.location.hash) {\n\t\tdocument.getElementById(window.location.hash.substring(1)).scrollIntoView();\n\t}\n}\n\nfunction spbc_send_logs_callback(result, data, params, obj){\n\tjQuery('.spbc_tab_nav-'+data.tab_name).data('loaded', false);\n\tspbc_switchTab(document.getElementsByClassName('spbc_tab_nav-'+data.tab_name)[0]);\n}\n\n// Settings dependences\nfunction spbcSettingsDependenciesbyId(settingsIDs, enable){\n\n\tif(typeof settingsIDs === 'string'){\n\t\ttmp = [];\n\t\ttmp.push(settingsIDs);\n\t\tsettingsIDs = tmp;\n\t}\n\n\tenable = typeof enable === 'undefined' ? null : +enable;\n\n\tsettingsIDs.forEach(function(settingID, i, arr){\n\n\t\tvar elem = document.getElementById('spbc_setting_'+settingID),\n do_disable = function(){elem.setAttribute('disabled', 'disabled');},\n do_enable = function(){elem.removeAttribute('disabled');};\n\n if(enable !== null) // Set\n enable === 1 ? do_enable() : do_disable();\n else // Switch\n elem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t});\n}\n\n/**\n * Recursive in case children found!\n *\n * Settings dependencies\n *\n */\nfunction spbcSettingsDependencies(settingNames, enable){\n\n\t// Cast settingNames to array\n\tsettingNames = typeof settingNames === 'string' ? settingNames.split(',') : settingNames;\n\tenable = typeof enable === 'undefined' ? +event.target.checked : +enable;\n\n\tsettingNames.forEach(function(settingName, i, arr){\n\n\t\tdocument.getElementsByName('spbc_settings['+settingName+']')\n\t\t\t.forEach(function( elem, i, arr ){\n\n\t\t\t\tvar\tdo_disable = function(){elem.setAttribute('disabled', 'disabled');},\n\t\t\t\t\tdo_enable = function(){elem.removeAttribute('disabled');};\n\t\t\t\tif(enable !== null) // Set\n\t\t\t\t\tenable === 1 ? do_enable() : do_disable();\n\t\t\t\telse // Switch\n\t\t\t\t\telem.getAttribute('disabled') === null ? do_disable() : do_enable();\n\n\t\t\t\tvar children = elem.getAttribute('children');\n\t\t\t\tif( children !== null ){\n\t\t\t\t\tspbcSettingsDependencies(children, enable && elem.checked);\n\t\t\t\t}\n\t\t\t});\n\t});\n}\n\nfunction spbc_settings__show_description(label, setting_id){\n\t\n\tvar remove_desc_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_description__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\t\n\tremove_desc_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_description', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_desc_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\nfunction spbc_settings__show_recommendation(label, setting_id){\n\t\n\tvar remove_recommendation_func = function(e){\n\t\tif(typeof e === 'undefined' || ((jQuery(e.target).parent('.spbc_long_desc').length == 0 || jQuery(e.target).hasClass('spbc_long_desc__cancel')) && !jQuery(e.target).hasClass('spbc_long_recommendation__show'))){\n\t\t\tjQuery('.spbc_long_desc').remove();\n\t\t\tjQuery(document).off('click', remove_recommendation_func);\n\t\t}\n\t};\n\t\n\tremove_recommendation_func();\n\t\n\tlabel.after(\"
          \");\n\tvar obj = jQuery('#spbc_long_desc__'+setting_id);\n\tobj.append(\"\")\n\t\t.append(\"
          \")\n\t\t.css({\n\t\t\ttop: label.position().top + 25,\n\t\t\tleft: label.position().left + 5\n\t\t});\n\n\t\n\tspbc_sendAJAXRequest(\n\t\t{action: 'spbc_settings__get_recommendation', setting_id: setting_id},\n\t\t{\n\t\t\tspinner: obj.children('img'),\n\t\t\tcallback: function(result, data, params, obj){\n\n\t\t\t\tobj.empty()\n\t\t\t\t\t.append(\"
          \")\n\t\t\t\t\t.append(\"\")\n\t\t\t\t\t.append(\"

          \"+result.title+\"

          \")\n\t\t\t\t\t.append(\"

          \"+result.desc+\"

          \");\n\n\t\t\t\tjQuery(document).on('click', remove_recommendation_func);\n\t\t\t}\n\t\t},\n\t\tobj\n\t);\n}\n\n// Shows/hides full text\nfunction spbcStartShowHide(){\n\tjQuery('.spbcShortText')\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).next().show(); })\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).next().hide(); });\n\tjQuery('.spbcFullText')\n\t\t.off('mouseout' )\n\t\t.on('mouseout', function(){ jQuery(this).hide(); })\n\t\t.off('mouseover' )\n\t\t.on('mouseover', function(){ jQuery(this).show(); })\n}\n\n// Generate and save confirmation code\nfunction spbctGenerateConfirmationCode() {\n\n\tvar data = {};\n\tvar res = {};\n\tres.success = false;\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_generate_confirmation_code';\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tres.success = true;\n\t\t\t} else {\n\t\t\t\tres.text = result.data;\n\t\t\t}\n\t\t},\n\t});\n\treturn res;\n}\n// Check confirmation code\nfunction spbctCheckConfirmationCode( radioButton, timeout, timer ) {\n\n\tvar element = radioButton;\n\tvar data = {};\n\tdata.security = spbcSettings.ajax_nonce;\n\tdata.action = 'spbc_check_confirmation_code';\n\tdata.code = jQuery('#confirmation-code input').val();\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: false,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result){\n\t\t\tif(result.success) {\n\t\t\t\tjQuery('[name *= 2fa__enable]').attr(\"checked\", \"\");\n\t\t\t\telement.checked = true;\n\t\t\t\tjQuery('#spbc_setting_2fa__roles').removeAttr('disabled');\n\t\t\t\tjQuery('#spbc_setting_2fa__roles > option:first').attr('selected','selected');\n\t\t\t\tclearTimeout( timeout );\n\t\t\t\ttimer.remove();\n\t\t\t\tjQuery('#confirmation-code').dialog( \"close\" );\n\t\t\t} else {\n\t\t\t\talert('Code verification failed!');\n\t\t\t}\n\t\t},\n\t});\n\n}\n\n/**\n * Checking current account status for renew notice\n */\nfunction spbc_banner_check() {\n\tvar bannerChecker = setInterval( function() {\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings__check_renew_banner'},\n\t\t\t{\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif (result.close_renew_banner) {\n\t\t\t\t\t\tif (jQuery('#spbc_renew_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_renew_notice').hide('slow');\n\t\t\t\t\t\tif (jQuery('#spbc_trial_notice').length)\n\t\t\t\t\t\t\tjQuery('#spbc_trial_notice').hide('slow');\n\t\t\t\t\t\tclearInterval(bannerChecker);\n\t\t\t\t\t}\t\t\t\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}, 60000);\n}\n\njQuery(document).ready(function(){\n\t\n\tjQuery('#spbc_gdpr_open_modal').on('click', function(){\n\t\tjQuery('#gdpr_dialog').dialog({\n\t\t\tmodal:true, \n\t\t\tshow: true,\n\t\t\tposition: { my: \"center\", at: \"center\", of: window },\n\t\t\twidth: +(jQuery('#wpbody').width() / 100 * 70), // 70% of #wpbody\n\t\t\theight: 'auto',\n\t\t\ttitle: 'GDPR compliance',\n\t\t\tdraggable: false,\n\t\t\tresizable: false,\n\t\t\tcloseText: \"Close\",\n\t\t});\n\t});\n\n\t// Checking email receiving possibility for activation 2FA\n\tjQuery(document).on('click', '[name*=fa__enable]:not([value=0]),#confirmation-code--resend', function(e){\n\n\t\te.preventDefault();\n\n\t\tjQuery('#confirmation-code--resend').attr('disabled', 'disabled')\n\t\t\t.append('
          ');\n\t\tvar enableResend = setTimeout(function(){\n\t\t\tjQuery('#confirmation-code--resend').removeAttr('disabled');\n\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t}, 30000);\n\n\t\tvar res = spbctGenerateConfirmationCode();\n\t\tif( res.success ) {\n\t\t\tjQuery('#confirmation-code input').val('');\n\t\t\tjQuery('#confirmation-code').dialog({\n\t\t\t\tmodal: true,\n\t\t\t\ttitle: 'Confirmation code',\n\t\t\t\twidth: 310,\n\t\t\t\tbuttons: {\n\t\t\t\t\tCancel: function() {\n\t\t\t\t\t\tjQuery( this ).dialog( \"close\" );\n\t\t\t\t\t\tclearTimeout( enableResend );\n\t\t\t\t\t\tjQuery('#confirmation-code--resend>.circle').remove();\n\t\t\t\t\t},\n\t\t\t\t\tOk: function() {\n\t\t\t\t\t\tspbctCheckConfirmationCode(e.target, enableResend, jQuery('#confirmation-code--resend>.circle'));\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tdraggable: false,\n\t\t\t\tresizable: false,\n\t\t\t});\n\t\t} else {\n\t\t\talert(res.text);\n\t\t}\n\t});\n\t\n\tif (jQuery('#spbc_renew_notice').length || jQuery('#spbc_trial_notice').length) {\n\t\tspbc_banner_check();\n\t}\n\n\t// Sync button\n\tjQuery('#spbc_button__sync').on('click', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_sync'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_button__sync' ),\n\t\t\t\tspinner: jQuery('#spbc_button__sync .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_button__sync .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_button__sync .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tif( spbcSettings.key_changed ){\n\t\tjQuery('#spbc_button__sync').click();\n\t}\n\n\t// Get Key Auto button\n\tjQuery(document).on('click', '#spbc_setting_get_key_auto', function(){\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_get_key_auto'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: document.getElementById('spbc_setting_get_key_auto' ),\n\t\t\t\tspinner: jQuery('#spbc_setting_get_key_auto .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tjQuery('#spbc_setting_get_key_auto .spbc_success').show(300);\n\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_setting_get_key_auto .spbc_success').hide(300);}, 2000);\n\t\t\t\t\tif(result.reload)\n\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\tif(result.getTemplates) {\n\t\t\t\t\t\tspbcModal.loaded = result.getTemplates;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Import settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_import_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_import'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_import_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tvar data = {\n\t\t\t'template_id' : optionSelected.data('id'),\n\t\t\t'template_name' : optionSelected.data('name'),\n\t\t\t'settings' : optionSelected.data('settings')\n\t\t};\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_import', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_import_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_import_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_import_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Export settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_export_button', function(){\n\t\tjQuery('#spbc-ajax-result').remove();\n\t\tvar optionSelected = jQuery('option:selected', jQuery('#spbc_settings_templates_export'));\n\t\tvar templateNameInput = jQuery('#spbc_settings_templates_export_name');\n\t\ttemplateNameInput.css('border-color', 'inherit');\n\t\tif( typeof optionSelected.data('id') === \"undefined\" ) {\n\t\t\tconsole.log( 'Attribute \"data-id\" not set for the option.' );\n\t\t\treturn;\n\t\t}\n\t\tif( optionSelected.data('id') === 'new_template' ) {\n\t\t\tvar templateName = templateNameInput.val();\n\t\t\tif( templateName === '' ) {\n\t\t\t\ttemplateNameInput.css('border-color', 'red');\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\t'template_name' : templateName\n\t\t\t}\n\t\t} else {\n\t\t\tvar data = {\n\t\t\t\t'template_id' : optionSelected.data('id')\n\t\t\t}\n\t\t}\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_export', data: data},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_export_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_export_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_export_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\t// Reset settings\n\tjQuery( document ).on('click', '#spbc_settings_templates_reset_button', function(){\n\t\tvar button = this;\n\t\tspbc_sendAJAXRequest(\n\t\t\t{action: 'spbc_settings_templates_reset'},\n\t\t\t{\n\t\t\t\ttimeout: 25000,\n\t\t\t\tbutton: button,\n\t\t\t\tspinner: jQuery('#spbc_settings_templates_reset_button .spbc_preloader_button' ),\n\t\t\t\tcallback: function(result, data, params, obj){\n\t\t\t\t\tif(result.success) {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t\tjQuery('#spbc_settings_templates_reset_button .spbc_success').show(300);\n\t\t\t\t\t\tsetTimeout(function(){jQuery('#spbc_settings_templates_reset_button .spbc_success').hide(300);}, 2000);\n\t\t\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\t\t\tdocument.location.reload();\n\t\t\t\t\t\t});\n\t\t\t\t\t\tsetTimeout(function(){spbcModal.close()}, 2000);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjQuery( \"

          \" + result.data + \"

          \" ).insertAfter( jQuery(button) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\tjQuery(document).on('change', '#spbc_settings_templates_export',function(){\n\t\tvar optionSelected = jQuery(\"option:selected\", this);\n\t\tif ( optionSelected.data(\"id\") === 'new_template' ) {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').show();\n\t\t} else {\n\t\t\tjQuery(this).parent().parent().find('#spbc_settings_templates_export_name').hide();\n\t\t}\n\t});\n\n\t//* TAB_CONTROL\n\t\n\t\tjQuery('.spbc_tab_nav-summary').data('loaded', true); // Summary tab loaded by default\n\t\tjQuery('.spbc_tabs_nav_wrapper').on('click', '.spbc_tab_nav', function(event){\n\t\t\tspbc_switchTab(event.currentTarget);\n\t\t});\n\t\t\n\t\t// Get additional params\n var params = {\n target: location.search.match(/spbc_target=(\\S*?)(&|$)/) ? location.search.match(/spbc_target=(\\S*?)(&|$)/)[1] : null,\n action: location.search.match(/spbc_action=(\\S*?)(&|$)/) ? location.search.match(/spbc_action=(\\S*?)(&|$)/)[1] : null,\n times: location.search.match(/spbc_times=(\\S*?)(&|$)/) ? location.search.match(/spbc_times=(\\S*?)(&|$)/)[1] : 3,\n };\n // Legacy support\n params.target = location.search.match(/spbc_highlight=(\\S*?)(&|$)/) ? location.search.match(/spbc_highlight=(\\S*?)(&|$)/)[1] : params.target;\n params.action = location.search.search(/spbc_highlight=(\\S*?)(&|$)/) != -1\n ? 'highlight'\n : params.action;\n\n\t\t// Get open tab form query\n\t\tvar spbc_tab = document.getElementsByClassName('spbc_tab_nav-' + (location.search.match(/spbc_tab=(\\S*?)(&|$)/) ? location.search.match(/spbc_tab=(\\S*?)(&|$)/)[1] : ''))[0] || null;\n\n\t\t// TAB SWITCHING\n\t\t// Switch by URL\n\t\tif(spbc_tab){\n\n\t\t// Switch to DEBUG\n\t\t}else if( +spbcSettings.debug ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-debug')[0];\n\t\t// Switch by DEFAULT\n\t\t}else if( +spbcSettings.wpms && !+spbcSettings.is_main_site){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-security_log')[0];\n\t\t// Switch if Key is OK and SFW is ON\n\t\t}else if( +spbcSettings.key_is_ok && +spbcSettings.secfw_enabled ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-traffic_control')[0];\n\t\t// Switch if Key is OK\n\t\t}else if( +spbcSettings.key_is_ok ){\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-scanner')[0];\n\t\t// Switch if KEY IS BAD\n\t\t}else{\n\t\t\tspbc_tab = document.getElementsByClassName('spbc_tab_nav-settings_general')[0];\n\t\t\tparams = {\n\t\t\t target: 'spbc_key',\n action: 'highlight',\n times: 3,\n };\n\t\t}\n\t\t\n\t\t// Switch tab\n\t\tif(spbc_tab) spbc_switchTab(spbc_tab, params);\n\t\t\n\t//*/ TAB_CONROL END\n\t\n\t//* REFRESH TAB IF ctrl+F5\n\tvar ctrlKeyDown = false;\n\n\tjQuery(document).on(\"keyup\", function(e) {\n\t\tif ((e.which || e.keyCode) == 17) ctrlKeyDown = false;\n\t});\n\n\tjQuery(document).on(\"keydown\", function(e) {\n\t\tif (((e.which || e.keyCode) == 116) && ctrlKeyDown) {\n\t\t\te.preventDefault();\n\n\t\t\tvar active_tab = jQuery('.spbc_tab_nav--active')[0];\n\t\t\tvar tab_name = active_tab.classList[1].replace('spbc_tab_nav-', '');\n\n\t\t\tif (tab_name === 'scanner') return; \n\n\t\t\tjQuery(active_tab).data('loaded', false);\n\n\t\t\tspbc_switchTab(active_tab);\n\n\t\t} else if ((e.which || e.keyCode) == 17) {\n\t ctrlKeyDown = true;\n\t }\n\t});\n\t//*/ REFRESH TAB IF ctrl+F5 END\n\n\t/**\n * Change cleantalk account email\n */\n jQuery(document).on('click', '#spbc-change-account-email', function(e) {\n e.preventDefault();\n\n let $this = jQuery(this);\n let accountEmailField = jQuery('#spbc-account-email');\n let accountEmail = accountEmailField.text();\n\n\t\tspbcToggleClass($this, 'active');\n\n if ($this.hasClass('active')) {\n $this.text($this.data('save-text'));\n accountEmailField.attr('contenteditable', 'true');\n\t\t\taccountEmailField.focus();\n accountEmailField.on('keydown', function(e) {\n if (e.code === 'Enter') {\n e.preventDefault();\n }\n });\n accountEmailField.on('input', function(e) {\n if (e.inputType === 'insertParagraph') {\n e.preventDefault();\n }\n });\n } else {\n spbc_sendAJAXRequest(\n {\n action: 'spbc_update_account_email',\n accountEmail: accountEmail,\n },\n {\n timeout: 5000,\n callback: function(result, data, params, obj) {\n if (result.success !== undefined && result.success === 'ok') {\n if (result.manuallyLink !== undefined) {\n jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink);\n }\n }\n\n if (result.error !== undefined) {\n\t\t\t\t\t\t\n jQuery('#spbc-account-email').css('border-color', 'red');\n }\n },\n\t\t\t\t\terrorOutput: function(msg) {\n\t\t\t\t\t\tspbcModal.loaded = msg;\n\t\t\t\t\t\tspbcModal.open();\n\t\t\t\t\t}\n },\n );\n\n accountEmailField.attr('contenteditable', 'false');\n $this.text($this.data('default-text'));\n }\n });\n});\n\n/**\n * @param {string} className\n */\nfunction spbcToggleClass(arr, className) {\n\tfor (let i=0; i"),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
          ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

          "+t+"

          ").append("

          "+o+"

          "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
          %s

          %s


          '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o%s

          %s


          ':a).printf(e,s.file[e]));jQuery("#spbc_dialog").append(a.printf("",""))}jQuery("#spbc_dialog div").last().remove();let i=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,p=document.documentElement.clientHeight/100*75,l=i{};if(1==o.success){console.log(o);var n,a='
          %s

          %s


          ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
          %s

          %s


          ':a,s=l&&!o.file[t].includes("iframe")?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
          %s
          '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

          %s

          %s

          %s


          ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
        • ${o.created_at}
        • `;e=`
            +function spbc_popup_tip___show(e){function s(e){void 0!==e&&(0!=jQuery(e.target).parent(".spbc_popup_tip--wrapper").length&&!jQuery(e.target).hasClass("spbc_popup_tip--icon---cancel")||jQuery(e.target).hasClass("spbc_popup_tip--icon---show"))||(jQuery(".spbc_popup_tip--wrapper").hide(),jQuery(document).off("click",s))}var t=e.attr("spbc_tip_title")||null,o=e.attr("spbc_tip_text")||null,n=(s(),e.after("
            "),jQuery(".spbc_popup_tip--wrapper"));n.empty().append("
            ").css({top:e.position().top-2,left:e.position().left+25}),n.append("").append("

            "+t+"

            ").append("

            "+o+"

            "),jQuery(document).on("click",s),e.parents("tr").on("mouseout",s)}function spbc_scanner_button_file_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_file_view",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_analysis_log_delete_from_log(e){var e=jQuery(e),s={action:"spbc_scanner_analysis_log_delete_from_log",file_id:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:window.location.reload(),errorOutput:function(e){spbcModal.open().putError(e)}};spbc_sendAJAXRequest(s,e)}function spbc_scanner_button_page_view_event(e){var e=jQuery(e),s={action:"spbc_scanner_page_view",page_url:e.parents(".row-actions").attr("uid")},e={spinner:e.parent().siblings(".tbl-preloader--tiny"),callback:spbc_scannerButtonView_callback,errorOutput:function(e){spbcModal.open().putError(e)}},t=jQuery("#wpwrap"),o=jQuery("#spbc_dialog"),n=(o.dialog({modal:!0,title:"Loading..",position:{my:"center top",at:"center top+100px",of:window},width:t.width()/100*90,show:{effect:"blind",duration:500},draggable:!1,resizable:!1,closeText:"X",classes:{"ui-dialog":"spbc---top"},open:function(e,s){e.target.style.overflow="auto",jQuery("#spbc_dialog").height(document.documentElement.clientHeight/100*25)},beforeClose:function(e,s){document.body.style.overflow="auto",jQuery("#spbc_dialog").empty()}}),o.append('Wait for downloading'),jQuery("#spbc_file_view_preloader")),t=4e-4*t.width();n.height(128*t),n.width(128*t),n.css({left:o.width()/2-128*t/2}),n.css({top:o.height()/2-128*t/2}),spbc_sendAJAXRequest(s,e)}function spbc_scannerButtonView_callback(e){var s,t=jQuery("#spbc_dialog");t.empty(),jQuery("#spbc_file_view_preloader").css({display:"none"});for(s in e.file)t.append('
            %s

            %s


            '.printf(s,e.file[s]));let o=19*Object.keys(e.file).length<76?76:19*Object.keys(e.file).length,n=document.documentElement.clientHeight/100*75,a=o'+a+" weakspots:",d=jQuery("#spbc_dialog"),_=(d.append(c.printf("",_)),d.append(c.printf("...","...")),d.find("#"+l));for(p in _.parent().parent().css("text-align","center"),_.parent().parent().css("border","1px dotted"),_.parent().parent().css("background","darkgrey"),r[a]){p=[...new Set(p)].sort();var u=+r[a][p];for(let e=u-2;e<=2+u;e++)void 0!==s.file[e]&&d.append((u===e?'
            %s

            %s


            ':c).printf(e,s.file[e]));d.append(c.printf("...","..."))}}jQuery("#spbc_dialog div").last().remove();let b=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,f=document.documentElement.clientHeight/100*75,g=b{};if(1==o.success){console.log(o);var n,a='
            %s

            %s


            ',c=[];for(n in o.weak_spots=JSON.parse(o.weak_spots),o.weak_spots)c=c.concat(Object.keys(o.weak_spots[n]));var r,c=[...new Set(c)].sort(),i=new Map(Object.entries(o.weak_spots.CRITICAL));for(r in c){var p=+c[r];for(let t=p-2;t<=2+p;t++)if(void 0!==o.file[t]){var l=p===t;let e,s;e=l?'
            %s

            %s


            ':a,s=l&&!o.file[t].includes("iframe")?e.printf(t,i.get(c[r])):e.printf(t,o.file[t]),jQuery("#spbc_dialog").append(s)}jQuery("#spbc_dialog").append(a.printf("","")),jQuery("#spbc_dialog div").last().remove()}}else jQuery("#spbc_dialog").append('
            %s
            '.printf(o.content)),t=()=>{document.location.reload()};let _=19*jQuery("#spbc_dialog div").length<76?76:19*jQuery("#spbc_dialog div").length,d=document.documentElement.clientHeight/100*75,u=_Modified',"Line",'Original'));for(var n=1;void 0!==s.file[n]||void 0!==s.file_original[n];n++)if(void 0===s.file[n]&&(s.file[n]=""),void 0===s.file_original[n]&&(s.file_original[n]=""),-1!=s.difference.indexOf(n)){for(let e=n-2;e<=n+2;e++)void 0!==s.file[e]&&void 0!==s.file_original[n]&&jQuery("#spbc_dialog").append((n===e?'

            %s

            %s

            %s


            ':o).printf(s.file[e]||"",e,s.file_original[e]||""));jQuery("#spbc_dialog").append(o.printf("","",""))}var a=19*jQuery("#spbc_dialog div").length+19,c=document.documentElement.clientHeight/100*75,r=a{document.getElementById("spbc_scanner__last_scan_info").innerText=e.data}})}function spbc_scanner_file_monitoring_show_current_snapshot(e){var e=jQuery(e),s=e.parents(".row-actions").attr("uid");const t=e.closest(".column-path").find(".title").text(),o=jQuery("[data-remodal-id=spbc-file-monitoring-modal]");o.remodal().open();e={action:"spbc_file_monitoring_show_snapshots",file_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,success:function(e){e.success&&(o.find("#spbc-fm-snapshot-list ul").remove(),o.find("#spbc-fm-snapshot-file-name").text(t),drawSnapshotList(e.data,o),drawCurrentSnapshot(e.data[0].id,o))}})}function drawSnapshotList(e,s){let t="";for(var o of e)t+=`
          • ${o.created_at}
          • `;e=`
              ${t}
            `;s.find("#spbc-fm-snapshot-list").append(e)}function drawCurrentSnapshot(s,t){var e={action:"spbc_file_monitoring_show_current_snapshot",snapshot_id:s,security:spbcSettings.ajax_nonce};jQuery.ajax({type:"POST",async:!0,url:spbcSettings.ajaxurl,data:e,beforeSend:function(){jQuery("#spbc-file-monitoring-modal-preloader").show()},success:function(e){e.success&&(t.find("#spbc-fm-snapshot-view .wrap").remove(),t.find("[data-spanshot-id").removeClass("active"),t.find("[data-spanshot-id="+s+"]").addClass("active"),e=`
            diff --git a/js/spbc-settings_tab--scanner.min.js.map b/js/spbc-settings_tab--scanner.min.js.map
            index e899332a2..404ffa8fb 100644
            --- a/js/spbc-settings_tab--scanner.min.js.map
            +++ b/js/spbc-settings_tab--scanner.min.js.map
            @@ -1 +1 @@
            -{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text  = show_icon.attr('spbc_tip_text')  || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
            \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
            \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

            \" + tip_title + \"

            \")\n\t\t.append(\"

            \" + tip_text + \"

            \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
            %s

            %s


            ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
            %s

            %s


            ',\n\t\trow_template_bad = '
            %s

            %s


            ',\n\t\tstr_nums = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots);\n\tfor(let severity in result.weak_spots){\n\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t}\n\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\n\tfor(let str_num in str_nums){\n\n\t\tlet row = +str_nums[str_num],\n\t\t\tdisplay_depth = 2;\n\n\t\t// Display only existing lines of file\n\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\tjQuery('#spbc_dialog').append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t}\n\t\t}\n\n\t\t// Placing an empty string between results\n\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
            ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

            %s

            ' +\n\t\t\t\t'
            ',\n\t\t\trow_template_bad = '
            ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

            %s

            ' +\n\t\t\t\t'
            ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string && !result.file[curr_row].includes('iframe')){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
            %s
            '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() { \n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close'); \n\t\t\t}); \n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

            %s

            %s

            %s


            ';\n\tlet row_template_bad = '

            %s

            %s

            %s


            ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
          • ${item.created_at}
          • `;\n\t}\n\n\tlet html =\n\t\t`
              \n ${list}\n
            `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
            \n
            \n                            \n                                ${result.data.content}\n                            \n                        
            \n
            `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
            ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity","str_num","row_template","str_nums","weak_spots","JSON","parse","concat","Set","sort","curr_row","last","remove","afterClose","success","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","includes","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","find","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","header","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"spbc-settings_tab--scanner.min.js","sources":["spbc-settings_tab--scanner.js"],"sourcesContent":["function spbc_popup_tip___show(show_icon){\n\n\tvar tip_title = show_icon.attr('spbc_tip_title') || null;\n\tvar\ttip_text = show_icon.attr('spbc_tip_text') || null;\n\tvar remove_desc_func = function(e){\n\n\t\tif(\n\t\t\ttypeof e === 'undefined' ||\n\t\t\t(\n\t\t\t\t(jQuery(e.target).parent('.spbc_popup_tip--wrapper').length == 0 || jQuery(e.target).hasClass('spbc_popup_tip--icon---cancel')) &&\n\t\t\t\t!jQuery(e.target).hasClass('spbc_popup_tip--icon---show')\n\t\t\t)\n\t\t){\n\t\t\tjQuery('.spbc_popup_tip--wrapper').hide();\n\t\t\tjQuery(document).off('click', remove_desc_func);\n\t\t}\n\t};\n\n\tremove_desc_func();\n\n\tshow_icon.after(\"
            \");\n\n\tvar obj = jQuery('.spbc_popup_tip--wrapper');\n\n\tobj.empty()\n\t\t.append(\"
            \")\n\t\t.css({\n\t\t\ttop: show_icon.position().top - 2,\n\t\t\tleft: show_icon.position().left + 25\n\t\t});\n\tobj.append(\"\")\n\t\t.append(\"

            \" + tip_title + \"

            \")\n\t\t.append(\"

            \" + tip_text + \"

            \");\n\n\tjQuery(document).on('click', remove_desc_func);\n\tshow_icon.parents('tr').on('mouseout', remove_desc_func);\n}\n\nfunction spbc_scanner_button_file_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Delete file from analysis log\n */\nfunction spbc_scanner_analysis_log_delete_from_log(obj) {\n\tconst self = jQuery(obj);\n\tconst data = {\n\t\taction: 'spbc_scanner_analysis_log_delete_from_log',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: window.location.reload(),\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonView_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\n\tlet wp_wrap = jQuery('#wpwrap')\n\tlet dialog_window = jQuery('#spbc_dialog')\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: 'Loading..',\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(wp_wrap.width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: false,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').height((document.documentElement.clientHeight) / 100 * 25);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t})\n\n\tdialog_window.append('\"Wait')\n\n\tlet spinner = jQuery('#spbc_file_view_preloader')\n\tlet size_multiplier = (wp_wrap.width() * 0.0004)\n\n\tspinner.height(128 * size_multiplier)\n\tspinner.width(128 * size_multiplier)\n\tspinner.css({left: dialog_window.width()/2 - (128 * size_multiplier / 2)})\n\tspinner.css({top: dialog_window.height()/2 - (128 * size_multiplier / 2)})\n\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonView_callback(result){\n\n\tlet dialog_window = jQuery('#spbc_dialog')\n\tdialog_window.empty();\n\n\tjQuery('#spbc_file_view_preloader').css({display:'none'})\n\n\tlet row_template = '
            %s

            %s


            ';\n\n\tfor(let row in result.file){\n\t\tdialog_window.append(row_template.printf(row, result.file[row]));\n\t}\n\n\tlet content_height = Object.keys(result.file).length * 19 < 76 ? 76 : Object.keys(result.file).length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'hidden' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tdialog_window.css({\n\t\theight: height,\n\t\toverflow: overflow\n\t})\n\n\tdialog_window.dialog({\n\t\tmodal:true,\n\t\ttitle: ('Loaded: ' + result.file_path),\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() {\n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close');\n\t\t\t});\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n\n\tconsole.log('FILE_VIEWED');\n\n}\n\nfunction spbc_scanner_button_file_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_view',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBadFile_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scanner_button_page_view_bad_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_page_view',\n\t\tpage_url: self.parent().attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonViewBad_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonViewBadFile_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE_FILE');\n\tconsole.log(arguments);\n\tjQuery('#spbc_dialog').empty();\n\n\tvar row_template = '
            %s

            %s


            ',\n\t\trow_template_bad = '
            %s

            %s


            ',\n\t\tseverity_parts = [],\n\t\tseverity_parts_sorted = [],\n\t\tseverity_keys_sorted = [];\n\n\tresult.weak_spots = JSON.parse(result.weak_spots)\n\tfor(let severity in result.weak_spots){\n\t\tseverity_parts[severity] = Object.keys(result.weak_spots[severity])\n\t}\n\n\tseverity_keys_sorted = Object.keys(severity_parts).sort();\n\n\tfor(key in severity_keys_sorted){\n\t\tseverity_parts_sorted[severity_keys_sorted[key]] = severity_parts[severity_keys_sorted[key]]\n\t}\n\n\tfor (let severity_part in severity_parts_sorted) {\n\t\tlet header_name = 'spbc-dialog-row-header-' + severity_part.toLowerCase();\n\t\tlet header_html = '' + severity_part + ' weakspots:';\n\t\tconst dialog = jQuery('#spbc_dialog');\n\n\t\tdialog.append(row_template.printf('',header_html));\n\t\tdialog.append(row_template. printf('...','...'));\n\n\t\tlet header = dialog.find('#' + header_name);\n\t\theader.parent().parent().css('text-align', 'center');\n\t\theader.parent().parent().css('border', '1px dotted');\n\t\theader.parent().parent().css('background', 'darkgrey');\n\n\t\tfor(let str_num in severity_parts[severity_part]){\n\t\t\t// Sort bad line\n\t\t\tstr_num = [...new Set(str_num)].sort()\n\n\t\t\tlet row = +severity_parts[severity_part][str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tdialog.append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row]));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tdialog.append(row_template. printf('...','...'));\n\t\t}\n\t}\n\n\t// Removing last empty string\n\tjQuery('#spbc_dialog div').last().remove();\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() {\n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close');\n\t\t\t});\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t});\n}\n\nfunction spbc_scannerButtonViewBad_callback(result, data, params){\n\n\tconsole.log('FILE_VIEWED_BAD_CODE');\n\n\tconsole.log(arguments);\n\n\tlet afterClose = () => {};\n\n\tif ( result.success == true ) {\n\t\tconsole.log(result);\n\t\tvar row_template = '
            ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

            %s

            ' +\n\t\t\t\t'
            ',\n\t\t\trow_template_bad = '
            ' +\n\t\t\t\t'%s' +\n\t\t\t\t'

            %s

            ' +\n\t\t\t\t'
            ',\n\t\t\tstr_nums = [];\n\n\t\tresult.weak_spots = JSON.parse(result.weak_spots);\n\t\tfor(let severity in result.weak_spots){\n\t\t\tstr_nums = str_nums.concat(Object.keys(result.weak_spots[severity]));\n\t\t}\n\n\t\tstr_nums = [...new Set(str_nums)].sort(); // Sort bad line\n\t\t//get a map of bad strings\n\t\tlet bad_strings_map = new Map(Object.entries(result.weak_spots.CRITICAL)) //TODO: Probably there can get something else except CRITICAL in the future\n\t\tfor(let str_num in str_nums){\n\n\t\t\tlet row = +str_nums[str_num],\n\t\t\t\tdisplay_depth = 2;\n\n\t\t\t// Display only existing lines of file\n\t\t\tfor(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' ){\n\t\t\t\t\tlet is_bad_string = (row === curr_row)\n\t\t\t\t\tlet unformatted_row\n\t\t\t\t\tlet highlited_row\n\t\t\t\t\tif (is_bad_string){\n\t\t\t\t\t\tunformatted_row = row_template_bad\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunformatted_row = row_template\n\t\t\t\t\t}\n\t\t\t\t\tif (is_bad_string && !result.file[curr_row].includes('iframe')){\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, bad_strings_map.get(str_nums[str_num]));\n\t\t\t\t\t} else {\n\t\t\t\t\t\thighlited_row = unformatted_row.printf(curr_row, result.file[curr_row]);\n\t\t\t\t\t}\n\t\t\t\t\tjQuery('#spbc_dialog').append(highlited_row);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Placing an empty string between results\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', ''));\n\n\t\t\t// Removing last empty string\n\t\t\tjQuery('#spbc_dialog div').last().remove();\n\t\t}\n\t} else {\n\t\tlet wrapperElement = '
            %s
            '\n\t\tjQuery('#spbc_dialog').append(wrapperElement.printf(result.content));\n\t\tafterClose = () => {document.location.reload();};\n\t}\n\n\tlet content_height = jQuery('#spbc_dialog div').length * 19 < 76 ? 76 : jQuery('#spbc_dialog div').length * 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\theight = 'auto',\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll';\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: false,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t\tjQuery('.ui-widget-overlay').on('click', function() {\n\t\t\t\tjQuery(\"#spbc_dialog\").dialog('close');\n\t\t\t});\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t},\n\t\tclose: afterClose,\n\t});\n}\n\nfunction spbc_scanner_button_file_compare_event(obj){\n\tvar self = jQuery(obj);\n\tvar data = {\n\t\taction: 'spbc_scanner_file_compare',\n\t\tfile_id: self.parents('.row-actions').attr('uid'),\n\t};\n\tvar params = {\n\t\tspinner: self.parent().siblings('.tbl-preloader--tiny'),\n\t\tcallback: spbc_scannerButtonFileCompare_callback,\n\t\terrorOutput: function(msg){ spbcModal.open().putError( msg ); },\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\nfunction spbc_scannerButtonFileCompare_callback(result, data, params){\n\n\tconsole.log('FILE_COMPARED');\n\n\tlet row_template = '

            %s

            %s

            %s


            ';\n\tlet row_template_bad = '

            %s

            %s

            %s


            ';\n\n\tjQuery('#spbc_dialog').append(row_template.printf('Modified', 'Line', 'Original'));\n\n\tfor(var row=1, prev = false, next = false; typeof result.file[row] != 'undefined' || typeof result.file_original[row] != 'undefined'; row++){\n\n\t\tif(typeof result.file[row] == 'undefined') result.file[row] = '';\n\t\tif(typeof result.file_original[row] == 'undefined') result.file_original[row] = '';\n\n\t\t// Display only existing lines of file\n\t\tif(result.difference.indexOf(row) != -1){\n\t\t\tfor(let display_depth = 2, curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){\n\t\t\t\tif( typeof result.file[curr_row] !== 'undefined' && typeof result.file_original[row] !== 'undefined') {\n\t\t\t\t\tjQuery('#spbc_dialog').append(\n\t\t\t\t\t\t(row === curr_row ? row_template_bad : row_template).printf(\n\t\t\t\t\t\t\tresult.file[curr_row] ? result.file[curr_row] : '',\n\t\t\t\t\t\t\tcurr_row,\n\t\t\t\t\t\t\tresult.file_original[curr_row] ? result.file_original[curr_row] : ''\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tjQuery('#spbc_dialog').append(row_template. printf('', '', ''));\n\t\t}\n\t}\n\n\tvar content_height = jQuery('#spbc_dialog div').length * 19 + 19,\n\t\tvisible_height = (document.documentElement.clientHeight) / 100 * 75,\n\t\toverflow = content_height < visible_height ? 'no_scroll' : 'scroll',\n\t\theight = overflow === 'scroll' ? visible_height : content_height;\n\n\tjQuery('#spbc_dialog').dialog({\n\t\tmodal:true,\n\t\ttitle: result.file_path,\n\t\tposition: { my: \"center top\", at: \"center top+100px\" , of: window },\n\t\twidth: +(jQuery('#wpwrap').width() / 100 * 90),\n\t\theight: height,\n\t\tshow: { effect: \"blind\", duration: 500 },\n\t\tdraggable: true,\n\t\tresizable: true,\n\t\tcloseText: \"X\",\n\t\tclasses: {\"ui-dialog\": 'spbc---top'},\n\t\topen: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\tevent.target.style.overflow = overflow;\n\t\t\tjQuery('#spbc_dialog').height(height);\n\t\t},\n\t\tbeforeClose: function(event, ui) {\n\t\t\tdocument.body.style.overflow = 'auto';\n\t\t\tjQuery('#spbc_dialog').empty();\n\t\t}\n\t});\n}\n\nfunction spbc_scanner__reload_scan_info() {\n\tjQuery('.spbc_hint__last_scan_title').text(spbcScaner.look_below_for_scan_res);\n\tconst data = {\n\t\taction: 'spbc_scanner__last_scan_info'\n\t};\n\tconst params = {\n\t\tcallback: (result) => {\n\t\t\tdocument.getElementById('spbc_scanner__last_scan_info').innerText = result.data;\n\t\t}\n\t};\n\tspbc_sendAJAXRequest(data, params);\n}\n\n/**\n * Show snapshots of file\n * @param obj\n */\nfunction spbc_scanner_file_monitoring_show_current_snapshot(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileId = self.parents('.row-actions').attr('uid');\n\tconst file_name = self.closest('.column-path').find('.title').text();\n\n\t// Init and open remodal\n\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\tconst remodalObject = remodal.remodal();\n\tremodalObject.open();\n\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_snapshots',\n\t\tfile_id: fileId,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-list ul').remove();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-file-name').text(file_name);\n\t\t\t\tdrawSnapshotList(result.data, remodal);\n\t\t\t\tdrawCurrentSnapshot(result.data[0].id, remodal);\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n *\n * @param data\n * @param remodal\n */\nfunction drawSnapshotList(data, remodal)\n{\n\tlet list = '';\n\n\tfor (let item of data) {\n\t\tlist += `
          • ${item.created_at}
          • `;\n\t}\n\n\tlet html =\n\t\t`
              \n ${list}\n
            `;\n\n\tremodal.find('#spbc-fm-snapshot-list').append(html);\n}\n\nfunction drawCurrentSnapshot(snapshot_id, remodal)\n{\n\t// Ajax request to get data for slider\n\tlet data = {\n\t\taction: 'spbc_file_monitoring_show_current_snapshot',\n\t\tsnapshot_id,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tbeforeSend: function() {\n\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').show();\n\t\t},\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view .wrap').remove();\n\t\t\t\tremodal.find('[data-spanshot-id').removeClass('active');\n\t\t\t\tremodal.find('[data-spanshot-id=' + snapshot_id + ']').addClass('active');\n\n\t\t\t\tlet html =\n\t\t\t\t\t`
            \n
            \n                            \n                                ${result.data.content}\n                            \n                        
            \n
            `;\n\n\t\t\t\tjQuery('#spbc-file-monitoring-modal-preloader').hide();\n\t\t\t\tremodal.find('#spbc-fm-snapshot-view').append(html);\n\t\t\t\tdocument.querySelectorAll('pre code').forEach((el) => {\n\t\t\t\t\thljs.highlightElement(el);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// TODO: show errors\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Cure file\n * @param obj\n */\nfunction spbc_scanner_button_cure_file_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_file_cure_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Restore file from backup\n * @param obj\n */\nfunction spbc_scanner_button_restore_from_backup_ajax_handler(obj)\n{\n\tconst self = jQuery(obj);\n\tconst fileFastHash = self.parents('.row-actions').attr('uid');\n\n\tlet data = {\n\t\taction: 'spbc_restore_file_from_backup_ajax_action',\n\t\tfile_fast_hash: fileFastHash,\n\t\tsecurity: spbcSettings.ajax_nonce\n\t};\n\n\tjQuery.ajax({\n\t\ttype: \"POST\",\n\t\tasync: true,\n\t\turl: spbcSettings.ajaxurl,\n\t\tdata: data,\n\t\tsuccess: function(result) {\n\t\t\tif (result.success) {\n\t\t\t\tspbcModal.open().put(result.data);\n\t\t\t\tdocument.addEventListener(\"spbcModalClosed\", function( e ) {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tspbcModal.open().putError(result.data);\n\t\t\t}\n\t\t},\n\t});\n}\n\n/**\n * Clear scan results\n */\nfunction spbc_scanner_button_clear_scan_results()\n{\n\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\treturn;\n\n\tconsole.log('CLEAR');\n\n\tspbc_sendAJAXRequest(\n\t\t{ action: 'spbc_scanner_clear', },\n\t\t{\n\t\t\ttype: 'GET',\n\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\tcomplete: null,\n\t\t\terrorOutput: null,\n\t\t\tcontext: this,\n\t\t\ttimeout: 40000,\n\t\t\tsuccess: function() {\n\t\t\t\tdocument.location.reload();\n\t\t\t},\n\t\t},\n\t);\n}\n\njQuery(document).ready(function(){\n\n\t// EVENT HADLING\n\tspbc_tbl__bulk_actions__listen(); // Table. Row bulk handler\n\tspbc_tbl__row_actions__listen(); // Table. Row actions handler\n\tspbc_tbl__pagination__listen(); // Table. Pagination handler\n\tspbc_tbl__sort__listen(); // Table. Sort handler\n\n\tspbcStartShowHide();\n\n\t// Preparing progressbar\n\tjQuery('#spbc_scaner_progress_bar').progressbar({\n\t\tvalue: 0,\n\t\tcreate: function( event, ui ) {\n\t\t\tevent.target.style.position = 'relative';\n\t\t\tevent.target.style.marginBottom = '12px';\n\t\t},\n\t\tchange: function(event, ui){\n\t\t\tjQuery('.spbc_progressbar_counter span').text(jQuery(event.target).progressbar('option', 'value') + ' %');\n\t\t},\n\t});\n\n\t// Preparing accordion\n\tjQuery('#spbc_scan_accordion').accordion({\n\t\theader: \"h3\",\n\t\theightStyle: 'content',\n\t\tcollapsible: true,\n\t\tactive: false,\n\t\tactivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 0 && ui.oldHeader.length === 0 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom spbc-overflow--visible\");\n\t\t},\n\t\tbeforeActivate: function( event, ui ) {\n\t\t\tif( ui.oldPanel.length === 1 && ui.oldHeader.length === 1 )\n\t\t\t\tjQuery(\"#spbc_scan_accordion\").accordion(\"option\", \"classes.ui-accordion-content\", \"ui-corner-bottom\");\n\t\t}\n\t});\n\n\t// Init scanner plugin\n\twindow.spbc_scanner = new spbcMalwareScanner({\n\t\tsettings: spbcScaner.settings,\n\t\tstates: spbcScaner.states,\n\t\tbutton: jQuery('#spbc_perform_scan'),\n\t\tspinner: jQuery('#spbc_perform_scan').next(),\n\t\tcallback: null,\n\t\tprogress_overall: jQuery('#spbc_scaner_progress_overall'),\n\t\tprogressbar: jQuery('#spbc_scaner_progress_bar'),\n\t\tprogressbar_text: jQuery('.spbc_progressbar_counter span'),\n\t\twrapper: document.getElementsByClassName('spbc_unchecked_file_list'),\n\t\twarnings: {\n\t\t\tlong_scan: jQuery('.spbc_hint_warning__long_scan'),\n\t\t\toutdated: jQuery('.spbc_hint_warning__outdated')\n\t\t}\n\t});\n\n\tjQuery(document).on('click', '.spbc_popup_tip--icon---show', function(){\n\t\tspbc_popup_tip___show( jQuery( this ) );\n\t});\n\n\tjQuery('#spbc_perform_scan').on('click', function(){\n\t\tjQuery('#spbcscan-results-log-module').remove();\n\t\tspbc_scanner.actionControl();\n\n\t\tif (!jQuery(\".spbc_log-wrapper .panel-body\").length) {\n\t\t\tjQuery(\".spbc_log-wrapper\").append('
            ');\n\t\t}\n\n\t\tjQuery(\".spbc_log-wrapper\").resizable({\n\t\t\thandles: 'n, s',\n\t\t\tcontainment: 'document',\n\t\t});\n\t});\n\n\tjQuery(\"#spbcscan-results-log-module\").resizable({\n\t\thandles: 'n, s',\n\t\tcontainment: 'document',\n\t});\n\n\t// Clear scanner's tables\n\tjQuery('#spbc_scanner_clear').on('click', function(){\n\n\t\tif( ! confirm('Do you confirm to clear the scan results?') )\n\t\t\treturn;\n\n\t\tconsole.log('CLEAR');\n\n\t\tspbc_sendAJAXRequest(\n\t\t\t{ action: 'spbc_scanner_clear', },\n\t\t\t{\n\t\t\t\ttype: 'GET',\n\t\t\t\tsuccessCallback: function(){ document.location = document.location },\n\t\t\t\tcomplete: null,\n\t\t\t\terrorOutput: null,\n\t\t\t\tcontext: this,\n\t\t\t\ttimeout: 40000,\n\t\t\t\tsuccess: function() {\n\t\t\t\t\tdocument.location.reload();\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n\n\tjQuery('#spbc_scanner_save_to_pdf').on('click', function(){\n\t\tjQuery.ajax({\n\t\t\turl: spbcSettings.ajaxurl,\n\t\t\ttype: 'POST',\n\t\t\tdata: {\n\t\t\t\taction: 'spbc_scanner_save_to_pdf',\n\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\tno_cache: Math.random()\n\t\t\t},\n\t\t\txhrFields: {\n\t\t\t\tresponseType: 'blob'\n\t\t\t},\n\t\t\tsuccess: function(data) {\n\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: spbcSettings.ajaxurl,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\taction: 'spbc_scanner_get_pdf_file_name',\n\t\t\t\t\t\t\tsecurity: spbcSettings.ajax_nonce,\n\t\t\t\t\t\t\tno_cache: Math.random()\n\t\t\t\t\t\t},\n\t\t\t\t\t\txhrFields: {\n\t\t\t\t\t\t\tresponseType: 'text'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsuccess: function(filename) {\n\t\t\t\t\t\t\tlet blob=new Blob([data]);\n\t\t\t\t\t\t\tlet link=document.createElement('a');\n\t\t\t\t\t\t\tlink.href=window.URL.createObjectURL(blob);\n\t\t\t\t\t\t\tlink.download=filename.data;\n\t\t\t\t\t\t\tlink.click();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\t\t});\n\t});\n\n\t// Select snapshot\n\tjQuery(document).on('click', '.spbc-fm-snapshot-list [data-spanshot-id]', function() {\n\t\tconst currentSnapshotId = jQuery(this).data('spanshot-id');\n\t\tconst activeSnapshotId = jQuery('.spbc-fm-snapshot-list [data-spanshot-id].active').data('spanshot-id');\n\n\t\tif (currentSnapshotId === activeSnapshotId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]');\n\t\tdrawCurrentSnapshot(currentSnapshotId, remodal)\n\t});\n});\n"],"names":["spbc_popup_tip___show","show_icon","remove_desc_func","e","jQuery","target","parent","length","hasClass","hide","document","off","tip_title","attr","tip_text","obj","after","empty","append","css","top","position","left","on","parents","spbc_scanner_button_file_view_event","self","data","action","file_id","params","spinner","siblings","callback","spbc_scannerButtonView_callback","errorOutput","msg","spbcModal","open","putError","spbc_sendAJAXRequest","spbc_scanner_analysis_log_delete_from_log","window","location","reload","spbc_scanner_button_page_view_event","page_url","wp_wrap","dialog_window","dialog","modal","title","my","at","of","width","show","effect","duration","draggable","resizable","closeText","classes","ui-dialog","event","ui","style","overflow","height","documentElement","beforeClose","body","size_multiplier","result","let","row","display","file","printf","content_height","Object","keys","visible_height","file_path","console","log","spbc_scanner_button_file_view_bad_event","spbc_scannerButtonViewBadFile_callback","spbc_scanner_button_page_view_bad_event","spbc_scannerButtonViewBad_callback","arguments","severity_keys_sorted","severity","severity_part","row_template","severity_parts","severity_parts_sorted","weak_spots","JSON","parse","key","sort","str_num","header_name","toLowerCase","header_html","header","find","Set","curr_row","last","remove","afterClose","success","str_nums","concat","bad_strings_map","Map","entries","CRITICAL","is_bad_string","unformatted_row","highlited_row","includes","get","content","close","spbc_scanner_button_file_compare_event","spbc_scannerButtonFileCompare_callback","file_original","difference","indexOf","spbc_scanner__reload_scan_info","text","spbcScaner","look_below_for_scan_res","getElementById","innerText","spbc_scanner_file_monitoring_show_current_snapshot","fileId","file_name","closest","remodal","security","spbcSettings","ajax_nonce","ajax","type","async","url","ajaxurl","drawSnapshotList","drawCurrentSnapshot","id","list","item","created_at","html","snapshot_id","beforeSend","removeClass","addClass","querySelectorAll","forEach","hljs","highlightElement","el","spbc_scanner_button_cure_file_ajax_handler","file_fast_hash","put","addEventListener","spbc_scanner_button_restore_from_backup_ajax_handler","spbc_scanner_button_clear_scan_results","confirm","successCallback","complete","context","this","timeout","ready","spbc_tbl__bulk_actions__listen","spbc_tbl__row_actions__listen","spbc_tbl__pagination__listen","spbc_tbl__sort__listen","spbcStartShowHide","progressbar","value","create","marginBottom","change","accordion","heightStyle","collapsible","active","activate","oldPanel","oldHeader","beforeActivate","spbc_scanner","spbcMalwareScanner","settings","states","button","next","progress_overall","progressbar_text","wrapper","getElementsByClassName","warnings","long_scan","outdated","actionControl","handles","containment","no_cache","Math","random","xhrFields","responseType","filename","blob","Blob","link","createElement","href","URL","createObjectURL","download","click","currentSnapshotId"],"mappings":"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"} \ No newline at end of file diff --git a/js/src/spbc-settings.js b/js/src/spbc-settings.js index 863399ef7..bd772cca8 100644 --- a/js/src/spbc-settings.js +++ b/js/src/spbc-settings.js @@ -642,4 +642,71 @@ jQuery(document).ready(function(){ } }); //*/ REFRESH TAB IF ctrl+F5 END -}); \ No newline at end of file + + /** + * Change cleantalk account email + */ + jQuery(document).on('click', '#spbc-change-account-email', function(e) { + e.preventDefault(); + + let $this = jQuery(this); + let accountEmailField = jQuery('#spbc-account-email'); + let accountEmail = accountEmailField.text(); + + spbcToggleClass($this, 'active'); + + if ($this.hasClass('active')) { + $this.text($this.data('save-text')); + accountEmailField.attr('contenteditable', 'true'); + accountEmailField.focus(); + accountEmailField.on('keydown', function(e) { + if (e.code === 'Enter') { + e.preventDefault(); + } + }); + accountEmailField.on('input', function(e) { + if (e.inputType === 'insertParagraph') { + e.preventDefault(); + } + }); + } else { + spbc_sendAJAXRequest( + { + action: 'spbc_update_account_email', + accountEmail: accountEmail, + }, + { + timeout: 5000, + callback: function(result, data, params, obj) { + if (result.success !== undefined && result.success === 'ok') { + if (result.manuallyLink !== undefined) { + jQuery('#spbc-key-manually-link').attr('href', result.manuallyLink); + } + } + + if (result.error !== undefined) { + + jQuery('#spbc-account-email').css('border-color', 'red'); + } + }, + errorOutput: function(msg) { + spbcModal.loaded = msg; + spbcModal.open(); + } + }, + ); + + accountEmailField.attr('contenteditable', 'false'); + $this.text($this.data('default-text')); + } + }); +}); + +/** + * @param {string} className + */ +function spbcToggleClass(arr, className) { + for (let i=0; i' + severity_part + ' weakspots:'; + const dialog = jQuery('#spbc_dialog'); + + dialog.append(row_template.printf('',header_html)); + dialog.append(row_template. printf('...','...')); + + let header = dialog.find('#' + header_name); + header.parent().parent().css('text-align', 'center'); + header.parent().parent().css('border', '1px dotted'); + header.parent().parent().css('background', 'darkgrey'); + + for(let str_num in severity_parts[severity_part]){ + // Sort bad line + str_num = [...new Set(str_num)].sort() + + let row = +severity_parts[severity_part][str_num], + display_depth = 2; - // Placing an empty string between results - jQuery('#spbc_dialog').append(row_template. printf('', '')); + // Display only existing lines of file + for(let curr_row = row - display_depth; curr_row <= row + display_depth; curr_row++ ){ + if( typeof result.file[curr_row] !== 'undefined' ){ + dialog.append((row === curr_row ? row_template_bad : row_template).printf(curr_row, result.file[curr_row])); + } + } + // Placing an empty string between results + dialog.append(row_template. printf('...','...')); + } } // Removing last empty string @@ -253,9 +275,9 @@ function spbc_scannerButtonViewBadFile_callback(result, data, params){ open: function(event, ui) { event.target.style.overflow = overflow; jQuery('#spbc_dialog').height(height); - jQuery('.ui-widget-overlay').on('click', function() { - jQuery("#spbc_dialog").dialog('close'); - }); + jQuery('.ui-widget-overlay').on('click', function() { + jQuery("#spbc_dialog").dialog('close'); + }); }, beforeClose: function(event, ui) { document.body.style.overflow = 'auto'; @@ -347,9 +369,9 @@ function spbc_scannerButtonViewBad_callback(result, data, params){ open: function(event, ui) { event.target.style.overflow = overflow; jQuery('#spbc_dialog').height(height); - jQuery('.ui-widget-overlay').on('click', function() { - jQuery("#spbc_dialog").dialog('close'); - }); + jQuery('.ui-widget-overlay').on('click', function() { + jQuery("#spbc_dialog").dialog('close'); + }); }, beforeClose: function(event, ui) { document.body.style.overflow = 'auto'; @@ -793,4 +815,4 @@ jQuery(document).ready(function(){ const remodal = jQuery('[data-remodal-id=spbc-file-monitoring-modal]'); drawCurrentSnapshot(currentSnapshotId, remodal) }); -}); \ No newline at end of file +}); diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php index ee2dfb63e..c97fe3df7 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/HeuristicAnalyser.php @@ -3,6 +3,7 @@ namespace CleantalkSP\Common\Scanner\HeuristicAnalyser; use CleantalkSP\Common\Scanner\HeuristicAnalyser\DataStructures\ExtendedSplFixedArray; +use CleantalkSP\Common\Scanner\HeuristicAnalyser\DataStructures\Token; use CleantalkSP\Common\Scanner\HeuristicAnalyser\Modules\CodeStyle; use CleantalkSP\Common\Scanner\HeuristicAnalyser\Modules\Entropy; use CleantalkSP\Common\Scanner\HeuristicAnalyser\Modules\Evaluations; @@ -105,6 +106,17 @@ class HeuristicAnalyser ), ); + private $super_globals = array( + '$_GET', + '$_POST', + '$_COOKIE', + '$_FILES', + '$_SERVER', + '$GLOBALS', + '$_SESSION', + '$_REQUEST', + ); + /** * Contains a set of dangerous values that have been decoded * @var string[] @@ -417,6 +429,13 @@ public function makeVerdict() $set_of_functions, true ); + + // If common bad structures found, then check containment for superglobals + if ($found_malware_key !== false && $this->checkingSuperGlobalsInTheSystemCommands($this->tokens->current)) { + $this->verdict['CRITICAL'][$this->tokens->current->line][] = 'global variables in a sys command'; + break; + } + $this->verdict[$severity][$this->tokens->current->line][] = $set_of_functions[$found_malware_key]; } } @@ -586,6 +605,26 @@ private function checkingDecryptedToken(DataStructures\Token $token) return false; } + /** + * Check if super global variables found in the token applications. + * @param Token $token + * @return bool + */ + private function checkingSuperGlobalsInTheSystemCommands(DataStructures\Token $token) + { + //search for next semicolon to find depth of seek + $next_semicolon = $this->tokens->searchForward($token->key, ';'); + $depth = $next_semicolon ? $next_semicolon - $token->key : 0; + foreach ($this->super_globals as $super_global) { + //search for superglobs usage + $forward_look_super_globals = $this->tokens->searchForward($token->key, $super_global, $depth); + if (false !== $forward_look_super_globals) { + return true; + } + } + return false; + } + private function getResultCode() { $output = ''; diff --git a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php index 8db64f8f8..3a2800c82 100644 --- a/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php +++ b/lib/CleantalkSP/Common/Scanner/HeuristicAnalyser/Modules/Entropy.php @@ -30,7 +30,6 @@ public function __construct($path) * * @param Variables $variables * @return void - * @psalm-suppress UndefinedClass */ public function analyse(Variables $variables) { @@ -74,7 +73,6 @@ public function analyse(Variables $variables) * * @param $path * @return bool - * @psalm-suppress UndefinedClass */ private function analyseFile($path) { diff --git a/lib/CleantalkSP/Common/Scanner/SignaturesAnalyser/Controller.php b/lib/CleantalkSP/Common/Scanner/SignaturesAnalyser/Controller.php index 5d3ff8d95..b20354a69 100644 --- a/lib/CleantalkSP/Common/Scanner/SignaturesAnalyser/Controller.php +++ b/lib/CleantalkSP/Common/Scanner/SignaturesAnalyser/Controller.php @@ -10,7 +10,7 @@ class Controller { - const FILE_MAX_SIZE = 524288; // 512 KB + const FILE_MAX_SIZE = 2621440; // 2.5 MB public function __construct() { diff --git a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php index d3cbbe107..9295c9d0b 100644 --- a/lib/CleantalkSP/SpbctWP/Firewall/BFP.php +++ b/lib/CleantalkSP/SpbctWP/Firewall/BFP.php @@ -15,7 +15,7 @@ class BFP extends FirewallModule protected $block_period = 3600; // Default block period for $bf_limit wrong attempts protected $count_period = 900; // Counting login attempts in this interval - public $chance_to_clean = 100; // Chance to clean log table from old entries. In percents. + protected $chance_to_clean = 100; // Chance to clean log table from old entries. In percents. public static $is_checked = false; /** diff --git a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php index a72ddc558..3ada27985 100644 --- a/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/Frontend.php @@ -318,11 +318,26 @@ public function check() $page['bad'] = $results ? true : $page['bad']; + $page['found']['redirects'] = 0; + $page['found']['dbd'] = 0; + $page['found']['signatures'] = 0; + $page['found']['csrf'] = 0; + foreach ( $results as $result ) { - $page['found']['redirects'] = $result->type === 'redirects' ? 1 : 0; - $page['found']['dbd'] = $result->type === 'dbd' ? 1 : 0; - $page['found']['signatures'] = $result->type === 'signatures' ? 1 : 0; - $page['found']['csrf'] = $result->type === 'csrf' ? 1 : 0; + switch ($result->type) { + case 'redirects': + $page['found']['redirects'] = 1; + break; + case 'dbd': + $page['found']['dbd'] = 1; + break; + case 'signatures': + $page['found']['signatures'] = 1; + break; + case 'csrf': + $page['found']['csrf'] = 1; + break; + } $page['found']['line'] = $result->line; $page['found']['needle'] = $result->needle; @@ -441,10 +456,12 @@ public static function sendFmsLogs() ? $spbc->data['scanner']['scanner_start_local_date'] : current_time('Y-m-d H:i:s'); + $total_site_pages = isset($spbc->data['scanner']['total_site_pages']) ? $spbc->data['scanner']['total_site_pages'] : self::getTotalPages(); + if (count($fms_logs_data_prepare) > 0) { $result_fms = API::method__security_fms_logs( $spbc->settings['spbc_key'], // API key - $spbc->data['scanner']['total_site_pages'], // Total pages + $total_site_pages, // Total pages count($fms_logs_data_prepare), // Total infected pages $scanner_start_local_date, // Scanner start date json_encode($fms_logs_data_prepare) // Logs data diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 86c21ccfd..4bb0f416c 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -788,7 +788,7 @@ public function countFileSystem($path_to_scan = ABSPATH) $init_params = array( 'count' => true, 'file_exceptions' => 'wp-config.php', - 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, otc', 'files_mandatory' => array(), 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); @@ -835,7 +835,7 @@ public function file_system_analysis($offset = null, $amount = null, $path_to_sc 'full_hash' => true, 'offset' => $offset, 'amount' => $amount, - 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, otc', 'extensions_exceptions' => '', //array('jpg', 'jpeg', 'png', 'gif', 'css', 'txt', 'zip', 'xml', 'json') 'file_exceptions' => 'wp-config.php', 'files_mandatory' => array(), @@ -1032,6 +1032,25 @@ public function get_approved_hashes() // phpcs:ignore PSR1.Methods.CamelCapsMeth return array('error' => 'BAD_PARAMS'); } + /** + * Set unknown status if the file was approved before, but its has does not + * persist in the approved hashes list for now. This implemented for cases where we + * do change hashes list on mistakenly accepted wrong verdict + */ + $this->db->execute( + 'UPDATE ' . SPBC_TBL_SCAN_FILES + . ' SET + checked_heuristic = 0, + checked_signatures = 0, + severity = NULL, + status = \'UNKNOWN\' + WHERE status = \'APPROVED_BY_CT\' + AND full_hash NOT IN (\'' . $where . '\');' + ); + + /** + * Update the db depend on current hashes list. + */ $updated_rows = $this->db->execute( 'UPDATE ' . SPBC_TBL_SCAN_FILES . ' SET diff --git a/lib/CleantalkSP/SpbctWP/State.php b/lib/CleantalkSP/SpbctWP/State.php index 72bc164c5..061eec453 100644 --- a/lib/CleantalkSP/SpbctWP/State.php +++ b/lib/CleantalkSP/SpbctWP/State.php @@ -135,6 +135,7 @@ class State extends \CleantalkSP\Common\State 'notice_trial' => false, 'notice_review' => false, 'service_id' => '', + 'account_email' => '', 'license_trial' => 0, 'account_name_ob' => '', 'salt' => '', diff --git a/readme.txt b/readme.txt index b98b04f57..0d9bf3245 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: security, firewall, malware, wordpress security, brute force Requires at least: 3.0 Tested up to: 6.3 Requires PHP: 5.6 -Stable tag: 2.116 +Stable tag: 2.117 License: GPLv2 License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -301,6 +301,15 @@ This is required for the Security FireWall to function properly. Plugins that ar == Changelog == += 2.117 Aug 28 2023 = +* New: Settings. Add ability to change admin email. +* New: Heuristics. Detect super variables in the system commands. +* New: Show different types of weakspots in severity order. +* Upd: Scan. Find and show all malwares in Frontend Malware accordion. +* Upd: Security. Improve security logs view. +* Upd: Scan. Unset approved by ct status if no hash in list. +* Upd: Scan. Added .otc files for scanning. + = 2.116 Aug 14 2023 = * New: WL. Added constants for custom description and FAQ link. * Fix: FW. Delete all lines after send fw logs. diff --git a/security-malware-firewall.php b/security-malware-firewall.php index 3e790069d..f45bd24ab 100644 --- a/security-malware-firewall.php +++ b/security-malware-firewall.php @@ -5,7 +5,7 @@ Plugin URI: https://wordpress.org/plugins/security-malware-firewall/ Description: Security & Malware scan by CleanTalk to protect your website from online threats and viruses. IP/Country FireWall, Web application FireWall. Detailed stats and logs to have full control. Author: CleanTalk Security -Version: 2.116.1-fix +Version: 2.117.1-fix Author URI: https://cleantalk.org Text Domain: security-malware-firewall Domain Path: /i18n @@ -42,7 +42,7 @@ } // Getting version form main file (look above) -$plugin_info = get_file_data(__FILE__, array('Version' => 'Version', 'Name' => 'Plugin Name',)); +$plugin_info = get_file_data(__FILE__, array('Version' => 'Version', 'Name' => 'Plugin Name', 'Description' => 'Description')); $plugin_version__agent = $plugin_info['Version']; // Converts xxx.xxx.xx-dev to xxx.xxx.2xx // And xxx.xxx.xx-fix to xxx.xxx.1xx @@ -2417,7 +2417,7 @@ function spbc_send_daily_report($skip_data_rotation = false) // Hours $report_interval = 24 * 7; - $admin_email = get_option('admin_email'); + $admin_email = spbc_get_admin_email(); if ( ! $admin_email ) { error_log( sprintf( @@ -2733,7 +2733,7 @@ function spbc_scanner_resend_pscan_files() function spbc_check_account_status($api_key) { - global $spbc; + global $spbc, $plugin_info; // Checking account status $result = SpbcAPI::method__notice_paid_till( @@ -2818,7 +2818,7 @@ function spbc_check_account_status($api_key) : $spbc->default_data['wl_support_email']; $spbc->data['wl_plugin_description'] = isset($result['wl_plugin_description']) ? Sanitize::cleanTextField($result['wl_plugin_description']) - : get_plugin_data('security-malware-firewall/security-malware-firewall.php')['Description']; + : $plugin_info['Description']; } else { $spbc->data['wl_mode_enabled'] = false; $spbc->data['wl_brandname'] = $spbc->default_data['wl_brandname']; diff --git a/tests/Standalone/TestBFP.php b/tests/Standalone/TestBFP.php index 064cad7ff..a0d2f6641 100644 --- a/tests/Standalone/TestBFP.php +++ b/tests/Standalone/TestBFP.php @@ -27,13 +27,11 @@ protected function setUp() 'count_period' => $spbc->settings['bfp__count_interval'], // Counting login attempts in this interval ) ); - $this->bfp->chance_to_clean = 0; } public function testIpv4Block() { $ip = '127.0.0.1'; - $this->bfp->setIpArray(array($ip)); $this->db->execute(' TRUNCATE TABLE ' . SPBC_TBL_BFP_BLOCKED); @@ -42,9 +40,10 @@ public function testIpv4Block() ' . SPBC_TBL_TC_LOG); $this->bfp->setDb($this->db); - for ($i = 0; $i<=5; $i++){ + for ($i = 0; $i<=5; $i++) { + $this->bfp->setIpArray(array($ip)); + BFP::$is_checked = false; $this->bfp->updateLogs(); - $this->bfp::$is_checked = false; } $bfp_result = $this->bfp->check(); @@ -55,7 +54,6 @@ public function testIpv4Block() public function testIpv6Block() { $ip = 'fddc:0002:aa98:00dd:0000:0000:0000:ffee'; - $this->bfp->setIpArray(array($ip)); $this->db->execute(' TRUNCATE TABLE ' . SPBC_TBL_BFP_BLOCKED); @@ -65,12 +63,12 @@ public function testIpv6Block() $this->bfp->setDb($this->db); for ($i = 0; $i<=5; $i++){ + $this->bfp->setIpArray(array($ip)); + BFP::$is_checked = false; $this->bfp->updateLogs(); - $this->bfp::$is_checked = false; } $bfp_result = $this->bfp->check(); - $this->assertEquals($bfp_result[0]->ip, $ip); $this->assertEquals($bfp_result[0]->status, 'DENY_BY_BFP'); } From 87b7aaa7bcac77ec4cbda1c2e2a7813b46a9bc11 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Thu, 31 Aug 2023 09:58:12 +0300 Subject: [PATCH 091/109] Code. Action. Reviewed pull-request notice implemented. (cherry picked from commit e09cb4af54b7f0fc1da8b899811ee140e149d374) --- .github/workflows/reviewNotice.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/reviewNotice.yml diff --git a/.github/workflows/reviewNotice.yml b/.github/workflows/reviewNotice.yml new file mode 100644 index 000000000..dacb2a425 --- /dev/null +++ b/.github/workflows/reviewNotice.yml @@ -0,0 +1,27 @@ +name: Notice about review approved via Telegram + +on: + pull_request_review: + types: [ submitted ] + +jobs: + + build: + if: github.event.review.state == 'approved' + runs-on: ubuntu-latest + steps: + - name: Convert date format + id: date + run: echo "::set-output name=date::$(date -d "${{ github.event.pull_request.created_at }}" +"%Y-%m-%d")" + - name: Send telegram message on review approved + uses: appleboy/telegram-action@master + with: + to: ${{ secrets.TELEGRAM_PLUGINS_TO }} + token: ${{ secrets.TELEGRAM_REVIEWER_TOKEN }} + message: | + 💥🎉🎉🎉💥 Pull-request ${{ github.event.pull_request.title }} + submitted by ${{ github.event.pull_request.user.login }} at ${{ steps.date.outputs.date }} + + was approved and is ready to merge ➡️ !!! + format: html + disable_web_page_preview: true \ No newline at end of file From a233671dc56370e8688c360799969c577f0848b7 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Thu, 31 Aug 2023 09:58:12 +0300 Subject: [PATCH 092/109] Code. Action. Reviewed pull-request notice implemented. (cherry picked from commit e09cb4af54b7f0fc1da8b899811ee140e149d374) --- .github/workflows/reviewNotice.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/reviewNotice.yml diff --git a/.github/workflows/reviewNotice.yml b/.github/workflows/reviewNotice.yml new file mode 100644 index 000000000..dacb2a425 --- /dev/null +++ b/.github/workflows/reviewNotice.yml @@ -0,0 +1,27 @@ +name: Notice about review approved via Telegram + +on: + pull_request_review: + types: [ submitted ] + +jobs: + + build: + if: github.event.review.state == 'approved' + runs-on: ubuntu-latest + steps: + - name: Convert date format + id: date + run: echo "::set-output name=date::$(date -d "${{ github.event.pull_request.created_at }}" +"%Y-%m-%d")" + - name: Send telegram message on review approved + uses: appleboy/telegram-action@master + with: + to: ${{ secrets.TELEGRAM_PLUGINS_TO }} + token: ${{ secrets.TELEGRAM_REVIEWER_TOKEN }} + message: | + 💥🎉🎉🎉💥 Pull-request ${{ github.event.pull_request.title }} + submitted by ${{ github.event.pull_request.user.login }} at ${{ steps.date.outputs.date }} + + was approved and is ready to merge ➡️ !!! + format: html + disable_web_page_preview: true \ No newline at end of file From 26a62406c04de1103b7ceadfe02350d5c10b3940 Mon Sep 17 00:00:00 2001 From: Glomberg Date: Mon, 4 Sep 2023 09:35:17 +0300 Subject: [PATCH 093/109] Upd: Scan. Added .ott files for scanning. --- lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php index 4bb0f416c..444203679 100755 --- a/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php +++ b/lib/CleantalkSP/SpbctWP/Scanner/ScannerQueue.php @@ -788,7 +788,7 @@ public function countFileSystem($path_to_scan = ABSPATH) $init_params = array( 'count' => true, 'file_exceptions' => 'wp-config.php', - 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, otc', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, otc', 'ott', 'files_mandatory' => array(), 'dir_exceptions' => array(SPBC_PLUGIN_DIR . 'quarantine') ); @@ -835,7 +835,7 @@ public function file_system_analysis($offset = null, $amount = null, $path_to_sc 'full_hash' => true, 'offset' => $offset, 'amount' => $amount, - 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, otc', + 'extensions' => 'php, html, htm, js, php2, php3, php4, php5, php6, php7, phtml, shtml, phar, otc', 'ott', 'extensions_exceptions' => '', //array('jpg', 'jpeg', 'png', 'gif', 'css', 'txt', 'zip', 'xml', 'json') 'file_exceptions' => 'wp-config.php', 'files_mandatory' => array(), From c25c7d022c7af97b1ca6a9e9230aee7ce66910d5 Mon Sep 17 00:00:00 2001 From: Artem Anoshin Date: Mon, 4 Sep 2023 11:57:30 +0400 Subject: [PATCH 094/109] In process --- inc/spbc-admin.php | 2 +- inc/spbc-settings.php | 14 +++++++++----- js/spbc-table.min.js | 2 +- js/spbc-table.min.js.map | 2 +- js/src/spbc-table.js | 2 +- lib/CleantalkSP/SpbctWP/ListTable.php | 3 +++ .../SpbctWP/Scanner/CureLog/CureLog.php | 6 ++++-- 7 files changed, 20 insertions(+), 11 deletions(-) diff --git a/inc/spbc-admin.php b/inc/spbc-admin.php index 5093c083e..3449bebfa 100644 --- a/inc/spbc-admin.php +++ b/inc/spbc-admin.php @@ -314,7 +314,7 @@ function spbc_enqueue_scripts($hook) // JS wp_enqueue_script('jquery-ui', SPBC_PATH . '/js/jquery-ui.min.js', array('jquery'), '1.13.1', true); wp_enqueue_script('spbc-settings-js', SPBC_PATH . '/js/spbc-settings.min.js', array('jquery'), SPBC_VERSION, true); - wp_enqueue_script('spbc-table-js', SPBC_PATH . '/js/spbc-table.min.js', array('jquery'), SPBC_VERSION, true); + wp_enqueue_script('spbc-table-js', SPBC_PATH . '/js/src/spbc-table.js', array('jquery'), SPBC_VERSION, true); if ($spbc->settings['scanner__file_monitoring']) { wp_enqueue_style('spbc-remodal-styles', SPBC_PATH . '/js/lib/remodal/remodal.css', array(), SPBC_VERSION, 'all'); diff --git a/inc/spbc-settings.php b/inc/spbc-settings.php index 764b164cb..a0f26ce09 100644 --- a/inc/spbc-settings.php +++ b/inc/spbc-settings.php @@ -3685,16 +3685,20 @@ function spbc_list_table__get_args_by_type($table_type) 'handler' => 'spbc_scanner_button_restore_from_backup_ajax_handler(this);', ), ), + 'bulk_actions' => array( + 'cure' => array('name' => 'Cure',), + ), 'func_data_total' => 'spbc_scanner__cure_log_get_count_total', 'func_data_get' => 'spbc_scanner__get_cure_log_data', 'func_data_prepare' => 'spbc_scanner__cure_log_data_prepare', 'if_empty_items' => __('There are no automatically cured files.', 'security-malware-firewall'), 'columns' => array( - 'real_path' => array('heading' => 'Path','primary' => true,), - 'last_cure_date' => array('heading' => 'Cure date',), - 'cured' => array('heading' => 'Status',), - 'cci_cured' => array('heading' => 'Threats cured count',), - 'fail_reason' => array('heading' => 'Reason of fail',), + 'cb' => array('heading' => '', 'class' => 'check-column', 'width_percent' => 2), + 'real_path' => array('heading' => 'Path','primary' => true,), + 'last_cure_date' => array('heading' => 'Cure date',), + 'cured' => array('heading' => 'Status',), + 'cci_cured' => array('heading' => 'Threats cured count',), + 'fail_reason' => array('heading' => 'Reason of fail',), ), 'order_by' => array('real_path' => 'asc'), 'pagination' => array( diff --git a/js/spbc-table.min.js b/js/spbc-table.min.js index abddd2532..629fbc17a 100644 --- a/js/spbc-table.min.js +++ b/js/spbc-table.min.js @@ -1,2 +1,2 @@ -function spbc_reload_accordion(){spbc_sendAJAXRequest({action:"spbc_scanner_tab__reload_accordion"},{notJson:!0,callback:function(t,e,a,n){jQuery(n).accordion("destroy"),jQuery(n).html(t),jQuery(n).accordion({header:"h3",heightStyle:"content",collapsible:!0,active:!1}),spbc_tbl__bulk_actions__listen(),spbc_tbl__row_actions__listen(),spbc_tbl__pagination__listen(),spbc_tbl__sort__listen(),spbcStartShowHide()}},jQuery("#spbc_scan_accordion"))}function spbc_tbl__bulk_actions__listen(){jQuery(".tbl-bulk_actions-all--apply").off("click").on("click",function(){var a,t,e;spbc_scanner.active?alert(spbcTableLocalize.scannerIsActive):(e=jQuery(this),a=e.siblings("select").children()[e.siblings("select").first()[0].selectedIndex].value,console.log(e),-1!==["approve","disapprove","send","check_analysis_status","approve_page","disapprove_page"].indexOf(a)?confirm(spbcTable.warning_bulk)&&(console.log("spbc_tbl__bulk_action_all__listen click"),t={action:"spbc_tbl-action--bulk",add_action:a,status:e.parents(".tbl-root").attr("type")},e={button:this,spinner:e.children(".tbl-preloader--small"),callback:function(t){var e;spbc_reload_accordion(),"check_analysis_status"===a&&(e="

            Analysis status updated. Total: "+t.counters.total+", updated: "+t.counters.updated+", skipped: "+t.counters.skipped+", failed: "+t.counters.failed+", queued: "+t.counters.queued+"

            ",spbcModal.open().put(e)),"send"===a&&(e="

            Files have been sent: "+t.files_sent_counter+"

            ",spbcModal.open().put(e))},errorOutput:function(t,e){e&&(t=t+"
            Additional information:
            "+e),spbcModal.open().putError(t)},timeout:6e4},spbc_sendAJAXRequest(t,e)):alert("This action is not supported for all files yet =("))}),jQuery(".tbl-bulk_actions--apply").off("click").on("click",function(){var t,e;(spbc_bulk_action||confirm(spbcTable.warning_bulk))&&(t=spbc_bulk_action||jQuery(this),"-1"!==(e=(spbc_bulk_action=t).siblings("select").children()[t.siblings("select").first()[0].selectedIndex].value)&&t.parents(".tbl-root").find(".cb-select").is(":checked")?(t.children(".tbl-preloader--small").show(),t.parents(".tbl-root").find(".cb-select:checked").first().parents("tr").find(".tbl-row_action--"+e)[0]?(t.parents(".tbl-root").find(".cb-select:checked").first().parents("tr").find(".tbl-row_action--"+e).click(),t.parents(".tbl-root").find(".cb-select:checked").first().prop("checked",!1)):(t.parents(".tbl-root").find(".cb-select:checked").first().prop("checked",!1),t.click())):(t.children(".tbl-preloader--small").hide(),spbc_bulk_action=null,"check_analysis_status"===e&&spbcModal.open().put("

            All available files are updated.

            "),"send"===e&&spbcModal.open().put("

            All available files are sent.

            "),setTimeout(spbc_reload_accordion,1900)))})}function spbc_tbl__row_actions__listen(){jQuery(".tbl-row_action--ajax").off("click").on("click",function(){var t,e,a,n;console.log("spbc_tbl__row_actions__listen click"),spbc_scanner.active?alert(spbcTableLocalize.scannerIsActive):(e={action:"spbc_tbl-action--row",add_action:(t=jQuery(this)).attr("row-action"),id:t.parents(".row-actions").attr("uid"),cols:t.parents(".row-actions").attr("cols_amount"),page_url:t.parent().attr("uid"),page_id:t.parent().attr("page_id")},a={callback:spbc_tbl__row_actions__callback,errorOutput:function(t){spbcModal.open().putError(t)},spinner:t.parents(".row-actions").children(".tbl-preloader--tiny")},!spbc_bulk_action&&(n=spbcTable["warning_"+t.attr("row-action")]||spbcTable.warning_default,"copy_file_info"===e.add_action||"check_analysis_status"===e.add_action||confirm(n))&&spbc_sendAJAXRequest(e,a,t.parents("tr")),spbc_bulk_action&&spbc_sendAJAXRequest(e,a,t.parents("tr")))})}function spbc_tbl__row_actions__callback(t,e,a,n){if(t.color&&n.css({background:t.background,color:t.color}),t.html&&(n.parent().parent().parent().prepend(t.html),setTimeout(function(){n.fadeOut(300)},1500),spbc_bulk_action||setTimeout(spbc_reload_accordion,1900)),"copy_file_info"===e.add_action&&(!0===t.success&&t.data.file_info?window.prompt("Copy the file info below and send it to support@cleantalk.org: ",t.data.file_info):(s=void 0!==t.data.error?t.data.error:"Unknown copy_file_info error",spbcModal.open().putError(s))),t.temp_html){var c=n.html();if(n.html(t.temp_html),void 0!==t.updated_template){var s=t.updated_template_type,t=t.updated_template,i=jQuery(t).find(".wp-list-table tbody tr").length,o=jQuery('[aria-controls="spbc_scan_accordion_tab_'+s+'"]');if(0a&&jQuery(e).css("outline","1px solid green")}),o.click()}else"analysis_log"===s&&(l='",s='