From f543c2c0d34f4c8ff12e0da4f4787544c843b804 Mon Sep 17 00:00:00 2001 From: sairajzero Date: Wed, 27 Nov 2019 10:26:01 +0530 Subject: [PATCH] auto-delete feature Supernode automatically deletes messages that are not sent by subAdmins of an application and applications that are not associated. The delete occurs every one hour, the messages are stored for a configurable time (deleteDelay) before deleted --- index.html | 53 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 12 deletions(-) diff --git a/index.html b/index.html index 91a89ae..fac7914 100644 --- a/index.html +++ b/index.html @@ -26,6 +26,7 @@ FLO_TEST: 'https://testnet-flosight.duckdns.org' }, adminID: "FEzk75EGMPEQMrCuPosGiwuK162hcEu49E", + refreshDelay: 3600000, //sendAmt: 0.001, //fee: 0.0005, @@ -6046,7 +6047,7 @@ initIndexedDBforSupernodeDataStorage(myFloID).then(result => { console.log(result) serverPwd = prompt("Enter Server Pass!") - setInterval(autoRefreshBlockchainData, 3600000); + setInterval(autoRefreshBlockchainData, floGlobals.refreshDelay); floSupernode.initSupernode(serverPwd, myFloID).then(async result => { console.log(result) floGlobals.serveList.push(myFloID) @@ -6104,9 +6105,38 @@ } function autoRefreshBlockchainData(){ - refreshBlockchainData() - .then(result => console.log(result)) - .catch(error => console.log(error)) + refreshBlockchainData().then(result => { + console.log(result) + autoDeleteStoredData() + .then(result => console.log(result)) + .catch(error => console.log(error)) + }).catch(error => console.log(error)) + } + + function autoDeleteStoredData(){ + return new Promise((resolve, reject) => { + var deleteEnd = Date.now() - floGlobals.supernodeConfig.deleteDelay + var deleteStart = deleteEnd - floGlobals.refreshDelay + var promises = [] + var filterOptions = { + lowerKey: `${deleteStart}`, + upperKey: `${deleteEnd}`, + } + for(var i = 0; i < floGlobals.storedList.length; i++){ + var promise = new Promise((res,rej) => { + compactIDB.searchData(floGlobals.defaultDisk,filterOptions,`SN_${floGlobals.storedList[i]}`).then(results => { + for(key in results) + if(!floGlobals.applicationList.includes(results[key].application) || !floGlobals.appSubAdmins[results[key].application].includes(results[key].senderID)) + compactIDB.removeData(floGlobals.defaultDisk, key, `SN_${floGlobals.storedList[i]}`) + res(`Auto-delete successful for SN_${floGlobals.storedList[i]} from ${deleteStart} to ${deleteEnd}`) + }).catch(error => rej(error)) + }) + promises.push(promise) + } + Promise.all(promises).then(results => { + resolve(`Auto-delete successful from ${deleteStart} to ${deleteEnd}`) + }).catch(error => reject(error)) + }) } function refreshBlockchainData(){ @@ -6158,7 +6188,7 @@ return new Promise((resolve,reject) => { var promises = [] for(app in floGlobals.applicationList){ - var promise = new Promise((resolve,reject) => { + var promise = new Promise((res,rej) => { compactIDB.readData("appSubAdmins", app).then(subAdmins => { compactIDB.readData("lastTx",floGlobals.applicationList[app]).then(lastTx => { floBlockchainAPI.readData(floGlobals.applicationList[app],{ignoreOld:lastTx,sentOnly:true,pattern:app}).then(result => { @@ -6171,11 +6201,11 @@ } compactIDB.writeData("lastTx", result.totalTxs, floGlobals.adminID); compactIDB.writeData("appSubAdmins", subAdmins, app) - .then(res => resolve(app)) - .catch(error => reject(error)) - }).catch(error => reject(error)) - }).catch(error => reject(error)) - }).catch(error => reject(error)) + .then(result => res(app)) + .catch(error => rej(error)) + }).catch(error => rej(error)) + }).catch(error => rej(error)) + }).catch(error => rej(error)) }) promises.push(promise) } @@ -6202,11 +6232,10 @@ connectToAllBackupSupernode(backupConn.floID, i+1) .then(result => resolve(result)) .catch(error => reject(error)) - }) + }).catch(error => reject(error)) } }).catch(error => reject(error)) } - }) }