17229: Webshell add idle timer and auto log out
[arvados-workbench2.git] / public / webshell / index.html
index 722cab5a887ef733df22babefcec33c3b1303620..126962b6a764c6d49082a1a41d50a2eb9e4d8a17 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.sendKeys('03'); // Ctrl + c
+          sh.sendKeys('04'); // Ctrl + d
+        } 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(user)}`);
+          history.replaceState(null, "", `/webshell/?host=${encodeURIComponent(host)}&timeout=${timeout}&login=${encodeURIComponent(user)}`);
         } else if (localStorage.getItem('apiToken')) {
           token = localStorage.getItem('apiToken');
         } else {