Set our own mailbox status right after pairing

This commit is contained in:
Torsten Grote
2022-02-18 10:07:51 -03:00
parent 4a46b13e9d
commit ce7f44de01
3 changed files with 24 additions and 5 deletions

View File

@@ -6,6 +6,7 @@ import org.briarproject.bramble.api.event.EventExecutor;
import org.briarproject.bramble.api.mailbox.MailboxPairingTask; import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.system.Clock;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -19,6 +20,7 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
private final Executor eventExecutor; private final Executor eventExecutor;
private final TransactionManager db; private final TransactionManager db;
private final CryptoComponent crypto; private final CryptoComponent crypto;
private final Clock clock;
private final MailboxApi api; private final MailboxApi api;
private final MailboxSettingsManager mailboxSettingsManager; private final MailboxSettingsManager mailboxSettingsManager;
@@ -27,11 +29,13 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
@EventExecutor Executor eventExecutor, @EventExecutor Executor eventExecutor,
TransactionManager db, TransactionManager db,
CryptoComponent crypto, CryptoComponent crypto,
Clock clock,
MailboxApi api, MailboxApi api,
MailboxSettingsManager mailboxSettingsManager) { MailboxSettingsManager mailboxSettingsManager) {
this.eventExecutor = eventExecutor; this.eventExecutor = eventExecutor;
this.db = db; this.db = db;
this.crypto = crypto; this.crypto = crypto;
this.clock = clock;
this.api = api; this.api = api;
this.mailboxSettingsManager = mailboxSettingsManager; this.mailboxSettingsManager = mailboxSettingsManager;
} }
@@ -39,6 +43,6 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory {
@Override @Override
public MailboxPairingTask createPairingTask(String qrCodePayload) { public MailboxPairingTask createPairingTask(String qrCodePayload) {
return new MailboxPairingTaskImpl(qrCodePayload, eventExecutor, db, return new MailboxPairingTaskImpl(qrCodePayload, eventExecutor, db,
crypto, api, mailboxSettingsManager); crypto, clock, api, mailboxSettingsManager);
} }
} }

View File

