From fa3db0f8889f16806c888154a264ae6e94611a6d Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 20 Apr 2022 11:49:05 -0300 Subject: [PATCH] Add method for unpairing to MailboxManager --- .../bramble/api/mailbox/MailboxManager.java | 7 +++++++ .../api/mailbox/MailboxSettingsManager.java | 2 ++ .../bramble/mailbox/MailboxManagerImpl.java | 14 ++++++++++++++ .../mailbox/MailboxSettingsManagerImpl.java | 11 +++++++++++ 4 files changed, 34 insertions(+) diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java index 4276ccbdb..784fff21d 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java @@ -2,6 +2,7 @@ package org.briarproject.bramble.api.mailbox; import org.briarproject.bramble.api.db.DbException; import org.briarproject.bramble.api.db.Transaction; +import org.briarproject.bramble.api.lifecycle.IoExecutor; import javax.annotation.Nullable; @@ -41,4 +42,10 @@ public interface MailboxManager { */ boolean checkConnection(); + /** + * Unpairs the owner's mailbox and tries to wipe it. + * As this makes a network call, it should be run on the {@link IoExecutor}. + */ + @IoExecutor + void unPair() throws DbException; } diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxSettingsManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxSettingsManager.java index bad4ef71c..e2a4c7110 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxSettingsManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxSettingsManager.java @@ -26,6 +26,8 @@ public interface MailboxSettingsManager { void setOwnMailboxProperties(Transaction txn, MailboxProperties p) throws DbException; + void removeOwnMailboxProperties(Transaction txn) throws DbException; + MailboxStatus getOwnMailboxStatus(Transaction txn) throws DbException; void recordSuccessfulConnection(Transaction txn, long now) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java index ecdf5291f..d17401559 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java @@ -131,4 +131,18 @@ class MailboxManagerImpl implements MailboxManager { }); } + @Override + public void unPair() throws DbException { + MailboxProperties properties = db.transactionWithNullableResult(true, + mailboxSettingsManager::getOwnMailboxProperties); + try { + api.wipeMailbox(properties); + } catch (IOException | MailboxApi.ApiException e) { + // We wipe on a best-effort basis. + // If we can't do it, we still unpair. + logException(LOG, WARNING, e); + } + db.transaction(false, + mailboxSettingsManager::removeOwnMailboxProperties); + } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java index a93117870..29a7fa33b 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxSettingsManagerImpl.java @@ -75,6 +75,17 @@ class MailboxSettingsManagerImpl implements MailboxSettingsManager { } } + @Override + public void removeOwnMailboxProperties(Transaction txn) throws DbException { + Settings s = new Settings(); + s.put(SETTINGS_KEY_ONION, ""); + s.put(SETTINGS_KEY_TOKEN, ""); + settingsManager.mergeSettings(txn, s, SETTINGS_NAMESPACE); + for (MailboxHook hook : hooks) { + hook.mailboxUnpaired(txn); + } + } + @Override public MailboxStatus getOwnMailboxStatus(Transaction txn) throws DbException {