From a7132db14d945c53af4ea3e12a3b2d8e282fec4e Mon Sep 17 00:00:00 2001
From: Gospodin Bodurov <gospodin.bodurov@vereign.com>
Date: Fri, 3 May 2019 08:10:59 +0000
Subject: [PATCH] Revert "Merge branch
 '525-dashborad-shows-no-authentication-values-error-randomly' into 'master'"

This reverts merge request !42
---
 javascript/src/iframe/viamapi-iframe.js | 272 +++++++++++-------------
 1 file changed, 124 insertions(+), 148 deletions(-)

diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index ebcf31d..63ad5c2 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -710,39 +710,25 @@ const connection = Penpal.connectToParent({
       });
     },
     logout: async () => {
-      try {
-        const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
-        if (!authenticationPublicKey || !window.loadedIdentities[authenticationPublicKey]) {
-          return {
-            data: "",
-            code: "400",
-            status: "Identity not loaded"
-          };
-        }
-
-        // Clone headers to be able destroy authentication first.
-        // We need it because clients should be able reload page right after logout invocation and not wait until request completed
-        const headers = {...window.viamApi.getConfig().headers};
-
-        destroyAuthentication();
-
-        const identityLogoutResponse = await executeRestfulFunction(
-          "private",
-          window.viamApi,
-          window.viamApi.identityLogout,
-          {
-            headers
-          }
-        );
-
-        return identityLogoutResponse;
-      } catch (e) {
+      const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
+      if (!authenticationPublicKey || !window.loadedIdentities[authenticationPublicKey]) {
         return {
           data: "",
           code: "400",
-          status: e.message
+          status: "Identity not loaded"
         };
       }
+
+      const identityLogoutResponse = await executeRestfulFunction(
+        "private",
+        window.viamApi,
+        window.viamApi.identityLogout,
+        null
+      );
+
+      destroyAuthentication();
+
+      return identityLogoutResponse;
     },
     identityRestoreAccess(restoreAccessIdentity, identificator) {
       return new Penpal.Promise(result => {
@@ -1286,23 +1272,80 @@ connection.promise.then(parent => {
     }
   }, 50);
 
-  const getNewEventsWithoutSession = async () => {
-    anynomousDeviceKeyEventsProcessing = true;
-    try {
-      const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey");
-      if(executeResult.code === "200") {
-        const eventsLen = executeResult.data.length;
-        let changedMaxDeviceKeyAnonymousEventTime = false;
-        for (let i = 0; i < eventsLen; i++) {
-          const event = executeResult.data[i];
-          switch (event.type) {
-            case "DeviceConfirmed" : {
-              await setIdentityInLocalStorage(window.currentlyLoadedIdentity);
-              parent.onEvent(event);
-              break;
+  setInterval(async () => {
+    if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) {
+      anynomousDeviceKeyEventsProcessing = true;
+      try {
+        const executeResult = await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventGetNewEventsWithoutSession, null, "devicekey");
+        if(executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
+          let changedMaxDeviceKeyAnonymousEventTime = false;
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            switch (event.type) {
+              case "DeviceConfirmed" : {
+                await setIdentityInLocalStorage(window.currentlyLoadedIdentity);
+                parent.onEvent(event);
+                break;
+              }
+
+              case "QRCodeUpdated" : {
+                const actionID = event["actionID"];
+                const QrCode = event["payloads"][1];
+
+                const eventCopy = JSON.parse(JSON.stringify(event));
+
+                QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
+                  eventCopy["payloads"].push(url);
+                  parent.onEvent(eventCopy);
+                });
+                break;
+              }
+
+              case "KeyDeleted" : {
+                const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
+                clearPinCodeTtl(authenticationPublicKey);
+                localStorage.removeItem("uuid");
+                localStorage.removeItem("token");
+                localStorage.removeItem("authenticatedIdentity");
+                delete window.loadedIdentities[authenticationPublicKey];
+                window.currentlyLoadedIdentity = null;
+                window.currentlyAuthenticatedIdentity = null;
+                window.lastTimeGetProfile = 0;
+
+                destroyIdentityFromLocalStorage(authenticationPublicKey);
+                break;
+              }
+
+              default : {
+                parent.onEvent(event);
+              }
             }
+            changedMaxDeviceKeyAnonymousEventTime = true;
+            maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
+          }
+
+          if(changedMaxDeviceKeyAnonymousEventTime) {
+            await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
+              null, "devicekey", maxDeviceKeyAnonymousEventTime.toString());
+          }
+        }
+      } catch (e) {
+        console.warn(e);
+      }
+      anynomousDeviceKeyEventsProcessing = false;
+    }
 
-            case "QRCodeUpdated" : {
+    if (window.currentlyAuthenticatedIdentity != null && eventsDeviceEventsProcessing === false) {
+      eventsDeviceEventsProcessing = true;
+      try {
+        const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey");
+        if (executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
+          const changedMaxDeviceKeyEventTime = false;
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            if (event.type === "QRCodeUpdated") {
               const actionID = event["actionID"];
               const QrCode = event["payloads"][1];
 
@@ -1312,126 +1355,59 @@ connection.promise.then(parent => {
                 eventCopy["payloads"].push(url);
                 parent.onEvent(eventCopy);
               });
-              break;
-            }
-
-            case "KeyDeleted" : {
-              const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
-              clearPinCodeTtl(authenticationPublicKey);
-              localStorage.removeItem("uuid");
-              localStorage.removeItem("token");
-              localStorage.removeItem("authenticatedIdentity");
-              delete window.loadedIdentities[authenticationPublicKey];
-              window.currentlyLoadedIdentity = null;
-              window.currentlyAuthenticatedIdentity = null;
-              window.lastTimeGetProfile = 0;
-
-              destroyIdentityFromLocalStorage(authenticationPublicKey);
-              break;
-            }
-
-            default : {
+            } else {
               parent.onEvent(event);
             }
+            maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
           }
-          changedMaxDeviceKeyAnonymousEventTime = true;
-          maxDeviceKeyAnonymousEventTime = Math.max(maxDeviceKeyAnonymousEventTime, event.stamp);
-        }
-
-        if(changedMaxDeviceKeyAnonymousEventTime) {
-          await executeRestfulFunction("public", viamAnonymousApi, viamAnonymousApi.eventUpdateLastViewedWithoutSession,
-            null, "devicekey", maxDeviceKeyAnonymousEventTime.toString());
-        }
-      }
-    } catch (e) {
-      console.warn(e);
-    }
-    anynomousDeviceKeyEventsProcessing = false;
-  };
-
-  const getNewDeviceEvents = async () => {
-    eventsDeviceEventsProcessing = true;
-    try {
-      const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "devicekey");
-      if (executeResult.code === "200") {
-        const eventsLen = executeResult.data.length;
-        const changedMaxDeviceKeyEventTime = false;
-        for (let i = 0; i < eventsLen; i++) {
-          const event = executeResult.data[i];
-          if (event.type === "QRCodeUpdated") {
-            const actionID = event["actionID"];
-            const QrCode = event["payloads"][1];
-
-            const eventCopy = JSON.parse(JSON.stringify(event));
-
-            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
-              eventCopy["payloads"].push(url);
-              parent.onEvent(eventCopy);
-            });
-          } else {
-            parent.onEvent(event);
+          if(changedMaxDeviceKeyEventTime) {
+            await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey",
+              maxDeviceKeyEventTime.toString());
           }
-          maxDeviceKeyEventTime = Math.max(maxDeviceKeyEventTime, event.stamp);
-        }
-        if(changedMaxDeviceKeyEventTime) {
-          await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "devicekey",
-            maxDeviceKeyEventTime.toString());
         }
+      } catch (e) {
+        console.warn(e);
       }
-    } catch (e) {
-      console.warn(e);
+      eventsDeviceEventsProcessing = false;
     }
-    eventsDeviceEventsProcessing = false;
-  };
 