@@ -12,6 +12,7 @@ import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxProperties;
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault; import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.mailbox.MailboxApi.ApiException; import org.briarproject.bramble.mailbox.MailboxApi.ApiException;
import org.briarproject.bramble.mailbox.MailboxApi.MailboxAlreadyPairedException; import org.briarproject.bramble.mailbox.MailboxApi.MailboxAlreadyPairedException;
@@ -44,6 +45,7 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
private final Executor eventExecutor; private final Executor eventExecutor;
private final TransactionManager db; private final TransactionManager db;
private final CryptoComponent crypto; private final CryptoComponent crypto;
private final Clock clock;
private final MailboxApi api; private final MailboxApi api;
private final MailboxSettingsManager mailboxSettingsManager; private final MailboxSettingsManager mailboxSettingsManager;
@@ -59,12 +61,14 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
@EventExecutor Executor eventExecutor, @EventExecutor Executor eventExecutor,
TransactionManager db, TransactionManager db,
CryptoComponent crypto, CryptoComponent crypto,
Clock clock,
MailboxApi api, MailboxApi api,
MailboxSettingsManager mailboxSettingsManager) { MailboxSettingsManager mailboxSettingsManager) {
this.payload = payload; this.payload = payload;
this.eventExecutor = eventExecutor; this.eventExecutor = eventExecutor;
this.db = db; this.db = db;
this.crypto = crypto; this.crypto = crypto;
this.clock = clock;
this.api = api; this.api = api;
this.mailboxSettingsManager = mailboxSettingsManager; this.mailboxSettingsManager = mailboxSettingsManager;
state = new MailboxPairingState.QrCodeReceived(payload); state = new MailboxPairingState.QrCodeReceived(payload);
@@ -108,10 +112,13 @@ class MailboxPairingTaskImpl implements MailboxPairingTask {
MailboxAuthToken ownerToken = api.setup(mailboxProperties); MailboxAuthToken ownerToken = api.setup(mailboxProperties);
MailboxProperties ownerProperties = new MailboxProperties( MailboxProperties ownerProperties = new MailboxProperties(
mailboxProperties.getBaseUrl(), ownerToken, true); mailboxProperties.getBaseUrl(), ownerToken, true);
db.transaction(false, txn -> mailboxSettingsManager long time = clock.currentTimeMillis();
.setOwnMailboxProperties(txn, ownerProperties)); db.transaction(false, txn -> {
mailboxSettingsManager
.setOwnMailboxProperties(txn, ownerProperties);
mailboxSettingsManager.recordSuccessfulConnection(txn, time);
});
setState(new MailboxPairingState.Paired()); setState(new MailboxPairingState.Paired());
// TODO already do mailboxSettingsManager.setOwnMailboxStatus() ?
} }
private void onMailboxError(Exception e, MailboxPairingState state) { private void onMailboxError(Exception e, MailboxPairingState state) {

View File

@@ -9,6 +9,7 @@ import org.briarproject.bramble.api.mailbox.MailboxPairingState;
import org.briarproject.bramble.api.mailbox.MailboxPairingTask; import org.briarproject.bramble.api.mailbox.MailboxPairingTask;
import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxProperties;
import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.test.BrambleMockTestCase; import org.briarproject.bramble.test.BrambleMockTestCase;
import org.briarproject.bramble.test.DbExpectations; import org.briarproject.bramble.test.DbExpectations;
import org.briarproject.bramble.test.ImmediateExecutor; import org.briarproject.bramble.test.ImmediateExecutor;
@@ -35,11 +36,12 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
private final TransactionManager db = private final TransactionManager db =
context.mock(TransactionManager.class); context.mock(TransactionManager.class);
private final CryptoComponent crypto = context.mock(CryptoComponent.class); private final CryptoComponent crypto = context.mock(CryptoComponent.class);
private final Clock clock = context.mock(Clock.class);
private final MailboxApi api = context.mock(MailboxApi.class); private final MailboxApi api = context.mock(MailboxApi.class);
private final MailboxSettingsManager mailboxSettingsManager = private final MailboxSettingsManager mailboxSettingsManager =
context.mock(MailboxSettingsManager.class); context.mock(MailboxSettingsManager.class);
private final MailboxPairingTaskFactory factory = private final MailboxPairingTaskFactory factory =
new MailboxPairingTaskFactoryImpl(executor, db, crypto, api, new MailboxPairingTaskFactoryImpl(executor, db, crypto, clock, api,
mailboxSettingsManager); mailboxSettingsManager);
private final String onion = getRandomString(56); private final String onion = getRandomString(56);
@@ -50,6 +52,7 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
private final MailboxAuthToken ownerToken = private final MailboxAuthToken ownerToken =
new MailboxAuthToken(getRandomId()); new MailboxAuthToken(getRandomId());
private final String validPayload = getValidPayload(); private final String validPayload = getValidPayload();
private final long time = System.currentTimeMillis();
private final MailboxProperties setupProperties = private final MailboxProperties setupProperties =
new MailboxProperties(onionAddress, setupToken, true); new MailboxProperties(onionAddress, setupToken, true);
private final MailboxProperties ownerProperties = private final MailboxProperties ownerProperties =
@@ -88,12 +91,15 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
will(returnValue(onion)); will(returnValue(onion));
oneOf(api).setup(with(matches(setupProperties))); oneOf(api).setup(with(matches(setupProperties)));
will(returnValue(ownerToken)); will(returnValue(ownerToken));
oneOf(clock).currentTimeMillis();
will(returnValue(time));
}}); }});
Transaction txn = new Transaction(null, false); Transaction txn = new Transaction(null, false);
context.checking(new DbExpectations() {{ context.checking(new DbExpectations() {{
oneOf(db).transaction(with(false), withDbRunnable(txn)); oneOf(db).transaction(with(false), withDbRunnable(txn));
oneOf(mailboxSettingsManager).setOwnMailboxProperties( oneOf(mailboxSettingsManager).setOwnMailboxProperties(
with(txn), with(matches(ownerProperties))); with(txn), with(matches(ownerProperties)));
oneOf(mailboxSettingsManager).recordSuccessfulConnection(txn, time);
}}); }});
AtomicInteger i = new AtomicInteger(0); AtomicInteger i = new AtomicInteger(0);
@@ -153,6 +159,8 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase {
will(returnValue(onion)); will(returnValue(onion));
oneOf(api).setup(with(matches(setupProperties))); oneOf(api).setup(with(matches(setupProperties)));
will(returnValue(ownerToken)); will(returnValue(ownerToken));
oneOf(clock).currentTimeMillis();
will(returnValue(time));
}}); }});
Transaction txn = new Transaction(null, false); Transaction txn = new Transaction(null, false);
context.checking(new DbExpectations() {{ context.checking(new DbExpectations() {{