From 4bced4352d79b2f185dadd34cafa30b8363e7620 Mon Sep 17 00:00:00 2001 From: sairajzero Date: Thu, 28 Jul 2022 02:24:26 +0530 Subject: [PATCH] floDapps, floCloudAPI: retain blkchain id on login floDapps login: - login to btc address when btc private key is entered - login to flo id when flo (or any other) private key is entered floCloudAPI user: - accept userID and private key for user set Others: - Fixed: minor bugs --- floCloudAPI.js | 76 +++++++++++++++++++++++++++----------------------- floDapps.js | 17 ++++++----- lib.js | 6 ++-- 3 files changed, 54 insertions(+), 45 deletions(-) diff --git a/floCloudAPI.js b/floCloudAPI.js index 7d2dad2..01560a1 100644 --- a/floCloudAPI.js +++ b/floCloudAPI.js @@ -1,4 +1,4 @@ -(function(EXPORTS) { //floCloudAPI v2.4.2a +(function(EXPORTS) { //floCloudAPI v2.4.2b /* FLO Cloud operations to send/request application data*/ 'use strict'; const floCloudAPI = EXPORTS; @@ -12,27 +12,48 @@ }; var user_id, user_public, user_private, aes_key; - const user = { - get id() { - if (!user_id) - throw "User not set"; - return user_id; - }, - get public() { - if (!user_public) - throw "User not set"; - return user_public; - }, - sign(msg) { - if (!user_private) - throw "User not set"; - return floCrypto.signData(msg, Crypto.AES.decrypt(user_private, aes_key)); - }, - clear() { - user_id = user_public = user_private = aes_key = undefined; - } + + function user(id, priv) { + if (!priv || !id) + return user.clear(); + let pub = floCrypto.getPubKeyHex(priv); + if (!pub || !floCrypto.verifyPubKey(pub, id)) + return user.clear(); + let n = floCrypto.randInt(12, 20); + aes_key = floCrypto.randString(n); + user_private = Crypto.AES.encrypt(priv, aes_key); + user_public = pub; + user_id = id; + return user_id; } + Object.defineProperties(user, { + id: { + get: () => { + if (!user_id) + throw "User not set"; + return user_id; + } + }, + public: { + get: () => { + if (!user_public) + throw "User not set"; + return user_public; + } + }, + sign: { + value: msg => { + if (!user_private) + throw "User not set"; + return floCrypto.signData(msg, Crypto.AES.decrypt(user_private, aes_key)); + } + }, + clear: { + value: () => user_id = user_public = user_private = aes_key = undefined + } + }) + Object.defineProperties(floCloudAPI, { SNStorageID: { get: () => DEFAULT.SNStorageID @@ -44,21 +65,6 @@ get: () => DEFAULT.application }, user: { - set: priv => { - if (!priv) - user_id = user_public = user_private = aes_key = undefined; - else { - user_public = floCrypto.getPubKeyHex(priv); - user_id = floCrypto.getFloID(user_public); - if (!user_public || !user_id || !floCrypto.verifyPrivKey(priv, user_id)) - user_id = user_public = user_private = aes_key = undefined; - else { - let n = floCrypto.randInt(12, 20); - aes_key = floCrypto.randString(n); - user_private = Crypto.AES.encrypt(priv, aes_key); - } - } - }, get: () => user } }); diff --git a/floDapps.js b/floDapps.js index e5e2d6d..556e7fe 100644 --- a/floDapps.js +++ b/floDapps.js @@ -1,4 +1,4 @@ -(function(EXPORTS) { //floDapps v2.3.2 +(function(EXPORTS) { //floDapps v2.3.2a /* General functions for FLO Dapps*/ 'use strict'; const floDapps = EXPORTS; @@ -75,6 +75,9 @@ myFloID: { get: () => user.id }, + myUserID: { + get: () => user.id + }, myPubKey: { get: () => user.public }, @@ -179,14 +182,14 @@ }).then(result => { for (var i = result.data.length - 1; i >= 0; i--) { var content = JSON.parse(result.data[i]).SuperNodeStorage; - for (sn in content.removeNodes) + for (let sn in content.removeNodes) compactIDB.removeData("supernodes", sn, DEFAULT.root); - for (sn in content.newNodes) + for (let sn in content.newNodes) compactIDB.writeData("supernodes", content.newNodes[sn], sn, DEFAULT.root); } compactIDB.writeData("lastTx", result.totalTxs, floCloudAPI.SNStorageID, DEFAULT.root); - compactIDB.readAllData("supernodes", DEFAULT.root).then(result => { - floCloudAPI.init(result) + compactIDB.readAllData("supernodes", DEFAULT.root).then(nodes => { + floCloudAPI.init(nodes) .then(result => resolve("Loaded Supernode list\n" + result)) .catch(error => reject(error)) }) @@ -342,8 +345,8 @@ checkIfPinRequired(key).then(privKey => { try { user_public = floCrypto.getPubKeyHex(privKey); - user_id = floCrypto.getFloID(privKey); - floCloudAPI.user = privKey; //Set user for floCloudAPI + user_id = floCrypto.getAddress(privKey); + floCloudAPI.user(user_id, privKey); //Set user for floCloudAPI user_priv_wrap = () => checkIfPinRequired(key); let n = floCrypto.randInt(12, 20); aes_key = floCrypto.randString(n); diff --git a/lib.js b/lib.js index b55a81c..26311f0 100644 --- a/lib.js +++ b/lib.js @@ -1,4 +1,4 @@ -(function(GLOBAL) { //lib v1.3.0a +(function(GLOBAL) { //lib v1.3.0b 'use strict'; /* Utility Libraries required for Standard operations * All credits for these codes belong to their respective creators, moderators and owners. @@ -6353,7 +6353,7 @@ x += (document.getElementById("entropybucket")) ? document.getElementById("entropybucket").innerHTML : ''; x += x + '' + x; var r = x; - for (i = 0; i < (x).length / 25; i++) { + for (let i = 0; i < (x).length / 25; i++) { r = Crypto.SHA256(r.concat(x)); } var checkrBigInt = new BigInteger(r); @@ -8565,7 +8565,7 @@ var r = ""; var l = length || 25; var chars = "!$%^&*()_+{}:@~?><|\./;'#][=-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; - for (x = 0; x < l; x++) { + for (let x = 0; x < l; x++) { r += chars.charAt(Math.floor(Math.random() * 62)); } return r;