-  const getNewEntityEvents = async () => {
-    eventsEntityEventsProcessing = true;
-    try {
-      const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity");
+    if (window.currentlyAuthenticatedIdentity != null && eventsEntityEventsProcessing === false) {
+      eventsEntityEventsProcessing = true;
+      try {
+        const executeResult = await executeRestfulFunction("private", viamApi, viamApi.eventGetNewEvents, null, "entity");
+
+        if (executeResult.code === "200") {
+          const eventsLen = executeResult.data.length;
+          let changedMaxEntityEventTime = false;
+          for (let i = 0; i < eventsLen; i++) {
+            const event = executeResult.data[i];
+            if (event.type === "QRCodeUpdated") {
+              const actionID = event["actionID"];
+              const QrCode = event["payloads"][1];
 
-      if (executeResult.code === "200") {
-        const eventsLen = executeResult.data.length;
-        let changedMaxEntityEventTime = false;
-        for (let i = 0; i < eventsLen; i++) {
-          const event = executeResult.data[i];
-          if (event.type === "QRCodeUpdated") {
-            const actionID = event["actionID"];
-            const QrCode = event["payloads"][1];
+              const eventCopy = JSON.parse(JSON.stringify(event));
 
-            const eventCopy = JSON.parse(JSON.stringify(event));
+              QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
+                eventCopy["payloads"].push(url);
+                parent.onEvent(eventCopy);
+              });
 
-            QRCode.toDataURL(actionID + "," + QrCode, function (err, url) {
-              eventCopy["payloads"].push(url);
-              parent.onEvent(eventCopy);
-            });
+              continue;
+            }
 
-            continue;
+            parent.onEvent(event);
+            changedMaxEntityEventTime = true;
+            maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
+          }
+          if(changedMaxEntityEventTime) {
+            await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity",
+              maxEntityEventTime.toString());
           }
-
-          parent.onEvent(event);
-          changedMaxEntityEventTime = true;
-          maxEntityEventTime = Math.max(maxEntityEventTime, event.stamp);
-        }
-        if(changedMaxEntityEventTime) {
-          await executeRestfulFunction("private", viamApi, viamApi.eventUpdateLastViewed, null, "entity",
-            maxEntityEventTime.toString());
         }
+      } catch (e) {
+        console.warn(e);
       }
-    } catch (e) {
-      console.warn(e);
-    }
-    eventsEntityEventsProcessing = false;
-  }
-
-  setInterval(() => {
-    if (window.currentlyLoadedIdentity && !anynomousDeviceKeyEventsProcessing && !window.currentlyAuthenticatedIdentity) {
-      getNewEventsWithoutSession();
-    }
-
-    if (window.currentlyAuthenticatedIdentity) {
-      // These functions has to be executed at the same time.
-      !eventsDeviceEventsProcessing && getNewDeviceEvents();
-      !eventsEntityEventsProcessing && getNewEntityEvents();
+      eventsEntityEventsProcessing = false;
     }
   }, 1000);
 });
-- 
GitLab