Message from Axure
Axure strives to provide an easy and secure way to share ideas and prototypes. If you see content that may be deceptive, please
click here to report it.
`;
let $banner;
let prototypeId;
window.addEventListener("load", () => {
init();
});
function init() {
if (isCloud()) return;
$axure.internal(function ($ax) {
prototypeId = $ax.document.configuration.prototypeId;
// check for is banner already viewed
// and initially loaded page (skip for further)
if (isBannerAlreadyViewed()
|| !isInitiallyLoadedPage()) return;
// check for page has interactions with external link
if (isInteractionMapHasExternalLinks($ax.pageData.page.interactionMap)) {
showBanner();
initInitiallyLoadedPageSafe(false);
return;
}
// check for widgets has external links
var scriptIds = $ax.getAllScriptIds();
for (var i = 0; i < scriptIds.length; i++) {
var diagramObject = $ax.getObjectFromScriptId(scriptIds[i]);
if (isInlineFrameHasExternalLinks(diagramObject)
|| isInteractionMapHasExternalLinks(diagramObject.interactionMap)) {
// has external links
showBanner();
initInitiallyLoadedPageSafe(false);
return;
}
}
initInitiallyLoadedPageSafe(true);
});
}
// look for external links in inlineFrame widget
function isInlineFrameHasExternalLinks(dObj) {
if (!dObj.type === "inlineFrame") {
return false;
}
return isExternalTarget(dObj.target);
}
// look for external links in interactionMap
function isInteractionMapHasExternalLinks(interactionMap) {
if (!interactionMap) {
return false;
}
let isExternalLinkFound = false;
Object.values(interactionMap).every(value => {
var cases = value.cases;
if (cases) {
cases.every(caseItem => {
var actions = caseItem.actions;
if (actions) {
actions.every(actionItem => {
if (actionItem.action === "linkWindow"
&& isExternalTarget(actionItem.target)) {
isExternalLinkFound = true;
}
return !isExternalLinkFound; // break if external link found
});
}
return !isExternalLinkFound; // break if external link found
});
}
return !isExternalLinkFound; // break if external link found
});
return isExternalLinkFound;
}
function isExternalTarget(target) {
// if targetType is webUrl we can don't care about real URL
// but skip if url is empty
return target && target.targetType === "webUrl" && !isUrlLiteralEmpty(target.urlLiteral);
}
function isUrlLiteralEmpty(urlLiteral) {
// empty if empty links ““ as well as links equal to "https://"
return !urlLiteral || !urlLiteral.value || urlLiteral.value === "https://";
}
function showBanner() {
var hostUrl = AXSHARE_HOST_SECURE_URL || window.AXSHARE_HOST_SECURE_URL;
$.ajax( {
type: 'GET',
dataType: 'jsonp',
url: hostUrl + '/prototype/showPhishingBanner?sk=' +prototypeId,
success: function (response) {
if(response.success) {
$banner = $(template).appendTo("body");
attachEvents($banner);
$banner.show();
}
}
});
}
function attachEvents($banner) {
$(document).on('click', $banner, function(e){
e.stopPropagation();
});
$(document).on('click', '#phishing-banner-report', function(e){
reportHandler(e);
});
$(document).on('click', '#phishing-banner-footer-button', function(e){
okHandler(e);
});
$(document).on('click', '#phishing-banner-link', function(e){
e.stopPropagation();
});
}
function getLocalStorageKey() {
return `PB-${prototypeId}`;
}
function reportHandler(e) {
e.stopPropagation();
localStorage.setItem(getLocalStorageKey(), "report");
const prototypeLink = document.location.href;
reportPrototype(prototypeId, prototypeLink);
if ($banner) {
const $bannerText = $banner.find("#phishing-banner-text");
$bannerText.text("Thank you for reporting this project. We will review it and take the appropriate action.");
}
}
function okHandler(e) {
e.stopPropagation();
localStorage.setItem(getLocalStorageKey(), "ok");
if ($banner) {
$banner.hide();
}
}
function isBannerAlreadyViewed() {
if (localStorage.getItem(getLocalStorageKey())) {
return true;
}
return false;
}
function isCloud() {
const player = getPlayer();
if (player && player.isCloud) {
return true;
}
return false;
}
function initInitiallyLoadedPageSafe(isSafe) {
const player = getPlayer();
if (!player || player.isFirstLoadedPageSafe !== undefined) {
return;
}
player.isFirstLoadedPageSafe = isSafe;
}
function isInitiallyLoadedPage() {
const player = getPlayer();
if (player) {
return player.isFirstLoadedPageSafe === undefined;
}
return true;
}
function getPlayer() {
const parentWindow = window.parent;
if (parentWindow
&& parentWindow.$axure
&& parentWindow.$axure.player) {
return parentWindow.$axure.player;
}
return undefined;
}
function reportPrototype(shortcut, link) {
var hostUrl = AXSHARE_HOST_SECURE_URL || window.AXSHARE_HOST_SECURE_URL;
$.ajax({
type: "POST",
url: hostUrl + '/prototype/reportprototype',
data: { shortcut, link }
});
}
})();