Current File : /home/n742ef5/royalanteam.com/wp-content/plugins/security-malware-firewall/js/spbc-admin.min.js.map
{"version":3,"file":"spbc-admin.min.js","sources":["spbc-admin.js"],"sourcesContent":["/**\n * Get Google Qr Code\n *\n * @return {object}\n */\nfunction spbcGetGoogleQrCode() {\n    let data = {};\n    let res = {};\n    data.security = spbcSettings.ajax_nonce;\n    data.action = 'spbc_get_google_qr_code';\n\n    jQuery.ajax({\n        type: 'POST',\n        async: false,\n        url: spbcSettings.ajaxurl,\n        data: data,\n        success: function(result) {\n            res = result;\n        },\n    });\n    return res;\n}\n\n/**\n * Check Google Code\n */\nfunction spbcCheckGoogleCode() {\n    let data = {};\n    data.security = spbcSettings.ajax_nonce;\n    data.action = 'spbc_check_google_code';\n    data.code = jQuery('#spbct-google-qr-code input').val();\n\n    jQuery.ajax({\n        type: 'POST',\n        async: false,\n        url: spbcSettings.ajaxurl,\n        data: data,\n        success: function(result) {\n            if (result.success) {\n                jQuery('#spbct-google-qr-code').dialog( 'close' );\n                const submitButton = jQuery('form#your-profile input#submit');\n                if (submitButton.length > 0) {\n                    submitButton.click();\n                }\n            } else {\n                alert(result.data);\n            }\n        },\n    });\n}\n\n/**\n * Disable Google 2fa\n *\n * @param {string} element\n */\nfunction spbcDisableG2fa( element ) {\n    let data = {};\n    data.security = spbcSettings.ajax_nonce;\n    data.action = 'spbc_disable_google_2fa';\n    data.user_id = jQuery(element).data('user-id');\n\n    jQuery.ajax({\n        type: 'POST',\n        async: false,\n        url: spbcSettings.ajaxurl,\n        data: data,\n        success: function(result) {\n            if (result.success) {\n                document.location.reload();\n            } else {\n                alert(result.data);\n            }\n        },\n    });\n}\n\n/**\n * Check Vulnerability\n *\n * @param {array} list\n * @param {string} type\n */\nfunction spbcCheckVulnerability(list, type = 'install') {\n    let data = {};\n    data.security = spbcSettings.ajax_nonce;\n    data.action = type === 'install' ? 'spbc_check_vulnerability_install' : 'spbc_check_vulnerability_list';\n    data.list = list;\n\n    jQuery.ajax({\n        type: 'POST',\n        async: false,\n        url: spbcSettings.ajaxurl,\n        data: data,\n        success: function(result) {\n            if (result.success) {\n                if (type === 'install') {\n                    spbcCheckVulnerabilityInstallRender(result.list, result.msg);\n                }\n                if (type === 'list') {\n                    spbcCheckVulnerabilityListRender(result.list);\n                }\n            } else {\n                console.log(result);\n            }\n        },\n    });\n}\n\n/**\n * Check Vulnerability List Render\n *\n * @param {object} list\n * @param {string} msg\n */\nfunction spbcCheckVulnerabilityListRender(list) {\n    let card;\n    let badge;\n\n    list.forEach((el) => {\n        badge = document.createElement('div');\n        badge.classList.add('notice', 'notice-error', 'error-message', 'spbc-vulnerable-notice');\n        badge.innerHTML = el.msg;\n        card = document.querySelector('.themes .theme[data-slug=' + el.slug + ']');\n        if (card) {\n            card.appendChild(badge);\n        }\n    });\n}\n\n/**\n * Check Vulnerability Install Render\n *\n * @param {object} list\n * @param {string} msg\n */\nfunction spbcCheckVulnerabilityInstallRender(list, msg) {\n    let card;\n\n    let badge = document.createElement('div');\n    badge.classList.add('notice');\n    badge.innerHTML = '<p>' + msg + '</p>';\n\n    list.forEach((el) => {\n        card = document.querySelector('.theme-id-container .theme-actions a[data-slug=' + el + ']');\n        if (card) {\n            card.parentNode.parentNode.parentNode.appendChild(badge);\n        }\n    });\n}\n\njQuery(document).ready(function() {\n    if (window.location.href.indexOf('themes.php') > -1 && spbcSettings.vulnerabilityShowList) {\n        let slugsState = [];\n        let slugs = [];\n        let slugsNodes;\n        let version;\n\n        setInterval(function() {\n            slugsNodes = document.querySelectorAll('.themes .theme[data-slug]');\n\n            if (slugsNodes.length > 0) {\n                slugs = [];\n                slugsNodes.forEach(function(el) {\n                    version = el.querySelector('img').src ?\n                        el.querySelector('img').src.match(/ver=([\\d\\.]+)/)[1] :\n                        null;\n                    slugs.push({'slug': el.dataset.slug, 'version': version});\n                });\n            }\n\n            if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\n                slugsState = slugs;\n                spbcCheckVulnerability(slugs, 'list');\n            }\n        }, 500);\n    }\n\n    if (window.location.href.indexOf('theme-install.php') > -1 && spbcSettings.vulnerabilityShowInstall) {\n        let slugsState = [];\n        let slugs = [];\n        let slugsNodes;\n\n        setInterval(function() {\n            slugsNodes = document.querySelectorAll('.theme-id-container .theme-actions a[data-slug]');\n\n            if (slugsNodes.length > 0) {\n                slugs = [];\n                slugsNodes.forEach(function(el) {\n                    slugs.push(el.dataset.slug);\n                });\n            }\n\n            if (JSON.stringify(slugs) != JSON.stringify(slugsState)) {\n                slugsState = slugs;\n                spbcCheckVulnerability(slugs);\n            }\n        }, 500);\n    }\n\n    // Auto update banner close handler\n    jQuery('.spbc_update_notice').on('click', 'button', function() {\n        spbcSetCookie('spbc_update_banner_closed', 1, 86400 * 30);\n    });\n\n    // Enable G2FA from user profile page\n    jQuery(document).on('click', '#spbc-g2fa-enable', function(e) {\n        e.preventDefault();\n        let spbcGoogleQrCode = spbcGetGoogleQrCode();\n\n        if ( spbcGoogleQrCode.success ) {\n            let qrCodeDiv = jQuery('#spbct-google-qr-code-img');\n            qrCodeDiv.html(spbcGoogleQrCode.data.img + '<p>' + spbcGoogleQrCode.data.code + '</p>');\n            jQuery('#spbct-google-qr-code input').val('');\n            jQuery('#spbct-google-qr-code').dialog({\n                modal: true,\n                title: 'Google authenticator activation',\n                buttons: {\n                    Cancel: function() {\n                        jQuery( this ).dialog( 'close' );\n                    },\n                    Ok: function() {\n                        spbcCheckGoogleCode();\n                    },\n                },\n                draggable: false,\n                resizable: false,\n            });\n        } else {\n            alert(spbcGetGoogleQrCode.data);\n        }\n    });\n\n    // Disable G2FA from user profile page\n    jQuery(document).on('click', '#spbc-g2fa-disable', function(e) {\n        e.preventDefault();\n        if ( confirm( 'Are you sure?' ) ) {\n            spbcDisableG2fa( this );\n        }\n    });\n\n    let refreshUserOnlineCounter = function( result, data, params ) {\n        setTimeout(function() {\n            if ( result !== null ) {\n                jQuery('.spbc-admin_bar--user_counter').html(result.count);\n                if ( result.count <= 3 ) {\n                    jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').show();\n                    jQuery('.spbc-admin_bar--online_admins').html(result.users.join(', '));\n                } else {\n                    jQuery('#wp-admin-bar-spbc_admin_bar__online_admins').hide();\n                }\n            }\n            spbcSendAJAXRequest( data, params );\n        }, 15000 );\n    };\n\n    if ( +spbcSettings.admin_bar__admins_online_counter === 1 ) {\n        refreshUserOnlineCounter(null, {action: 'spbc_get_authorized_admins'}, {callback: refreshUserOnlineCounter});\n    }\n\n    // Dismiss admin banner\n    spbcHandleBannersDismissing();\n\n    if (+spbcSettings.needToWhitelist === 1) {\n        spbcSendAJAXRequest( {'action': 'spbc_private_list_add'}, {'callback': null} );\n    }\n\n    if ( +spbcSettings.critical > 0) {\n        let ringContainer = document.createElement('div');\n        ringContainer.className = 'spbc_ring-container';\n        ringContainer.style.top = '0px';\n        ringContainer.style.right = '70px';\n        let ringRing = document.createElement('div');\n        ringRing.className = 'spbc_ringring';\n        let circle = document.createElement('div');\n        circle.className = 'spbc_circle';\n\n        ringContainer.appendChild(ringRing);\n        ringContainer.appendChild(circle);\n\n        let settings = document.querySelector('#menu-settings');\n        if (settings) {\n            settings.appendChild(ringContainer);\n        }\n    }\n\n    jQuery(document).on('keyup', '#spbc_key', function(e) {\n        e.preventDefault();\n        let value = jQuery('#spbc_key').val();\n        if (/^[a-zA-Z0-9]+$/.test(value) && value.length > 8) {\n            jQuery('#spbc-key-manually-link').hide();\n            jQuery('#spbc_setting_get_key_auto').hide();\n            jQuery('#spbc_get_key_or_text').hide();\n        } else {\n            jQuery('#spbc-key-manually-link').show();\n            jQuery('#spbc_setting_get_key_auto').show();\n            jQuery('#spbc_get_key_or_text').show();\n        }\n    });\n\n    if (spbcSettings['wl_mode_enabled']) {\n        // any usage of non WL name\n        jQuery('.plugin-title strong').each( function(i, item) {\n            if (jQuery(item).html().indexOf('Security by CleanTalk') >= 0) {\n                jQuery(item).html(jQuery(item).html().replace('CleanTalk', spbcSettings['wl_company_name']));\n            }\n        });\n        // Edit plugin update chunks and links\n        const updateLink = jQuery(\n            '.plugin-update-tr[data-slug=\"security-malware-firewall\"] .open-plugin-details-modal',\n        );\n        const updateText = updateLink.text();\n        const version = updateText.match(/version (\\d+\\.\\d+)/i)?.[1];\n        updateLink.remove();\n        jQuery('.plugin-update-tr[data-slug=\"security-malware-firewall\"] p').each(function() {\n            let href = jQuery(\n                `.plugin-update-tr[data-slug=\"security-malware-firewall\"]\n                a[aria-label=\"Update Security by CleanTalk now\"]`,\n            );\n            const textToReplace = 'Update now to ' + version;\n            href.text(textToReplace);\n            jQuery(this).text(jQuery(this).text().replace('  or ', ''));\n            jQuery(this).text(jQuery(this).text().replace(textToReplace + '.', ' '));\n            jQuery(this).append(href);\n        });\n    }\n});\n\n/**\n * Summary Show CDN Checker Table\n */\nfunction spbcSummaryShowCDNCheckerTable() {/* eslint-disable-line no-unused-vars */\n    event.preventDefault();\n    let table = document.getElementById('spbc_stats_cdn_checker_table');\n    if (typeof (table) !== 'undefined') {\n        if (table.style.display === 'block') {\n            table.style.display = 'none';\n        } else {\n            table.style.display = 'block';\n        }\n    }\n}\n\n/**\n * Dismiss function for banners.\n */\nfunction spbcHandleBannersDismissing() {\n    let body = jQuery('body');\n    body.on('click', '.spbct-notice-dismiss-link', function(e) {\n        jQuery(e.target).siblings('.notice-dismiss').click();\n    });\n    body.on('click', '.spbc-notice .notice-dismiss', function(e) {\n        const bannerId = jQuery(e.target).parent('.notice').attr('id');\n        if (bannerId) {\n            // call ajax to dismiss banner anyway\n            // todo There is no case when further API call for notice_review is unsuccessful,\n            // todo but it should be handled in the future\n            spbcSendAJAXRequest({'action': 'spbc_dismiss_banner', 'banner_id': bannerId}, {});\n\n            // check if there is a postNoticeText to show after dismissing the notice\n            if (\n                typeof spbcSettings !== 'undefined' &&\n                spbcSettings.hasOwnProperty('spbctNoticeDismissSuccess')\n            ) {\n                // get afterDismissingNotices from localized settings\n                let afterDismissingNotices = spbcSettings.spbctNoticeDismissSuccess;\n                // default postNoticeText\n                let postNoticeText = '';\n                // default notice level\n                let noticeLevel = '';\n                if (typeof afterDismissingNotices === 'string') {\n                    // try to parse JSON\n                    try {\n                        afterDismissingNotices = JSON.parse(afterDismissingNotices);\n                    } catch (e) {\n                        afterDismissingNotices = [];\n                    }\n                    // get postNoticeText and noticeLevel according to bannerName\n                    for (const afterDismissingNotice of afterDismissingNotices) {\n                        if (\n                            afterDismissingNotice.hasOwnProperty('bannerName') &&\n                            afterDismissingNotice.hasOwnProperty('postNoticeText')\n                        ) {\n                            let bannerName = afterDismissingNotice.bannerName;\n                            // if banner name is in the bannerId, show the postNoticeText\n                            if (bannerId.indexOf(bannerName) !== -1) {\n                                postNoticeText = afterDismissingNotice.postNoticeText;\n                            }\n                            // if noticeLevel is set, use it\n                            if (afterDismissingNotice.hasOwnProperty('noticeLevel')) {\n                                noticeLevel = afterDismissingNotice.noticeLevel;\n                            }\n                        }\n                    }\n                }\n\n                // if postNoticeText is set, show it\n                if (postNoticeText !== '') {\n                    const noticeClassList = 'notice ' + noticeLevel + ' is-dismissible';\n                    let elem = '<div id=\"spbct-notice-dismiss-success\" class=\"' + noticeClassList + '\">' +\n                            '<p>' +\n                            postNoticeText +\n                            '</p></div>';\n                    jQuery(e.target)\n                        .parent('.notice')\n                        .after(elem);\n                    setTimeout(function() {\n                        jQuery('#spbct-notice-dismiss-success').fadeOut();\n                    }, 5000);\n                }\n            }\n        }\n    });\n}\n\n// eslint-disable-next-line no-unused-vars\n/**\n * Highlights the critical files notice if the URL contains specific parameters.\n *\n * @param {boolean} [isBannerCall=false] - Indicates if the function is called from a banner.\n *\n */\nfunction spbcHighlightCriticalFilesNotice(isBannerCall = false) { // eslint-disable-line no-unused-vars\n    // Check if the URL contains the parameters to highlight the notice\n    let needToHighlightNotice = window.location.href.indexOf('spbc_tab=scanner&highlight_critical_files=1') !== -1;\n    let redirectConditionIsOK = window.location.href.indexOf('spbc_tab=scanner') === -1;\n\n    // Redirect to the scanner tab if called from a banner and the condition is met\n    if (isBannerCall && redirectConditionIsOK) {\n        window.location.href = 'options-general.php?page=spbc&spbc_tab=scanner&highlight_critical_files=1';\n        return;\n    }\n\n    // If the notice needs to be highlighted\n    if (needToHighlightNotice || isBannerCall) {\n        let criticalFilesNotice = null;\n        let criticalFilesNotices = document.querySelectorAll('#notice_id_found_critical_files');\n\n        // Find the critical files notice within the scanner tab\n        if (criticalFilesNotices.length > 0) {\n            criticalFilesNotices.forEach((notice) => {\n                if (criticalFilesNotice == null) {\n                    if (notice.closest('#spbc_tab-scanner') !== null) {\n                        criticalFilesNotice = notice;\n                    }\n                }\n            });\n        }\n        // Scroll to the notice and highlight it with a blinking effect\n        if (criticalFilesNotice !== null) {\n            criticalFilesNotice.scrollIntoView({behavior: 'smooth', block: 'start'});\n            if (!criticalFilesNotice.hasOwnProperty('highlighted')) {\n                let switcher = false;\n                setInterval(() => {\n                    switcher = !switcher;\n                    if (switcher) {\n                        criticalFilesNotice.classList.remove('notice-warning');\n                        criticalFilesNotice.classList.add('notice-error');\n                        criticalFilesNotice.highlighted = true;\n                    } else {\n                        criticalFilesNotice.classList.remove('notice-error');\n                        criticalFilesNotice.classList.add('notice-warning');\n                    }\n                }, 1000);\n            }\n        }\n\n        // Expand the critical files table if it exits and is collapsed\n        let criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\n        if (criticalFileTable !== null) {\n            if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\n                criticalFileTable.click();\n            }\n        } else {\n            // Check periodically if the table is loaded and expand it\n            const tabLoadingCheckInterval = setInterval(() => {\n                criticalFileTable = document.querySelector('h3[aria-controls=\"spbc_scan_accordion_tab_critical\"]');\n                if (criticalFileTable !== null) {\n                    if (!criticalFileTable.classList.contains('ui-accordion-header-active')) {\n                        criticalFileTable.click();\n                    }\n                    clearInterval(tabLoadingCheckInterval);\n                }\n            }, 150);\n        }\n    }\n}\n"],"names":["spbcGetGoogleQrCode","let","data","res","security","spbcSettings","ajax_nonce","action","jQuery","ajax","type","async","url","ajaxurl","success","result","spbcCheckGoogleCode","code","val","submitButton","dialog","length","click","alert","spbcDisableG2fa","element","user_id","document","location","reload","spbcCheckVulnerability","list","spbcCheckVulnerabilityInstallRender","msg","spbcCheckVulnerabilityListRender","console","log","card","badge","forEach","createElement","classList","add","innerHTML","el","querySelector","slug","appendChild","parentNode","spbcSummaryShowCDNCheckerTable","event","preventDefault","table","getElementById","style","display","spbcHandleBannersDismissing","body","on","e","target","siblings","bannerName","elem","bannerId","parent","attr","spbcSendAJAXRequest","banner_id","hasOwnProperty","afterDismissingNotices","spbctNoticeDismissSuccess","postNoticeText","noticeLevel","JSON","parse","afterDismissingNotice","indexOf","after","setTimeout","fadeOut","spbcHighlightCriticalFilesNotice","isBannerCall","needToHighlightNotice","window","href","redirectConditionIsOK","criticalFilesNotice","criticalFilesNotices","querySelectorAll","notice","closest","scrollIntoView","behavior","block","switcher","setInterval","remove","highlighted","criticalFileTable","contains","tabLoadingCheckInterval","clearInterval","ready","vulnerabilityShowList","slugsState","slugs","slugsNodes","version","src","match","push","dataset","stringify","vulnerabilityShowInstall","spbcSetCookie","spbcGoogleQrCode","html","img","modal","title","buttons","Cancel","this","Ok","draggable","resizable","confirm","refreshUserOnlineCounter","params","count","show","users","join","hide","ringContainer","settings","admin_bar__admins_online_counter","callback","needToWhitelist","critical","className","top","right","ringRing","circle","value","test","each","i","item","replace","updateLink","text","textToReplace","append"],"mappings":"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"}