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 {