|
Server : Apache System : Linux server.mata-lashes.com 3.10.0-1160.90.1.el7.x86_64 #1 SMP Thu May 4 15:21:22 UTC 2023 x86_64 User : matalashes ( 1004) PHP Version : 8.1.29 Disable Function : NONE Directory : /home/matalashes/www/wp-content/plugins/security-malware-firewall/js/ |
Upload 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\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('<h3 class=\"spbc_log-block_header\">Heuristic Analysis</h3>');\n\t\t\tif( this.state === 'signature_analysis' && typeof result.total !== 0 )\n\t\t\t\tthis.logRaw('<h3 class=\"spbc_log-block_header\">Signature Analysis</h3>');\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 + '<br>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( '<p class=\"spbc_log-line\">' + this.getSiteUTCShiftedTimeString() + ' - ' + items[ key ].path + '<b>: ' + items[ key ].status + '</b></p>' );\n\t\t}\n\t};\n\n\tlogStageEntry(data){\n\t\tthis.logRaw( '<p class=\"spbc_log-line\">' + this.getSiteUTCShiftedTimeString() + ' - ' + '<b>' + data.title + '</b> ' + '<span>' + data.description + '</span></p>' );\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'<div style=\"text-align: center;\" id=\"spbc_notice_about_shuffle_link\">' +\n\t\t\t\t'<a href=\"#\" ' +\n\t\t\t\t'onclick=\"spbc_switchTab(document.getElementsByClassName(\\'spbc_tab_nav-settings_general\\')[0], {target: \\'action-shuffle-salts-wrapper\\', action: \\'highlight\\', times: 3})\">' +\n\t\t\t\tmessage +\n\t\t\t\t'</a>' +\n\t\t\t\t'</div>'\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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"}