From 0f36c59cc20c3f3a28d3a281cb9b59df343fa156 Mon Sep 17 00:00:00 2001
From: Markin Igor <markin.io210@gmail.com>
Date: Wed, 12 Dec 2018 16:55:54 +0300
Subject: [PATCH] Refactor executeRestfulFunction 2.

---
 javascript/src/iframe/viamapi-iframe.js | 71 ++++++++++++-------------
 1 file changed, 35 insertions(+), 36 deletions(-)

diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 15244b9..779e33b 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -1347,45 +1347,44 @@ window.currentlyAuthenticatedIdentity = null;
 window.currentlyLoadedIdentity = null;
 window.lastTimeGetProfile = 0;
 
+const handleIdentityLogin = (identity, uuid, token) => {
+  const { loadedIdentities, viamApi } = window;
+
+  viamApi.setSessionData(uuid, token);
+  localStorage.setItem("uuid", uuid);
+  localStorage.setItem("token", token);
+  localStorage.setItem("authenticatedIdentity", identity.authentication.publicKey);
+  window.currentlyAuthenticatedIdentity = loadedIdentities[identity.authentication.publicKey];
+  setKeyForUUID(uuid, identity.authentication.publicKey);
+  window.lastTimeGetProfile = 0;
+};
+
 function executeRestfulFunction(type, that, fn, ...args) {
-  const { currentlyAuthenticatedIdentity, viamApi, loadedIdentities, currentlyLoadedIdentity } = window;
-
-  if (type === "private") {
-    return new Penpal.Promise(executeResult => {
-      fn.apply(that, args).then((response) => {
-        const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity;
-
-        if (response.data.code === "400" && response.data.status === "Bad session" && identity) {
-          viamApi.identityLogin("previousaddeddevice")
-            .then((response) => {
-              if (response.data.code === "200") {
-                const uuid = response.data.data["Uuid"];
-                const token = response.data.data["Session"];
-                viamApi.setSessionData(uuid, token);
-                localStorage.setItem("uuid", uuid);
-                localStorage.setItem("token", token);
-                localStorage.setItem("authenticatedIdentity", identity.authentication.publicKey);
-                window.currentlyAuthenticatedIdentity = loadedIdentities[identity.authentication.publicKey];
-                setKeyForUUID(uuid, identity.authentication.publicKey);
-                window.lastTimeGetProfile = 0;
-                fn.apply(null, args).then(({data}) => executeResult(data));
-              } else {
-                executeResult(response.data);
-              }
-            })
-            .catch(console.warn);
-        } else {
-          executeResult(response.data);
-        }
-      });
-    });
-  } else {
-    return new Penpal.Promise(executeResult => {
-      fn.apply(that, args).then((response) => {
+  const { currentlyAuthenticatedIdentity, viamApi, currentlyLoadedIdentity } = window;
+
+  return new Penpal.Promise(executeResult => {
+    fn.apply(that, args).then((response) => {
+      const identity = currentlyAuthenticatedIdentity || currentlyLoadedIdentity;
+
+      if (type === "private" && identity && response.data.code === "400" && response.data.status === "Bad session") {
+        viamApi.identityLogin("previousaddeddevice")
+          .then((response) => {
+            if (response.data.code === "200") {
+              const uuid = response.data.data["Uuid"];
+              const token = response.data.data["Session"];
+              handleIdentityLogin(identity, uuid, token);
+              // TODO: Previously there was fn.apply(null, args) where null is probably wrong context for fn.apply()
+              fn.apply(that, args).then(({data}) => executeResult(data));
+            } else {
+              executeResult(response.data);
+            }
+          })
+          .catch(console.warn);
+      } else {
         executeResult(response.data);
-      });
+      }
     });
-  }
+  });
 }
 
 window.executeRestfulFunction = executeRestfulFunction;
-- 
GitLab