18978: Disable webshell idle timeout when 0.
[arvados-workbench2.git] / public / webshell / index.html
index 4044f99414c33184147d62ae5057697b4e84d95d..aae70a97afab13a30a553eb2a6196d2a074f9484 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("Session timed out after " + timeout + " seconds.");
+          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;
+             if (timeout > 0) {
+               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 {