diff --git a/index.html b/index.html
index 2c202b2..a0db6a3 100644
--- a/index.html
+++ b/index.html
@@ -12468,6 +12468,33 @@
return arr;
},
+ delete_db_data_for_single_user: async function(
+ userId = "",
+ dbTableNamesArray,
+ backup_db = ""
+ ) {
+ let arr = {};
+ let _removeByIndex = removeByIndex;
+ if (typeof backup_db == "string" && backup_db.length > 0) {
+ if (
+ typeof localbitcoinplusplus.newBackupDatabase.db[backup_db] ==
+ "object"
+ ) {
+ const foreign_db =
+ localbitcoinplusplus.newBackupDatabase.db[backup_db];
+ _removeByIndex = foreign_db.backup_removeByIndex.bind(foreign_db);
+ } else {
+ err_msg = `WARNING: Invalid Backup DB Instance Id: ${backup_db}.`;
+ showMessage(err_msg);
+ throw new Error(err_msg);
+ }
+ }
+ for (const elem of dbTableNamesArray) {
+ _removeByIndex(elem, "trader_flo_address", userId);
+ }
+
+ },
+
getHighestVectorClockInTablesOfaDB: function(dbDataOfSupernode = []) {
return new Promise((resolve, reject) => {
let higestVCList = [];
@@ -12709,8 +12736,16 @@
"crypto_balances",
"cash_balances",
"buyOrders",
- "sellOrders"
+ "sellOrders",
+ "system_btc_reserves_private_keys"
];
+
+ let db_list = Object.values(localbitcoinplusplus.newBackupDatabase.db).map(m=>m);
+ db_list.push(db);
+
+ // First create a db backup and save it
+ await localbitcoinplusplus.IdbBackup.exportIDBtoFile(db_list, tableArray);
+
const RM_RPC = new localbitcoinplusplus.rpc();
if (userFloId.length > 0) {
let closestSu = await localbitcoinplusplus.kademlia.determineClosestSupernode(
@@ -12725,7 +12760,7 @@
if (typeof immigrants_data === "object") {
immigrants_data.trader_flo_address = closestSu[0].data.id;
immigrants_data.receiver_flo_address = closestSu[0].data.id;
- immigrants_data.inform_back_on_success = true;
+
RM_RPC.send_rpc
.call(
this,
@@ -12817,8 +12852,31 @@
}
}
+ // Delete this user's data from this server
+ localbitcoinplusplus.actions.delete_db_data_for_single_user(myFloId, tableArray);
+
+ // Ask backups to delete this user data
+ const msg_obj = {};
+ msg_obj.protocol = '__ALL_SUPERNODES_MSG__';
+ msg_obj.event = 'delete_this_user_data_from_backup';
+ msg_obj.data = {request: "REMOVE_DB_DATA_OF_USER"};
+ msg_obj.initialSender = localbitcoinplusplus.wallets.my_local_flo_address;
+ msg_obj.su_pubKey = localbitcoinplusplus.wallets.my_local_flo_public_key;
+ msg_obj.db_name = localbitcoinplusplus.wallets.my_local_flo_address;
+ msg_obj.trader_flo_address = allUsersData[f].trader_flo_address;
+ msg_obj.tableArray = tableArray;
+ msg_obj.hash = Crypto.SHA256(msg_obj);
+ msg_obj.sign = RM_WALLET.sign(
+ msg_obj.hash,
+ localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
+ );
+
+ reactor.dispatchEvent('informAllSuperNode', msg_obj);
+
// Delete this user from kBucketStore datastore and Kbucket
- const UintID = localbitcoinplusplus.kademlia.floIdToKbucketId(localbitcoinplusplus.BASE_BLOCKCHAIN, closestSu[0].data.id);
+ const UintID = localbitcoinplusplus.kademlia.floIdToKbucketId(
+ localbitcoinplusplus.BASE_BLOCKCHAIN, allUsersData[f].trader_flo_address);
+
await removeinDB('kBucketStore', UintID);
KBucket.remove(UintID);
}
@@ -12835,14 +12893,8 @@
}
}
- // Rebuild KBucket
- // localbitcoinplusplus.kademlia.restoreKbucket(
- // myFloId,
- // "FLO_TEST",
- // KBucket
- // );
-
}
+
},
refresh_live_status_of_supernodes: async function(send_resolve_ws_conns_to_rest_supernodes=false) {
@@ -21974,6 +22026,14 @@
case "refresh_all_supernodes_status":
reactor.dispatchEvent('resolve_backup_ws_connections');
+
+ case "delete_this_user_data_from_backup":
+ if(res_obj.data.request=="REMOVE_DB_DATA_OF_USER"
+ && typeof localbitcoinplusplus.newBackupDatabase.db[res_obj.db_name]=="object") {
+ localbitcoinplusplus.actions.delete_db_data_for_single_user(
+ res_obj.trader_flo_address, res_obj.tableArray, res_obj.db_name);
+ }
+ break;
default:
break;
@@ -28191,27 +28251,6 @@
dbs.forEach(db => { window.indexedDB.deleteDatabase(db.name) })
}
- async function clearAllDBData(dabse='') {
- try {
- let su_list = localbitcoinplusplus.master_configurations.supernodesPubKeys.map(m=>bitjs[localbitcoinplusplus.BASE_BLOCKCHAIN].pubkey2address(m));
- for (const su of su_list) {
- if(su===localbitcoinplusplus.wallets.my_local_flo_address) {
-
- } else {
-
- }
- }
-
- } catch(error) {
- throw new Error(error)
- }
- }
-
- async function clearDBData(dbName='') {
- return new Promise((resolve, reject)=>{
-
- });
- }