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.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);
}
}

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.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) {

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.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() {{