From 91a98045727f4d49c63d4912ee4a2849c47544d6 Mon Sep 17 00:00:00 2001 From: jmacxx <47253594+jmacxx@users.noreply.github.com> Date: Mon, 4 Apr 2022 16:34:42 -0500 Subject: [PATCH] Check failed trades for sensitive data purge. --- .../trade/bisq_v1/FailedTradesManager.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/core/src/main/java/bisq/core/trade/bisq_v1/FailedTradesManager.java b/core/src/main/java/bisq/core/trade/bisq_v1/FailedTradesManager.java index 2a5a41563e9..9574ed18d05 100644 --- a/core/src/main/java/bisq/core/trade/bisq_v1/FailedTradesManager.java +++ b/core/src/main/java/bisq/core/trade/bisq_v1/FailedTradesManager.java @@ -23,6 +23,7 @@ import bisq.core.provider.price.PriceFeedService; import bisq.core.trade.model.TradableList; import bisq.core.trade.model.bisq_v1.Trade; +import bisq.core.user.Preferences; import bisq.common.config.Config; import bisq.common.crypto.KeyRing; @@ -35,10 +36,13 @@ import javafx.collections.ObservableList; +import java.time.Instant; + import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.TimeUnit; import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -56,6 +60,7 @@ public class FailedTradesManager implements PersistedDataHost { private final KeyRing keyRing; private final PriceFeedService priceFeedService; private final BtcWalletService btcWalletService; + private final Preferences preferences; private final CleanupMailboxMessagesService cleanupMailboxMessagesService; private final PersistenceManager> persistenceManager; private final TradeUtil tradeUtil; @@ -69,6 +74,7 @@ public class FailedTradesManager implements PersistedDataHost { public FailedTradesManager(KeyRing keyRing, PriceFeedService priceFeedService, BtcWalletService btcWalletService, + Preferences preferences, PersistenceManager> persistenceManager, TradeUtil tradeUtil, CleanupMailboxMessagesService cleanupMailboxMessagesService, @@ -77,6 +83,7 @@ public FailedTradesManager(KeyRing keyRing, this.keyRing = keyRing; this.priceFeedService = priceFeedService; this.btcWalletService = btcWalletService; + this.preferences = preferences; this.cleanupMailboxMessagesService = cleanupMailboxMessagesService; this.dumpDelayedPayoutTx = dumpDelayedPayoutTx; this.persistenceManager = persistenceManager; @@ -101,10 +108,12 @@ public void readPersisted(Runnable completeHandler) { public void onAllServicesInitialized() { cleanupMailboxMessagesService.handleTrades(failedTrades.getList()); + maybeClearSensitiveData(); } public void add(Trade trade) { if (failedTrades.add(trade)) { + maybeClearSensitiveData(); requestPersistence(); } } @@ -211,4 +220,25 @@ public boolean hasDelayedPayoutTxBytes(Trade failedTrade) { private void requestPersistence() { persistenceManager.requestPersistence(); } + + private void maybeClearSensitiveData() { + log.info("checking failed trades eligibility for having sensitive data cleared"); + failedTrades.stream() + .filter(e -> canTradeHaveSensitiveDataCleared(e.getId())) + .forEach(Trade::maybeClearSensitiveData); + requestPersistence(); + } + + private boolean canTradeHaveSensitiveDataCleared(String tradeId) { + Instant safeDate = getSafeDateForSensitiveDataClearing(); + return failedTrades.stream() + .filter(e -> e.getId().equals(tradeId)) + .filter(e -> e.getDate().toInstant().isBefore(safeDate)) + .count() > 0; + } + + private Instant getSafeDateForSensitiveDataClearing() { + return Instant.ofEpochSecond(Instant.now().getEpochSecond() + - TimeUnit.DAYS.toSeconds(preferences.getClearDataAfterDays())); + } }