Summary Table

Categories Total Count
PII 1
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

define(['angular', 'app'], function (angular, app) {
"use strict";
app.service("connectionTimeoutService", function ($timeout, $modal, $window, unsavedWarningSharedService, userSession) {
var service = {};

var timeToExpire,
defaultExpiration = 0,
timeUnitsText = "minutes",
timeUnitText = "minute",
oneMinute = 60000,
twoMinutes = 2 * oneMinute,
threeMinutes = 3 * oneMinute,
conversionFactor = 1000,
sessionEnded = false,
timeoutPromise,
modalInstance,
modalInfo = {value: null, dismissed: true};

var timeoutDialogController = function () {
var waitTime;
timeToExpire = getTimeToExpire();

if (timeToExpire <= threeMinutes) {
showTimeoutWarning(timeToExpire);
waitTime = timeToNearestMinute(timeToExpire);
}
else {
dismissModal();
waitTime = timeToExpire - threeMinutes;
}

if (!sessionEnded) {
$timeout.cancel(timeoutPromise);
timeoutPromise = $timeout(function () {
timeoutDialogController();
}, waitTime, false);
}
};

var getTimeToExpire = function () {
if (userSession) {
var encodedJwtToken = userSession.getCookie("
PII ");
var jwtCookie;
var exp;
if (encodedJwtToken !== null) {
jwtCookie = service.parseJwt(encodedJwtToken);
exp = (jwtCookie.exp * conversionFactor) - new Date().getTime();
} else {
exp = defaultExpiration;
}
return exp;
}
};

var timeToNearestMinute = function (timeToExpire) {
if (timeToExpire > threeMinutes) {
return timeToExpire - threeMinutes;
} else if (timeToExpire > twoMinutes) {
return timeToExpire - twoMinutes;
} else if (timeToExpire > oneMinute) {
return timeToExpire - oneMinute;
} else {
return timeToExpire;
}
}

var dismissModal = function () {
if (angular.isDefined(modalInstance) && !modalInfo.dismissed) {
modalInfo.dismissed = true;
modalInstance.dismiss();
}
};

var openModal = function (template, controller, modalInfo) {
dismissModal();

modalInstance = $modal.open({
windowTemplateUrl: 'src/ui-components/modals/helper/modal-window_template.html',
templateUrl: template,
controller: controller,
backdrop: 'static',
keyboard: false,
resolve: {
modalInfo: function () {
return modalInfo;
}
}
});
};

var showTimeoutWarning = function (timeToExpire) {
var minutesToExpire = Math.round(parseInt(timeToExpire, 10) / oneMinute);

if (minutesToExpire <= 0) {
sessionEnded = true;
unsavedWarningSharedService.cleanAllForms();

openModal('src/core/connection/session_ended_template.html', ModalInstanceCtrl, modalInfo);
angular.element("div.container-fluid").remove();
}
else {
modalInfo.value = minutesToExpire;
modalInfo.unit = modalInfo.value !== 1 ? timeUnitsText : timeUnitText;
openModal('src/core/connection/timeout_warning_template.html', ModalInstanceCtrl, modalInfo);
}
};

service.run = function () {
timeoutDialogController();
};

service.showSessionEndedMsg = function () {
sessionEnded = true;
unsavedWarningSharedService.cleanAllForms();

angular.element("div.container-fluid").remove();
openModal('src/core/connection/session_ended_template.html', ModalInstanceCtrl, modalInfo);
};

service.parseJwt = function(token) {
var base64Url = token.split('.')[1];
var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
return JSON.parse($window.atob(base64));
}

return service;
});
});

function ModalInstanceCtrl($scope, $timeout, $modalInstance, modalInfo, authenticationService, userSession, focusService, pageService) {
modalInfo.dismissed = false;

$timeout(function () {
focusService.focusTopModal();
}, 600);

$scope.logout = function () {
$modalInstance.dismiss();
authenticationService.logoutRedirectToLaunchpad();
};
$scope.proceed = function () {
$modalInstance.dismiss();
userSession.refreshSession();
modalInfo.dismissed = true;
$modalInstance.result.finally(function(){
focusService.focusMain();
});
};
$scope.launchpad = function () {
$modalInstance.dismiss();
pageService.redirectToLaunchpad();
};
$scope.login = function () {
$modalInstance.dismiss();
authenticationService.authenticate();
};

$scope.modalInfo = modalInfo;
}