templates/WebBundle/views/Default/assets/javascripts.html.twig line 1

Open in your IDE?
  1. {% block javascripts %}
  2.     <script src="{{ asset('bundles/tropicielweb/js/vendor/jquery-2.0.0.min.js') }}"></script>
  3.     <script src="{{ asset('bundles/tropicielweb/js/vendor/cookie.js') }}"></script>
  4.     <script src="{{ asset('bundles/tropicielweb/js/vendor/tether.min.js') }}"></script>
  5.     <script src="{{ asset('bundles/tropicielweb/js/vendor/bootstrap/bootstrap.min.js') }}"></script>
  6.     <script src="{{ asset('bundles/tropicielweb/js/vendor/jquery-file-upload/jquery.ui.widget.js') }}"></script>
  7.     <script src="{{ asset('bundles/tropicielweb/js/vendor/jquery-ui.min.js') }}"></script>
  8.     <script src="{{ asset('bundles/tropicielweb/js/vendor/datepicker-pl.js') }}"></script>
  9.     <script src="{{ asset('bundles/tropicielweb/js/vendor/handlebars.min-latest.js') }}"></script>
  10.     <script src="{{ asset('bundles/tropicielweb/js/main.js') }}"></script>
  11.     <script src="{{ asset('bundles/tropicielweb/js/kml.js') }}"></script>
  12.     <script>
  13.         const mapIdByDomain = {
  14.             'tropicielgps.pl': 'f2f24fc576e5624c',
  15.             'tropiciel.gps.ovh': '113fa8c9f989a437fac6974e',
  16.             'monitoringgps.pl': 'c678a6c60fe797c5bb6b82ec',
  17.             'obserwatorgps.pl': '6e32b9d71e7e2915137b168b',
  18.             'beta.tropicielgps.pl': '113fa8c9f989a437fac6974e',
  19.         };
  20.         var currentMapID = mapIdByDomain[window.location.hostname] ?? 'MAP_ID_UNKNOWN';
  21.         var jwtToken = "{{ app.session.get('jwt_token')|default('') }}";
  22.         var refreshToken = "{{ app.session.get('refresh_token')|default('') }}";
  23.         var lang = "{{ app.request.locale }}";
  24.         var currentPath = window.location.pathname;
  25.         if (!lang) {
  26.             lang = "pl";
  27.         }
  28.         var loginPath = "/" + lang + "/login";
  29.         var allowedLoginPaths = ["/pl/login", "/en/login"];
  30.         var isOnLoginPage = allowedLoginPaths.some(path => currentPath.startsWith(path));
  31.         if (!jwtToken && !isOnLoginPage) {
  32.             alert('Brak tokena JWT – zaloguj się ponownie.');
  33.             window.location.href = loginPath;
  34.         }
  35.         function parseJwt(token) {
  36.             try {
  37.                 const base64Url = token.split('.')[1];
  38.                 const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
  39.                 return JSON.parse(atob(base64));
  40.             } catch (e) {
  41.                 console.error("Błąd dekodowania JWT:", e);
  42.                 return null;
  43.             }
  44.         }
  45.         function shouldRefreshToken(token) {
  46.             if (isOnLoginPage) return false;
  47.             const decoded = parseJwt(token);
  48.             if (!decoded || !decoded.exp) {
  49.                 console.warn("JWT nie zawiera daty wygaśnięcia – odświeżenie wymagane.");
  50.                 return true;
  51.             }
  52.             const now = Math.floor(Date.now() / 1000);
  53.             const timeLeft = decoded.exp - now;
  54.             console.log(`JWT ważny jeszcze przez ${timeLeft} sekund.`);
  55.             if (timeLeft < 1200) {
  56.                 console.log("Token zostanie odświeżony – mniej niż 20 minut do wygaśnięcia.");
  57.                 return true;
  58.             }
  59.             return false;
  60.         }
  61.         async function refreshTokenIfNeeded() {
  62.             if ((!jwtToken || !refreshToken) && !isOnLoginPage) {
  63.                 console.warn("Brak tokenów – przekierowanie do logowania.");
  64.                 window.location.href = loginPath;
  65.                 return;
  66.             }
  67.             if (!jwtToken || !refreshToken) {
  68.                 return;
  69.             }
  70.             if (!shouldRefreshToken(jwtToken)) {
  71.                 return;
  72.             }
  73.             try {
  74.                 let response = await fetch(`/${lang}/token/refresh`, {
  75.                     method: "POST",
  76.                     headers: {"Content-Type": "application/json"},
  77.                     body: JSON.stringify({refresh_token: refreshToken})
  78.                 });
  79.                 if (response.ok) {
  80.                     let data = await response.json();
  81.                     jwtToken = data.token;
  82.                     refreshToken = data.refresh_token;
  83.                     localStorage.setItem("access_token", jwtToken);
  84.                     localStorage.setItem("refresh_token", refreshToken);
  85.                     document.cookie = "jwt_token=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC";
  86.                     document.cookie = `jwt_token=${jwtToken}; path=/`;
  87.                     document.cookie = `refresh_token=${refreshToken}; path=/`;
  88.                     $.ajaxSetup({
  89.                         beforeSend: function (xhr) {
  90.                             xhr.setRequestHeader('Authorization', 'Bearer ' + jwtToken);
  91.                         }
  92.                     });
  93.                 } else {
  94.                     console.error("Błąd podczas odświeżania tokena.");
  95.                     window.location.href = loginPath;
  96.                 }
  97.             } catch (error) {
  98.                 console.error("Błąd sieci podczas odświeżania tokena:", error);
  99.                 window.location.href = loginPath;
  100.             }
  101.         }
  102.         setInterval(refreshTokenIfNeeded, 300000);
  103.         if (jwtToken) {
  104.             $.ajaxSetup({
  105.                 beforeSend: function (xhr) {
  106.                     xhr.setRequestHeader('Authorization', 'Bearer ' + jwtToken);
  107.                 }
  108.             });
  109.         }
  110.         refreshTokenIfNeeded();
  111.         document.addEventListener('visibilitychange', () => {
  112.             if (document.visibilityState === 'visible') {
  113.                 console.log("[refresh] Powrót do zakładki – sprawdzam token...");
  114.                 refreshTokenIfNeeded();
  115.             }
  116.         });
  117.     </script>
  118. {% endblock %}