From a42c2a1a18969d5bcd0dec84b4cf0b9d93fc7c0b Mon Sep 17 00:00:00 2001 From: Abhishek Sinha Date: Sat, 29 Jun 2019 16:29:34 +0530 Subject: [PATCH] added code to prevent requests processing unless db sync is complete --- supernode/index.html | 120 +++++++++++++++++++++++++++++++------------ 1 file changed, 88 insertions(+), 32 deletions(-) diff --git a/supernode/index.html b/supernode/index.html index d08d35d..15fe563 100644 --- a/supernode/index.html +++ b/supernode/index.html @@ -15346,20 +15346,27 @@ }); // Connect with backup supernodes - wsUri.map((uri, index)=>{ - if(index>0 && index<=localbitcoinplusplus.master_configurations.MaxBackups - && localbitcoinplusplus.master_configurations.supernodesPubKeys + if(localbitcoinplusplus.master_configurations.supernodesPubKeys .includes(idbData.myLocalFLOPublicKey)) { - backUpSupernodesWS[uri.trader_flo_address] = new backupSupernodesWebSocketObject(`ws://${uri.ip}:${uri.port}`); - backUpSupernodesWS[uri.trader_flo_address].connectWS(); - } - if (index>0 && localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(idbData.myLocalFLOPublicKey)) { - let dbname = `su_backup_${uri.trader_flo_address}`; - BACKUP_DB[uri.trader_flo_address] = new newBackupDB(dbname); - BACKUP_DB[uri.trader_flo_address].createNewDB(); - } - }); + + wsUri.map((uri, index)=>{ + + // Do not serve to any requests unless data is fully synced. + localbitcoinplusplus.services[`can_serve_${uri.trader_flo_address}`] = false; + + if(index>0 + && index<=localbitcoinplusplus.master_configurations.MaxBackups) { + backUpSupernodesWS[uri.trader_flo_address] = new backupSupernodesWebSocketObject(`ws://${uri.ip}:${uri.port}`); + backUpSupernodesWS[uri.trader_flo_address].connectWS(); + } + if (index>0) { + let dbname = `su_backup_${uri.trader_flo_address}`; + BACKUP_DB[uri.trader_flo_address] = new newBackupDB(dbname); + BACKUP_DB[uri.trader_flo_address].createNewDB(); + } + }); + + } localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS = wsUri[0].trader_flo_address; @@ -15423,21 +15430,31 @@ localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS = wsUri[0].trader_flo_address; + localbitcoinplusplus.services = {}; + // Connect with backup supernodes - wsUri.map((uri, index)=>{ - if(index>0 && index<=localbitcoinplusplus.master_configurations.MaxBackups - && localbitcoinplusplus.master_configurations.supernodesPubKeys + if (localbitcoinplusplus.master_configurations.supernodesPubKeys .includes(idbData.myLocalFLOPublicKey)) { - backUpSupernodesWS[uri.trader_flo_address] = new backupSupernodesWebSocketObject(`ws://${uri.ip}:${uri.port}`); - backUpSupernodesWS[uri.trader_flo_address].connectWS(); - } - if (index>0 && localbitcoinplusplus.master_configurations.supernodesPubKeys - .includes(idbData.myLocalFLOPublicKey)) { - let dbname = `su_backup_${uri.trader_flo_address}`; - BACKUP_DB[uri.trader_flo_address] = new newBackupDB(dbname); - BACKUP_DB[uri.trader_flo_address].createNewDB(); - } - }); + + wsUri.map((uri, index)=>{ + + // Do not serve to any requests unless data is fully synced. + localbitcoinplusplus.services[`can_serve_${uri.trader_flo_address}`] = false; + + if(index>0 + && index<=localbitcoinplusplus.master_configurations.MaxBackups + ) { + backUpSupernodesWS[uri.trader_flo_address] = new backupSupernodesWebSocketObject(`ws://${uri.ip}:${uri.port}`); + backUpSupernodesWS[uri.trader_flo_address].connectWS(); + } + if (index>0) { + let dbname = `su_backup_${uri.trader_flo_address}`; + BACKUP_DB[uri.trader_flo_address] = new newBackupDB(dbname); + BACKUP_DB[uri.trader_flo_address].createNewDB(); + } + }); + + } resolve(true); }); @@ -15752,6 +15769,19 @@ console.log(res_obj); } + // Don't serve the request if data is not synced. + if (localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { + + if (typeof res_obj.globalParams.primarySupernode !== "string" + || typeof localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`] !== "boolean" + || localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`]==false + ) { + showMessage(`INFO: You are not authorized to serve this request.`); + return false; + } + } + if(get_requester_supernode.length>0 && get_requester_supernode[0].data.id !== localbitcoinplusplus.MY_SUPERNODE_FLO_ADDRESS) { processBackupUserOnMesssageRequest(response); @@ -16067,8 +16097,8 @@ retrieve_pvtkey_counter++; } } - if (typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY=='string' && - localbitcoinplusplus.is_ui_loaded == false) { + if (typeof localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY=='string' + && localbitcoinplusplus.is_ui_loaded == false) { loadExternalFiles(); dataBaseUIOperations(); return; @@ -17014,6 +17044,19 @@ return; } + // Don't serve the request if data is not synced. + if (localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { + + if (typeof res_obj.globalParams.primarySupernode !== "string" + || typeof localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`] !== "boolean" + || localbitcoinplusplus.services[`can_serve_${res_obj.globalParams.primarySupernode}`]==false + ) { + showMessage(`INFO: You are not authorized to serve this request.`); + return false; + } + } + if (res_obj.method !== "sync_primary_supernode_from_backup_supernode" && res_obj.method !== "sync_backup_supernode_from_backup_supernode" && res_obj.method !== "link_My_Local_IP_To_My_Flo_Id" @@ -20667,7 +20710,7 @@ console.log(addNewKNode); doSend(addNewKNode); - }) + }); } readDB('userPublicData', MY_LOCAL_FLO_ADDRESS).then(function ( @@ -20703,7 +20746,6 @@ } } - // Show balances displayBalances(idbData.myLocalFLOAddress); @@ -20731,8 +20773,7 @@ asset1) { localbitcoinplusplus.master_configurations.tradableAsset2.forEach( function (asset2) { - RM_TRADE.resolve_current_crypto_price_in_fiat( - asset1, asset2); + RM_TRADE.resolve_current_crypto_price_in_fiat(asset1, asset2); }); }); } @@ -20744,6 +20785,21 @@ // If connected with Backup Supernode, request it to sync data. const closestSuList = await readAllDB('myClosestSupernodes'); + // If you are a supernode ask if you want to sync primary and secondary backup + if (localbitcoinplusplus.master_configurations.supernodesPubKeys + .includes(localbitcoinplusplus.wallets.my_local_flo_public_key)) { + const wannaSync = confirm(`Do you want to sync Primary and Backup Databases?`); + if (wannaSync==true) { + reactor.dispatchEvent('sync_primary_and_backup_db'); + showMessage(`INFO: You need to update serve to true to start serving as Primary Supernode.`); + } else { + for (let w = 0; w <= localbitcoinplusplus.master_configurations.MaxBackups; w++) { + const element = closestSuList[w]; + localbitcoinplusplus.services[`can_serve_${element.trader_flo_address}`] = true; + } + } + } + if (!closestSuList[0].is_live) { const switchMyWS = new backupSupernodesWebSocketObject(); const connectedWSServerFloId = await switchMyWS.getFloIdFromWSUrl(websocket.url);