| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- var DBG = DBG || false;
- var DBG1 = 1;
- var _sesTimerEl = null;
- var _sesExpireTimer = USER_SESSION_EXPIRE || 1200;
- var _sesExpireCheck = false;
- if (!BASE_URL) throw "Mising BASE_URL";
- if (!SESSION_TIMER_URL) throw "Mising SESSION_TIMER_URL";
- // if (!SESSION_AUTH_STATUS_URL) throw "Mising SESSION_AUTH_STATUS_URL";
- if (!USER_LOGIN) throw "Mising USER_LOGIN";
- /**
- IAuthStatus {
- type: string "expired" | "logged_in" | "logged_in_again"
- login: string
- expire: int
- time: timestamp (seconds)
- }
- */
- function sesExpireTimeoutUpdate() {
- //console.log('sesExpireTimeoutUpdate: ' + _sesExpireTimer);
- if (!_sesTimerEl) return;
- if (_sesExpireTimer>=0) {
- var min = Math.floor(_sesExpireTimer / 60);
- var sek = _sesExpireTimer % 60;
- if (sek < 10) { sek = '0' + sek; }
- _sesTimerEl.innerHTML='' + min + ':' + sek + '';
- window.setTimeout(sesExpireTimeoutUpdate, 1000);
- } else {
- _sesTimerEl.innerHTML = 'expired!';
- window.setTimeout(sesExpireTimeoutUpdate, 1000);
- }
- _sesExpireTimer -= 1;
- }
- var sessionTimeoutStop = false;
- var sessionTimeoutCheckFreq = 5;
- var sessionTimeoutCheck = sessionTimeoutCheckFreq;
- function sesAjaxTimerCheck() {
- DBG && console.log("DBG:S:sesAjaxTimerCheck", { sessionTimeoutStop, _sesExpireTimer });
- if (sessionTimeoutStop) return;
- if (SESSION_AUTH_STATUS_URL) fetchAuthStatus(SESSION_AUTH_STATUS_URL);
- else fetchSessionTimer(SESSION_TIMER_URL);
- if (_sesExpireTimer >= 0) {
- window.setTimeout(sesAjaxTimerCheck, sessionTimeoutCheckFreq * 1000);
- _sesExpireCheck = false;
- } else {
- // if (_sesExpireCheck) {
- // alert('Your current Session is over.');
- // } else {
- // window.setTimeout('sesAjaxTimerCheck', sessionTimeoutCheckFreq * 1000);
- // _sesExpireCheck=true;
- // }
- }
- }
- function fetchAuthStatus(url) {
- window.fetch(url, {
- credentials: "same-origin",
- }).then(function (response) {
- return response.text();
- }).then(function (responseText) {
- DBG && console.log("DBG:S:fetchAuthStatus response", { responseText, sessionTimeoutStop, _sesExpireTimer });
- try {
- var json = JSON.parse(responseText);
- return json;
- } catch (e) {
- return { type: responseText };
- }
- }).then(function (data) {
- DBG && console.warn("DBG:S:response data", { data });
- if (sessionTimeoutStop) return;
- var newSesTimer = parseInt(data.expire);
- if (!isNaN(newSesTimer) && newSesTimer > 0) {
- _sesExpireTimer = newSesTimer;
- } else {
- _sesExpireTimer = -1; // logout
- sendMsgToServiceWorker('session_expired')
- showSesExpireModal()
- }
- }).catch(function (err) {
- DBG && console.error(err)
- })
- }
- function fetchSessionTimer(url) {
- window.fetch(url, {
- credentials: "same-origin",
- }).then(function (response) {
- return response.text();
- }).then(function (data) {
- DBG && console.warn("DBG:S:response data", { data });
- if (sessionTimeoutStop) return;
- var newSesTimer = parseInt(data);
- if (!isNaN(newSesTimer) && newSesTimer > 0) {
- _sesExpireTimer = newSesTimer;
- } else {
- _sesExpireTimer = -1;// logout
- sendMsgToServiceWorker('session_expired')
- showSesExpireModal()
- }
- }).catch(function (err) {
- DBG && console.error(err)
- })
- }
- function showSesExpireModal() {
- var exprModal = document.getElementById('session-timer-modal');
- if (!exprModal) {
- var modalHtml = '<div id="session-timer-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="session-timer-modal-label" aria-hidden="true">' +
- ' <div class="modal-dialog">' +
- ' <div class="modal-content">' +
- ' <div class="modal-header">' +
- ' <h3 id="session-timer-modal-label">Zostałeś wylogowany</h3>' +
- ' </div>' +
- ' <div class="modal-footer">' +
- ' <a href="index.php" class="btn btn-primary">Zaloguj</a>' +
- ' </div>' +
- ' </div>' +
- ' </div>' +
- '</div>';
- exprModal = jQuery(modalHtml).appendTo('body');
- }
- jQuery('#session-timer-modal').modal({ show: true, keyboard: false, backdrop: 'static' });
- jQuery('#session-timer-modal').show();
- }
- jQuery(document).ready(function() {
- _sesTimerEl = document.getElementById('session-timer');
- if (_sesTimerEl) {
- _sesTimerEl.innerHTML = '...';
- sesExpireTimeoutUpdate();
- }
- window.setTimeout(sesAjaxTimerCheck, sessionTimeoutCheckFreq * 1000);
- });
- function stopTimer() {
- sessionTimeoutStop = true;
- return true;
- }
- function sendMsgToServiceWorker(data) {
- if (navigator.serviceWorker && navigator.serviceWorker.controller) {
- navigator.serviceWorker.controller.postMessage(data);
- }
- }
- if ('serviceWorker' in navigator) {
- navigator.serviceWorker.register(BASE_URL + 'sw.js').then(function() {
- return navigator.serviceWorker.ready;
- }).then(function (reg) {
- DBG && console.log("SW registration succeeded. Scope is "+reg.scope, { reg });
- navigator.serviceWorker.addEventListener('message', onServiceWorkerMsg);
- sendMsgToServiceWorker({ type: 'logged_in', login: USER_LOGIN, expire: _sesExpireTimer });
- }).catch(function (err) {
- DBG && console.error("SW registration failed with error "+err);
- });
- }
- function onServiceWorkerMsg(event) {
- var data = event.data || '';
- var msgType = (data && data.type) ? data.type || '' : data;
- DBG && console.log('DBG:onServiceWorkerMsg ', { msgType, data: event.data, event })
- if ('session_expired' === msgType) {
- _sesExpireTimer = -1;// logout
- showSesExpireModal()
- } else if ('logged_in' === msgType) {
- // jQuery('#session-timer-modal').hide()
- } else if ('logged_in_again' === msgType) {
- jQuery('#session-timer-modal').hide()
- _sesExpireTimer = data.expire;
- sesExpireTimeoutUpdate();
- sessionTimeoutStop = false;
- window.setTimeout(sesAjaxTimerCheck, sessionTimeoutCheckFreq * 1000);
- }
- }
- // global.sesExpireTimeoutUpdate = sesExpireTimeoutUpdate;
- // global.sesAjaxTimerCheck = sesAjaxTimerCheck;
|