From f4e21cde844d5091fec46e371562b8f9e510862a Mon Sep 17 00:00:00 2001
From: igorwork <markin.io210@gmail.com>
Date: Thu, 28 Mar 2019 10:57:36 +0300
Subject: [PATCH] Rework pin code functionality and handle new
 "DeviceConfirmed" event.

---
 javascript/src/iframe/viamapi-iframe.js | 70 +++++++++++--------------
 1 file changed, 30 insertions(+), 40 deletions(-)

diff --git a/javascript/src/iframe/viamapi-iframe.js b/javascript/src/iframe/viamapi-iframe.js
index 6f4b6aa..56b2a60 100644
--- a/javascript/src/iframe/viamapi-iframe.js
+++ b/javascript/src/iframe/viamapi-iframe.js
@@ -327,36 +327,6 @@ function loadIdentityInternal(identityKey, pinCode) {
   });
 }
 
-function changeIdentityPinCodeInternal(key, oldPinCode, newPinCode) {
-
-  return new Penpal.Promise(result => {
-    getIdentityFromLocalStorage(key, oldPinCode, false).then((identity) => {
-
-      identity.pinCode = newPinCode;
-
-      setIdentityInLocalStorage(identity).then(() => {
-        result({
-          "data": "",
-          "code": "200",
-          "status": "Successfully changed pincode"
-        });
-      }).catch((e) => {
-        result({
-          "data": "",
-          "code": "400",
-          "status": "Cannot store identity " + e
-        });
-      });
-    }).catch((e) => {
-      result({
-        "data": "",
-        "code": "400",
-        "status": "Cannot get identity " + e
-      });
-    });
-  });
-}
-
 function getCertificateForPassport(passportUUID, internal) {
 
   return new Penpal.Promise(certificateResult => {
@@ -501,8 +471,34 @@ const connection = Penpal.connectToParent({
     loadIdentity(identityKey, pinCode) {
       return loadIdentityInternal(identityKey, pinCode)
     },
-    changeIdentityPinCode(key, oldPinCode, newPinCode) {
-      return changeIdentityPinCodeInternal(key, oldPinCode, newPinCode)
+    checkIdentityPinCode: async (key, pinCode) => {
+      try {
+        const identity = await getIdentityFromLocalStorage(key, pinCode, false);
+
+        if (identity) {
+          return encodeResponse("200", null, "Pincode check successful");
+        } else {
+          return encodeResponse("400", null, "Pincode check failed");
+        }
+      } catch (e) {
+        return encodeResponse("400", e, "Pincode check error");
+      }
+    },
+    changeIdentityPinCode: async (key, oldPinCode, newPinCode) => {
+      try {
+        const identity = await getIdentityFromLocalStorage(key, oldPinCode, false);
+
+        if (identity) {
+          identity.pinCode = newPinCode;
+          await setIdentityInLocalStorage(identity);
+
+          encodeResponse("200", null, "Successfully changed pincode");
+        } else {
+          encodeResponse("400", null, "Identity not found");
+        }
+      } catch (e) {
+        encodeResponse("400", e.message, "Change pincode error");
+      }
     },
     getIdentityProfile(identityKey) {
       return new Penpal.Promise(result => {
@@ -1285,14 +1281,8 @@ connection.promise.then(parent => {
           for (let i = 0; i < eventsLen; i++) {
             const event = executeResult.data[i];
             switch (event.type) {
-              case "Authenticated" : {
-                const uuid = event.payloads[0];
-                const token = event.payloads[1];
-                handleIdentityLogin(window.currentlyLoadedIdentity, uuid, token);
-                const identityToStore = window.currentlyAuthenticatedIdentity;
-                event.payloads = [{fromQRCode: true}];
-                await setIdentityInLocalStorage(identityToStore);
-                await getProfileData(identityToStore);
+              case "DeviceConfirmed" : {
+                await setIdentityInLocalStorage(window.currentlyLoadedIdentity);
                 parent.onEvent(event);
                 break;
               }
-- 
GitLab