Merge branch '17585-Redesign-navigation-of-files-in-collections' into main
[arvados-workbench2.git] / public / webshell / index.html
index 4044f99414c33184147d62ae5057697b4e84d95d..028664c488f74b7f5dd8256d63e9a81390bdeab8 100644 (file)
       var token = urlParams.get('token');
       var user = urlParams.get('login');
       var host = urlParams.get('host');
+      var timeout = urlParams.get('timeout');
       urlParams = null;
 
+      var idleTimeoutMs = timeout * 1000;
+
+      function updateIdleTimer() {
+        var currentTime = Date.now();
+        var lastTime = localStorage.getItem('lastActiveTimestamp');
+        if (currentTime - lastTime > 1000) {
+          localStorage.setItem('lastActiveTimestamp', currentTime);
+        }
+      }
+
+      function checkIdleTimer() {
+        var currentTime = Date.now();
+        var lastTime = localStorage.getItem('lastActiveTimestamp');
+        if (currentTime - lastTime > idleTimeoutMs) {
+          //logout
+          sh.reset();
+          sh.sessionClosed();
+          document.body.onmousemove = undefined;
+          document.body.onkeydown = undefined;
+        } else {
+          setTimeout(checkIdleTimer, 1000);
+        }
+      }
+
       function login() {
         sh = new ShellInABox(host);
 
              sh.keysPressed(token + "\n");
              sh.vt100('(sent authentication token)\n');
              token = null;
+             updateIdleTimer();
+             document.body.onmousemove = updateIdleTimer;
+             document.body.onkeydown = updateIdleTimer;
+             setTimeout(checkIdleTimer, 1000);
           } else {
             setTimeout(trySendToken, 200);
           }
 
       function init() {
         if (token) {
-          history.replaceState(null, "", `/webshell/?host=${encodeURIComponent(host)}&login=${encodeURIComponent(login)}`);
+          history.replaceState(null, "", `/webshell/?host=${encodeURIComponent(host)}&timeout=${timeout}&login=${encodeURIComponent(user)}`);
         } else if (localStorage.getItem('apiToken')) {
           token = localStorage.getItem('apiToken');
         } else {