Update stdop and minor bug fixes

- Updated stdop to latest
- Fixed: Backup and restore not working properly.
- Fixed: clearUserData
This commit is contained in:
sairajzero 2020-12-19 22:31:36 +05:30
parent 5e0e581457
commit 53f1a191ca

View File

@ -1218,7 +1218,7 @@
getConfirmation('Clear Data?', getConfirmation('Clear Data?',
`Are you sure you want to clear stored data?`, "Clear").then( `Are you sure you want to clear stored data?`, "Clear").then(
result => { result => {
floDapps.clearUserData().then(result => { messenger.clearUserData().then(result => {
notify("Successfully Cleared local data", 'success') notify("Successfully Cleared local data", 'success')
setTimeout(onLoadStartUp, 2000) setTimeout(onLoadStartUp, 2000)
}).catch(error => notify(error, "error")) }).catch(error => notify(error, "error"))
@ -1301,6 +1301,7 @@
return; return;
} }
messenger.parseBackup(file).then(data => { messenger.parseBackup(file).then(data => {
debugger;
getConfirmation('Restore Data?', getConfirmation('Restore Data?',
`Found: ${Object.keys(data.contacts).length} Contacts,\n ${Object.keys(data.messages).length} Messages, ${Object.keys(data.mails).length} Mails.`, `Found: ${Object.keys(data.contacts).length} Contacts,\n ${Object.keys(data.messages).length} Messages, ${Object.keys(data.mails).length} Mails.`,
"Restore" "Restore"
@ -8767,7 +8768,7 @@ Bitcoin.Util = {
} }
} }
</script> </script>
<script id="floBlockchainAPI" version="2.0.0"> <script id="floBlockchainAPI" version="2.0.1">
/* FLO Blockchain Operator to send/receive data from blockchain using API calls*/ /* FLO Blockchain Operator to send/receive data from blockchain using API calls*/
const floBlockchainAPI = { const floBlockchainAPI = {
@ -9128,6 +9129,14 @@ Bitcoin.Util = {
}) })
}, },
getTx: function (txid) {
return new Promise((resolve, reject) => {
this.promisedAPI(`api/tx/${txid}`)
.then(response => resolve(response))
.catch(error => reject(error))
})
},
//Read Txs of Address between from and to //Read Txs of Address between from and to
readTxs: function (addr, from, to) { readTxs: function (addr, from, to) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -9219,28 +9228,29 @@ Bitcoin.Util = {
this.defaultDB = dbName; this.defaultDB = dbName;
}, },
upgradeDB: function (dbName, aList = null, dList = null) { upgradeDB: function (dbName, createList = null, deleteList = null) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.getDBversion(dbName).then(version => { this.getDBversion(dbName).then(version => {
var idb = indexedDB.open(dbName, version + 1); var idb = indexedDB.open(dbName, version + 1);
idb.onerror = (event) => reject("Error in opening IndexedDB"); idb.onerror = (event) => reject("Error in opening IndexedDB");
idb.onupgradeneeded = (event) => { idb.onupgradeneeded = (event) => {
let db = event.target.result; let db = event.target.result;
if (aList instanceof Object) { if (createList instanceof Object) {
if (Array.isArray(aList)) { if (Array.isArray(createList)) {
let tmp = {} let tmp = {}
aList.forEach(o => tmp[o] = {}) createList.forEach(o => tmp[o] = {})
aList = tmp createList = tmp
} }
for (let o in aList) { for (let o in createList) {
let obs = db.createObjectStore(o, aList[o].options || {}); let obs = db.createObjectStore(o, createList[o].options ||
if (aList[o].indexes instanceof Object) {});
for (let i in aList[o].indexes) if (createList[o].indexes instanceof Object)
obs.createIndex(i, i, aList[o].indexes || {}); for (let i in createList[o].indexes)
obs.createIndex(i, i, createList[o].indexes || {});
} }
} }
if (Array.isArray(dList)) if (Array.isArray(deleteList))
dList.forEach(o => db.deleteObjectStore(o)); deleteList.forEach(o => db.deleteObjectStore(o));
resolve('Database upgraded') resolve('Database upgraded')
} }
idb.onsuccess = (event) => event.target.result.close(); idb.onsuccess = (event) => event.target.result.close();
@ -9439,7 +9449,7 @@ Bitcoin.Util = {
} }
} }
</script> </script>
<script id="floCloudAPI" version="2.0.2"> <script id="floCloudAPI" version="2.0.2c">
/* FLO Cloud operations to send/request application data*/ /* FLO Cloud operations to send/request application data*/
const floCloudAPI = { const floCloudAPI = {
@ -9583,25 +9593,35 @@ Bitcoin.Util = {
} }
}, },
inactive: [],
connect(snID) { connect(snID) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (!(snID in floGlobals.supernodes)) if (!(snID in floGlobals.supernodes))
return reject(`${snID} is not a supernode`) return reject(`${snID} is not a supernode`)
let inactive = this.inactive
if (inactive.includes(snID))
return reject(`${snID} is not active`)
var wsConn = new WebSocket("wss://" + floGlobals.supernodes[snID].uri + "/ws"); var wsConn = new WebSocket("wss://" + floGlobals.supernodes[snID].uri + "/ws");
wsConn.onmessage = (evt) => { wsConn.onmessage = (evt) => {
if (evt.data == '$+') if (evt.data == '$+')
resolve(wsConn) resolve(wsConn)
else if (evt.data == '$-') { else if (evt.data == '$-') {
wsConn.close(); wsConn.close();
inactive.push(snID)
reject(`${snID} is not active`) reject(`${snID} is not active`)
} }
} }
wsConn.onerror = evt => reject(`${snID} is unavailable`) wsConn.onerror = evt => {
inactive.push(snID)
reject(`${snID} is unavailable`)
}
}) })
}, },
connectActive(snID, reverse = false) { connectActive(snID, reverse = false) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (this.inactive.length === this.kBucket.SNCO.length)
return reject('Cloud offline')
if (!(snID in floGlobals.supernodes)) if (!(snID in floGlobals.supernodes))
snID = this.kBucket.closestNode(snID); snID = this.kBucket.closestNode(snID);
this.connect(snID) this.connect(snID)
@ -9924,9 +9944,9 @@ Bitcoin.Util = {
message = floCrypto.encryptData(JSON.stringify(message), encryptionKey) message = floCrypto.encryptData(JSON.stringify(message), encryptionKey)
} }
this.sendApplicationData(message, type, options).then(result => { this.sendApplicationData(message, type, options).then(result => {
options.comment = null; //options.comment = null;
var fk = this.util.filterKey(type, options) //var fk = this.util.filterKey(type, options)
this.util.storeGeneral(fk, result) //this.util.storeGeneral(fk, result)
resolve(result) resolve(result)
}).catch(error => reject(error)) }).catch(error => reject(error))
}) })
@ -9938,11 +9958,12 @@ Bitcoin.Util = {
var fk = this.util.filterKey(type, options) var fk = this.util.filterKey(type, options)
options.lowerVectorClock = options.lowerVectorClock || floGlobals.lastVC[fk] + 1; options.lowerVectorClock = options.lowerVectorClock || floGlobals.lastVC[fk] + 1;
if (options.callback instanceof Function) { if (options.callback instanceof Function) {
options.callback = (d, e) => { let new_options = Object.create(options)
new_options.callback = (d, e) => {
this.util.storeGeneral(fk, d); this.util.storeGeneral(fk, d);
options.callback(d, e) options.callback(d, e)
} }
this.requestApplicationData(type, options) this.requestApplicationData(type, new_options)
.then(result => resolve(result)) .then(result => resolve(result))
.catch(error => reject(error)) .catch(error => reject(error))
} else { } else {
@ -9977,8 +9998,9 @@ Bitcoin.Util = {
options.lowerVectorClock = floGlobals.lastVC[objectName] + 1 options.lowerVectorClock = floGlobals.lastVC[objectName] + 1
delete options.mostRecent; delete options.mostRecent;
if (callback) { if (callback) {
options.callback = callback; let new_options = Object.create(options)
this.requestApplicationData(objectName, options) new_options.callback = callback;
this.requestApplicationData(objectName, new_options)
.then(result => resolve(result)) .then(result => resolve(result))
.catch(error => reject(error)) .catch(error => reject(error))
} else { } else {
@ -10202,7 +10224,7 @@ Bitcoin.Util = {
} }
} }
</script> </script>
<script id="floDapps" version="2.0.1"> <script id="floDapps" version="2.0.1a">
/* General functions for FLO Dapps*/ /* General functions for FLO Dapps*/
const floDapps = { const floDapps = {
@ -10647,10 +10669,10 @@ Bitcoin.Util = {
} }
options.callback = (d, e) => { options.callback = (d, e) => {
for (let v in d) { for (let v in d) {
try{ try {
if (d[v].message instanceof Object && "secret" in d[v].message) if (d[v].message instanceof Object && "secret" in d[v].message)
d[v].message = floCrypto.decryptData(d[v].message, myPrivKey) d[v].message = floCrypto.decryptData(d[v].message, myPrivKey)
}catch(error){} } catch (error) {}
compactIDB.writeData("messages", d[v], v, `floDapps#${myFloID}`) compactIDB.writeData("messages", d[v], v, `floDapps#${myFloID}`)
floGlobals.messages[v] = d[v] floGlobals.messages[v] = d[v]
} }
@ -10698,11 +10720,11 @@ Bitcoin.Util = {
}) })
}, },
deleteUserData: function(credentials = false) { deleteUserData: function (credentials = false) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let p = [] let p = []
p.push(compactIDB.deleteDB(`floDapps#${myFloID}`)) p.push(compactIDB.deleteDB(`floDapps#${myFloID}`))
if(credentials) if (credentials)
p.push(this.clearCredentials()) p.push(this.clearCredentials())
Promise.all(p) Promise.all(p)
.then(result => resolve('User database(local) deleted')) .then(result => resolve('User database(local) deleted'))
@ -10710,7 +10732,7 @@ Bitcoin.Util = {
}) })
}, },
deleteAppData: function() { deleteAppData: function () {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
compactIDB.deleteDB(floGlobals.application).then(result => { compactIDB.deleteDB(floGlobals.application).then(result => {
localStorage.removeItem(`${floGlobals.application}#privKey`) localStorage.removeItem(`${floGlobals.application}#privKey`)
@ -10730,7 +10752,7 @@ Bitcoin.Util = {
let threshold = indexArr.length; let threshold = indexArr.length;
let shares = floCrypto.createShamirsSecretShares(encryptedKey, threshold, threshold) let shares = floCrypto.createShamirsSecretShares(encryptedKey, threshold, threshold)
let promises = []; let promises = [];
let overwriteFn = (share, index) => let overwriteFn = (share, index) =>
compactIDB.writeData("credentials", share, index, floGlobals.application); compactIDB.writeData("credentials", share, index, floGlobals.application);
for (var i = 0; i < threshold; i++) for (var i = 0; i < threshold; i++)
promises.push(overwriteFn(shares[i], indexArr[i])); promises.push(overwriteFn(shares[i], indexArr[i]));
@ -10810,14 +10832,14 @@ Bitcoin.Util = {
let vc = Object.keys(response).sort().pop() let vc = Object.keys(response).sort().pop()
let sync = JSON.parse(Crypto.AES.decrypt(response[vc].message, myPrivKey)) let sync = JSON.parse(Crypto.AES.decrypt(response[vc].message, myPrivKey))
let promises = [] let promises = []
let store = (key, val, obs) => let store = (key, val, obs) =>
promises.push(compactIDB.writeData(obs, val, key, `floDapps#${floID}`)) promises.push(compactIDB.writeData(obs, val, key, `floDapps#${floID}`))[
["contacts", "pubKeys", "messages"].forEach(c => { "contacts", "pubKeys", "messages"].forEach(c => {
for (let i in sync[c]) { for (let i in sync[c]) {
store(i, sync[c][i], c) store(i, sync[c][i], c)
floGlobals[c][i] = sync[c][i] floGlobals[c][i] = sync[c][i]
} }
}) })
Promise.all(promises) Promise.all(promises)
.then(results => resolve("Sync data successful")) .then(results => resolve("Sync data successful"))
.catch(error => reject(error)) .catch(error => reject(error))
@ -11231,6 +11253,8 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.loadDataFromIDB("all").then(data => { this.loadDataFromIDB("all").then(data => {
delete data.appendix.AESKey; delete data.appendix.AESKey;
data.contacts = floGlobals.contacts;
data.pubKeys = floGlobals.pubKeys;
data = btoa(unescape(encodeURIComponent(JSON.stringify(data)))) data = btoa(unescape(encodeURIComponent(JSON.stringify(data))))
let blobData = { let blobData = {
floID: myFloID, floID: myFloID,
@ -11296,9 +11320,23 @@ Bitcoin.Util = {
l]) l])
data.appendix[l] = floGlobals.appendix[l] data.appendix[l] = floGlobals.appendix[l]
let promises = []; let promises = [];
for (let obs in data) for (let obs in data) {
let writeFn;
switch (obs) {
case "contacts":
writeFn = (k, v) => floDapps.storeContact(k, v);
break;
case "pubKeys":
writeFn = (k, v) => floDapps.storePubKey(k, v);
break;
default:
writeFn = (k, v) => compactIDB.writeData(obs, v, k);
break;
}
for (let k in data[obs]) for (let k in data[obs])
promises.push(compactIDB.writeData(obs, data[obs][k], k)); promises.push(writeFn(k, data[obs][k]));
}
Promise.all(promises) Promise.all(promises)
.then(results => resolve("Restore Successful")) .then(results => resolve("Restore Successful"))
.catch(error => reject("Restore Failed: Unable to write to IDB")) .catch(error => reject("Restore Failed: Unable to write to IDB"))
@ -11306,6 +11344,18 @@ Bitcoin.Util = {
}) })
}, },
clearUserData() {
return new Promise((resolve, reject) => {
let promises = [
compactIDB.deleteDB(),
floDapps.clearCredentials()
]
Promise.all(promises)
.then(result => resolve("User Data cleared"))
.catch(error => reject(error))
})
},
//group feature //group feature
createGroup(groupname, description = '') { createGroup(groupname, description = '') {