diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskFactoryImpl.java index 9cbee44a6..6c5150eb3 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskFactoryImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskFactoryImpl.java @@ -6,6 +6,7 @@ import org.briarproject.bramble.api.event.EventExecutor; import org.briarproject.bramble.api.mailbox.MailboxPairingTask; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; +import org.briarproject.bramble.api.system.Clock; import java.util.concurrent.Executor; @@ -19,6 +20,7 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory { private final Executor eventExecutor; private final TransactionManager db; private final CryptoComponent crypto; + private final Clock clock; private final MailboxApi api; private final MailboxSettingsManager mailboxSettingsManager; @@ -27,11 +29,13 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory { @EventExecutor Executor eventExecutor, TransactionManager db, CryptoComponent crypto, + Clock clock, MailboxApi api, MailboxSettingsManager mailboxSettingsManager) { this.eventExecutor = eventExecutor; this.db = db; this.crypto = crypto; + this.clock = clock; this.api = api; this.mailboxSettingsManager = mailboxSettingsManager; } @@ -39,6 +43,6 @@ class MailboxPairingTaskFactoryImpl implements MailboxPairingTaskFactory { @Override public MailboxPairingTask createPairingTask(String qrCodePayload) { return new MailboxPairingTaskImpl(qrCodePayload, eventExecutor, db, - crypto, api, mailboxSettingsManager); + crypto, clock, api, mailboxSettingsManager); } } diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImpl.java index ffc2212a0..03f36d2f7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImpl.java @@ -12,6 +12,7 @@ import org.briarproject.bramble.api.mailbox.MailboxPairingTask; import org.briarproject.bramble.api.mailbox.MailboxProperties; import org.briarproject.bramble.api.mailbox.MailboxSettingsManager; 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.MailboxAlreadyPairedException; @@ -44,6 +45,7 @@ class MailboxPairingTaskImpl implements MailboxPairingTask { private final Executor eventExecutor; private final TransactionManager db; private final CryptoComponent crypto; + private final Clock clock; private final MailboxApi api; private final MailboxSettingsManager mailboxSettingsManager; @@ -59,12 +61,14 @@ class MailboxPairingTaskImpl implements MailboxPairingTask { @EventExecutor Executor eventExecutor, TransactionManager db, CryptoComponent crypto, + Clock clock, MailboxApi api, MailboxSettingsManager mailboxSettingsManager) { this.payload = payload; this.eventExecutor = eventExecutor; this.db = db; this.crypto = crypto; + this.clock = clock; this.api = api; this.mailboxSettingsManager = mailboxSettingsManager; state = new MailboxPairingState.QrCodeReceived(payload); @@ -108,10 +112,13 @@ class MailboxPairingTaskImpl implements MailboxPairingTask { MailboxAuthToken ownerToken = api.setup(mailboxProperties); MailboxProperties ownerProperties = new MailboxProperties( mailboxProperties.getBaseUrl(), ownerToken, true); - db.transaction(false, txn -> mailboxSettingsManager - .setOwnMailboxProperties(txn, ownerProperties)); + long time = clock.currentTimeMillis(); + db.transaction(false, txn -> { + mailboxSettingsManager + .setOwnMailboxProperties(txn, ownerProperties); + mailboxSettingsManager.recordSuccessfulConnection(txn, time); + }); setState(new MailboxPairingState.Paired()); - // TODO already do mailboxSettingsManager.setOwnMailboxStatus() ? } private void onMailboxError(Exception e, MailboxPairingState state) { diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java index 8ee069e78..7b8d70779 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/MailboxPairingTaskImplTest.java @@ -9,6 +9,7 @@ import org.briarproject.bramble.api.mailbox.MailboxPairingState; import org.briarproject.bramble.api.mailbox.MailboxPairingTask; import org.briarproject.bramble.api.mailbox.MailboxProperties; 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.DbExpectations; import org.briarproject.bramble.test.ImmediateExecutor; @@ -35,11 +36,12 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase { private final TransactionManager db = context.mock(TransactionManager.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 MailboxSettingsManager mailboxSettingsManager = context.mock(MailboxSettingsManager.class); private final MailboxPairingTaskFactory factory = - new MailboxPairingTaskFactoryImpl(executor, db, crypto, api, + new MailboxPairingTaskFactoryImpl(executor, db, crypto, clock, api, mailboxSettingsManager); private final String onion = getRandomString(56); @@ -50,6 +52,7 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase { private final MailboxAuthToken ownerToken = new MailboxAuthToken(getRandomId()); private final String validPayload = getValidPayload(); + private final long time = System.currentTimeMillis(); private final MailboxProperties setupProperties = new MailboxProperties(onionAddress, setupToken, true); private final MailboxProperties ownerProperties = @@ -88,12 +91,15 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase { will(returnValue(onion)); oneOf(api).setup(with(matches(setupProperties))); will(returnValue(ownerToken)); + oneOf(clock).currentTimeMillis(); + will(returnValue(time)); }}); Transaction txn = new Transaction(null, false); context.checking(new DbExpectations() {{ oneOf(db).transaction(with(false), withDbRunnable(txn)); oneOf(mailboxSettingsManager).setOwnMailboxProperties( with(txn), with(matches(ownerProperties))); + oneOf(mailboxSettingsManager).recordSuccessfulConnection(txn, time); }}); AtomicInteger i = new AtomicInteger(0); @@ -153,6 +159,8 @@ public class MailboxPairingTaskImplTest extends BrambleMockTestCase { will(returnValue(onion)); oneOf(api).setup(with(matches(setupProperties))); will(returnValue(ownerToken)); + oneOf(clock).currentTimeMillis(); + will(returnValue(time)); }}); Transaction txn = new Transaction(null, false); context.checking(new DbExpectations() {{