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(\"\")\n\t\t.append(\"\");\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('')\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 = '';\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 = '',\n\t\trow_template_bad = '',\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 = '';\n\tlet row_template_bad = '';\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\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(\"\")\n\t\t.append(\"\");\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('
')\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 = '
';\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 = '
',\n\t\trow_template_bad = '
',\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 = '
';\n\tlet row_template_bad = '
';\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\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/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 ) {
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$tag>";
+ echo "<$tag id='$id' class='$classes' $sort_direction_attr $style>{$column['heading']}$sortable$hint$tag>";
}
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 3bd606ecd..d0d2559ac 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.115
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
*
@@ -2022,18 +2062,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 {