(function () { const userLanguage = navigator.language.substr(0, 2); const submitBtn = $("#check-access"); const allowAccessBtn = $("#allowAccess"); const requestAccessBtn = $("#requestAccess"); const requestAccessExtension = $("#requestAccess-extension"); submitBtn.attr('disabled', true); let isPageScanEnabled; let isUncategorized; let psApiTimeInterval; let pageScanRequestComplete = false; const translationKeys = { en: { "Allow access": "Allow access", "Request access": "Request access", "allowed": "allowed", "blocked": "blocked", "Access allowed": "Access allowed", "mins": "mins", "Request sent": "Request sent", "This website may be blocked for browser extension users.": "This website may be blocked for browser extension users.", "This website may be blocked for SmartPAC and browser extension users.": "This website may be blocked for SmartPAC and browser extension users.", "This website may be blocked for SmartPAC users.": "This website may be blocked for SmartPAC users." }, es: { "Allow access": "Permitir el acceso", "Request access": "Solicitar acceso", "allowed": "Permitido", "blocked": "Bloqueado", "Access allowed": "Acceso permitido", "mins": "minutos", "Request sent": "Solicitud enviada", "This website may be blocked for browser extension users.": "Este sitio web puede estar bloqueado para los usuarios de extensiones de navegador.", "This website may be blocked for SmartPAC and browser extension users.": "Este sitio web puede estar bloqueado para los usuarios de SmartPAC y de extensiones de navegador.", "This website may be blocked for SmartPAC users.": "Este sitio web puede estar bloqueado para los usuarios de SmartPAC." }, fr: { "Allow access": "Autoriser l'accès", "Request access": "Demander l'accès", "allowed": "Autorisé", "blocked": "Bloqué", "Access allowed": "Accès autorisé", "mins": "minutes", "Request sent": "Demande envoyée", "This website may be blocked for browser extension users.": "Ce site web peut être bloqué pour les utilisateurs d'extensions de navigateur.", "This website may be blocked for SmartPAC and browser extension users.": "Ce site web peut être bloqué pour les utilisateurs de SmartPAC et d'extensions de navigateur.", "This website may be blocked for SmartPAC users.": "Ce site peut être bloqué pour les utilisateurs de SmartPAC." } }; const allCategories = [ {caption: 'Drugs', id: 'Drugs'}, {caption: 'Educational', id: 'Educational'}, {caption: 'Gambling', id: 'Gambling'}, {caption: 'Games', id: 'Games'}, {caption: 'Health', id: 'Health'}, {caption: 'Hate', id: 'Idealogies'}, {caption: 'Chat/Messaging', id: 'Messaging'}, {caption: 'Network misuse', id: 'Network Misuse'}, {caption: 'Social networking', id: 'Networking'}, {caption: 'Other adult content', id: 'Other Adult'}, {caption: 'Other search engines', id: 'Other Search'}, {caption: 'Pornography', id: 'Pornography'}, {caption: 'Social media', id: 'Social Media'}, {caption: 'Streaming Media', id: 'Streaming Media'}, {caption: 'Web mail', id: 'Web Mail'} ]; function validateFields() { $("#lookup-error").text(''); $("#lookup-domain-error").text(''); const domain = $("#domain").val(); const userEmail = $("#email").val(); const domainREGEX = new RegExp(/^(((http|https|ftp):\/\/|)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?)$/); const emailREGEX = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/); if (domain && domain !== "" && userEmail && userEmail !== "") { if (domainREGEX.test(domain) && emailREGEX.test(userEmail)) { submitBtn.attr('disabled', false); } else { submitBtn.attr('disabled', true); } } return; } $("#accessForm input").keyup(function () { validateFields(); pageReset(); }); submitBtn.click(function (event) { checkAccess(); event.preventDefault(); }); allowAccessBtn.click(function (event) { allowAccess(); event.preventDefault(); }); requestAccessExtension.click(function (event) { requestAccessExtension.attr('disabled', true); $("#pageScan-spinner").removeClass("hide"); requestAccessPageScan() }); requestAccessBtn.click(function (event) { if(isPageScanEnabled && isUncategorized){ requestAccessBtn.attr('disabled', true); $("#pageScan-spinner").removeClass("hide"); requestAccessPageScan() } else { requestAccess(); } event.preventDefault(); }); function pageReset() { $("#lookup-results").addClass("hide"); $("#isSchoolIP").addClass("hide"); $("#result-note").addClass("hide"); $("#allow-access").addClass("hide"); $("#request-access").addClass("hide"); $("#result-note").addClass("hide"); $("#request-access-note").addClass("hide"); $("#ttl-note").addClass("hide"); $('#blocked-on-ext-note').addClass('hide'); $('#blocked-on-ext-uncategorised').addClass('hide'); $("#blocked-on-ext-uncategorised").parent().addClass("hide"); $("#cg-enabled").addClass("hide"); $("#cg-enabled").parent().addClass("hide"); $("#pageScan-check-later").addClass("hide"); $("#pageScan-success").addClass("hide"); allowAccessBtn.attr('disabled', false); requestAccessBtn.attr('disabled', false); requestAccessExtension.attr('disabled', false); allowAccessBtn.text(getTranslationKeys("Allow access")); requestAccessBtn.text(getTranslationKeys("Request access")); requestAccessExtension.text(getTranslationKeys("Request access")); } function getBlockedMessage(blockedOnExtOnly, blockedOnSpacOnly) { if (blockedOnExtOnly && blockedOnSpacOnly) { return "This website may be blocked for SmartPAC and browser extension users."; } else if (blockedOnExtOnly) { return "This website may be blocked for browser extension users."; } else if (blockedOnSpacOnly) { return "This website may be blocked for SmartPAC users."; } else { return "This website may be blocked for browser extension users."; } } function updateStatus(status) { $("#status").removeClass('allowed blocked'); $("#status-mark").removeClass('ss-check ss-ban'); $("#status-content").removeClass('red green'); if (status == 'allowed') { $("#status").addClass('allowed'); $("#status-mark").addClass('ss-check'); $("#status-content").addClass('green'); } else { $("#status").addClass('blocked'); $("#status-mark").addClass('ss-ban'); $("#status-content").addClass('red'); } $("#status-content").text(getTranslationKeys(status)); } function updateCategory(categories, blockedOnExtOnly, blockedOnSpacOnly) { if((blockedOnExtOnly || blockedOnSpacOnly) && !isUncategorized && !isPageScanEnabled) { const blockedMessage = getBlockedMessage(blockedOnExtOnly, blockedOnSpacOnly); $('#extn-blocked-message').text(getTranslationKeys(blockedMessage)); $('#blocked-on-ext-note').removeClass('hide'); $("#blocked-on-ext-note").parent().removeClass("hide"); } $("#category-info").text(""); if (categories && categories.length) { if (categories.length == 1 && categories[0]?.toUpperCase() == 'CANNOT_CATEGORIZE') { $("#category-info").text("-"); } else { let categoryInfo = []; for (let i = 0; i < categories.length; i++) { categoryInfo.push(getCategoryDisplayName(categories[i])); } $("#category-info").text(categoryInfo.toString()); } } else { $("#category-info").text("-"); } } // To map category name with ID function getCategoryDisplayName(categoryId) { const categoryInfo = allCategories.filter(category => category.id === categoryId); return categoryInfo && categoryInfo.length ? categoryInfo[0].caption : categoryId; } function updateCGAccess(customGroupApplied) { $("#cg-enabled").addClass("hide"); if (customGroupApplied) { $("#cg-enabled").removeClass("hide"); $("#cg-enabled").parent().removeClass("hide"); } else $("#cg-enabled").addClass("hide"); } function updateRequestAcess(lookupAccess) { $("#isSchoolIP").addClass("hide"); $("#result-note").addClass("hide"); // Request Access button based on API Response $("#allow-access").addClass("hide"); $("#request-access").addClass("hide"); $("#result-note").addClass("hide"); $("#request-access-note").addClass("hide"); if (lookupAccess && (lookupAccess.customGroupApplied || !lookupAccess.isSchoolIP)) $("#result-note").removeClass("hide"); if (lookupAccess && !lookupAccess.isSchoolIP) { //If IP not from school $("#isSchoolIP").removeClass("hide"); return; } if (lookupAccess && lookupAccess.status == "blocked" && lookupAccess.canAllowAccess) $("#allow-access").removeClass("hide"); else if (lookupAccess && lookupAccess.status == "blocked" && !lookupAccess.canAllowAccess) { $("#request-access").removeClass("hide"); $("#result-note").removeClass("hide"); if(!lookupAccess.isPageScanEnabled && !lookupAccess.isUncategorized) { $("#request-access-note").removeClass("hide"); } }//uncategorised and allowed but blocked on extension and pagescan is enabled else if (lookupAccess.status == "allowed" && lookupAccess.isUncategorized && (lookupAccess.blockedOnExtOnly || lookupAccess.blockedOnSpacOnly)) { const blockedMessage = getBlockedMessage(lookupAccess.blockedOnExtOnly, lookupAccess.blockedOnSpacOnly); $('#extn-blocked-message').text(getTranslationKeys(blockedMessage)); $('#blocked-on-ext-note').removeClass('hide'); $("#blocked-on-ext-note").parent().removeClass("hide"); if(lookupAccess.isPageScanEnabled) { $('#extn-blocked-message-ps').text(getTranslationKeys(blockedMessage)); $('#blocked-on-ext-uncategorised').removeClass('hide'); $("#blocked-on-ext-uncategorised").parent().removeClass("hide"); $('#blocked-on-ext-note').addClass('hide'); $("#blocked-on-ext-note").parent().addClass("hide"); } } } function getTranslationKeys(key) { const convertedKey = translationKeys[userLanguage][key]; return convertedKey ? convertedKey : key; } function checkAccess() { $.ajax({ url: "/lookup-tool/status", type: "get", data: { domain: $("#domain").val(), email: $("#email").val() }, success: function (response) { //Do Something if (response && response.type == "success") { $("#lookup-results").removeClass("hide"); submitBtn.attr("disabled", "true"); isPageScanEnabled = response.isPageScanEnabled; isUncategorized = response.isUncategorized; updateStatus(response.status); updateCategory(response.categories, response.blockedOnExtOnly, response.blockedOnSpacOnly); updateCGAccess(response.customGroupApplied); updateRequestAcess(response); // need to success call } else if (response && response.type == "error") { if (response.errorCode == 'INVALID_DOMAIN') { $("#lookup-domain-error").text(response.errorMessage); } else { $("#lookup-error").text(response.errorMessage); } } }, error: function (error) { //Do Something to handle error console.log("Error occured", error); } }); } function allowAccess() { $.ajax({ url: "/lookup-tool/allowAccess", type: "post", data: { domain: $("#domain").val(), email: $("#email").val() }, success: function (response) { //Do Something $("#ttl-note").addClass("hide"); console.log("Allow Access response came", response); if (response && response.type == "success") { allowAccessBtn.attr('disabled', true); allowAccessBtn.text(getTranslationKeys("Access allowed")); if (response.accessTime != false) { $("#ttl-note").removeClass("hide"); $("#ttl").text(response.accessTime + " " + getTranslationKeys("mins")); } else { $("#ttl-note").addClass("hide"); } } }, error: function (error) { //Do Something to handle error console.log("Allow Access Error occured", error); } }); } function requestAccess() { $.ajax({ url: "/lookup-tool/requestAccess", type: "post", data: { domain: $("#domain").val(), email: $("#email").val() }, success: function (response) { //Do Something console.log("Request Access response came", response); if (response && response.type == "success") { requestAccessBtn.attr('disabled', true); requestAccessBtn.text(getTranslationKeys("Request sent")); } }, error: function (error) { //Do Something to handle error console.log("Request Access Error occured", error); } }); } function requestAccessPageScan(){ pageScanRequestComplete = false; let params={}; params['domain']= $("#domain").val(); params['requester'] = $("#email").val(); $.get( "/app/api/sendps",params) .done(function( data ) { }) .fail(function (err) { }); //We will call checkAccessPageScan 6 times with interval for 5 seconds each pagescanInterval = setIntervalX(checkAccessPageScan, 5000, 6); } function checkAccessPageScan() { $.ajax({ url: "/lookup-tool/status", type: "get", data: { domain: $("#domain").val(), email: $("#email").val() }, success: function (response) { //Category is successfully changed by pagescan if (response && response.type == "success" && !response.isUncategorized) { isPageScanEnabled = response.isPageScanEnabled; isUncategorized = response.isUncategorized; clearInterval(psApiTimeInterval); updateStatus(response.status); updateCategory(response.categories, response.blockedOnExtOnly, response.blockedOnSpacOnly); updateRequestAcess(response); $("#pageScan-spinner").addClass("hide"); if(response.status == "allowed") { $("#pageScan-success").removeClass("hide"); } else { requestAccessBtn.attr('disabled', false); } $('#blocked-on-ext-uncategorised').addClass('hide'); $("#blocked-on-ext-uncategorised").parent().addClass("hide"); return; } //category is still not changed after 6 api calls - show check later message if(pageScanRequestComplete){ $("#pageScan-spinner").addClass("hide"); $("#pageScan-check-later").removeClass("hide"); $('#blocked-on-ext-uncategorised').addClass('hide'); $("#blocked-on-ext-uncategorised").parent().addClass("hide"); return; } if (response && response.type == "error") { if (response.errorCode == 'INVALID_DOMAIN') { $("#lookup-domain-error").text(response.errorMessage); } else { $("#lookup-error").text(response.errorMessage); } } }, error: function (error) { console.log("Error occured", error); } }); } function setIntervalX(callback, delay, repetitions) { let x = 0; psApiTimeInterval = setInterval(function () { callback(); if (++x === repetitions) { clearInterval(psApiTimeInterval); pageScanRequestComplete = true; } }, delay); } })();