Commit 287f3760 authored by akwizgran's avatar akwizgran

Pass database key into LifecycleManager.

parent 58d09d07
Pipeline #1916 passed with stage
in 8 minutes and 31 seconds
......@@ -16,7 +16,7 @@ public interface ContactManager {
/**
* Registers a hook to be called whenever a contact is added or removed.
* This method should be called before
* {@link LifecycleManager#startServices()}.
* {@link LifecycleManager#startServices(SecretKey)}.
*/
void registerContactHook(ContactHook hook);
......
package org.briarproject.bramble.api.lifecycle;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.db.DatabaseComponent;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.sync.Client;
......@@ -16,7 +17,7 @@ import java.util.concurrent.ExecutorService;
public interface LifecycleManager {
/**
* The result of calling {@link #startServices()}.
* The result of calling {@link #startServices(SecretKey)}.
*/
enum StartResult {
ALREADY_RUNNING,
......@@ -42,27 +43,27 @@ public interface LifecycleManager {
/**
* Registers a {@link Service} to be started and stopped. This method
* should be called before {@link #startServices()}.
* should be called before {@link #startServices(SecretKey)}.
*/
void registerService(Service s);
/**
* Registers a {@link Client} to be started. This method should be called
* before {@link #startServices()}.
* before {@link #startServices(SecretKey)}.
*/
void registerClient(Client c);
/**
* Registers an {@link ExecutorService} to be shut down. This method
* should be called before {@link #startServices()}.
* should be called before {@link #startServices(SecretKey)}.
*/
void registerForShutdown(ExecutorService e);
/**
* Opens the {@link DatabaseComponent} and starts any registered
* {@link Client Clients} and {@link Service Services}.
* Opens the {@link DatabaseComponent} using the given key and starts any
* registered {@link Client Clients} and {@link Service Services}.
*/
StartResult startServices();
StartResult startServices(SecretKey dbKey);
/**
* Stops any registered {@link Service Services}, shuts down any
......
package org.briarproject.bramble.api.sync;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.db.Metadata;
import org.briarproject.bramble.api.db.Transaction;
......@@ -35,7 +36,8 @@ public interface ValidationManager {
/**
* Registers the message validator for the given client. This method
* should be called before {@link LifecycleManager#startServices()}.
* should be called before
* {@link LifecycleManager#startServices(SecretKey)}.
*/
void registerMessageValidator(ClientId c, int majorVersion,
MessageValidator v);
......@@ -43,7 +45,8 @@ public interface ValidationManager {
/**
* Registers the incoming message hook for the given client. The hook will
* be called once for each incoming message that passes validation. This
* method should be called before {@link LifecycleManager#startServices()}.
* method should be called before
* {@link LifecycleManager#startServices(SecretKey)}.
*/
void registerIncomingMessageHook(ClientId c, int majorVersion,
IncomingMessageHook hook);
......
......@@ -2,6 +2,7 @@ package org.briarproject.bramble.api.versioning;
import org.briarproject.bramble.api.contact.Contact;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
......@@ -25,7 +26,7 @@ public interface ClientVersioningManager {
/**
* Registers a client that will be advertised to contacts. The hook will
* be called when the visibility of the client changes. This method should
* be called before {@link LifecycleManager#startServices()}.
* be called before {@link LifecycleManager#startServices(SecretKey)}.
*/
void registerClient(ClientId clientId, int majorVersion, int minorVersion,
ClientVersioningHook hook);
......
package org.briarproject.bramble.lifecycle;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.db.DataTooNewException;
import org.briarproject.bramble.api.db.DataTooOldException;
......@@ -57,7 +56,6 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener {
private final List<Service> services;
private final List<Client> clients;
private final List<ExecutorService> executors;
private final AccountManager accountManager;
private final IdentityManager identityManager;
private final Semaphore startStopSemaphore = new Semaphore(1);
private final CountDownLatch dbLatch = new CountDownLatch(1);
......@@ -68,10 +66,9 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener {
@Inject
LifecycleManagerImpl(DatabaseComponent db, EventBus eventBus,
AccountManager accountManager, IdentityManager identityManager) {
IdentityManager identityManager) {
this.db = db;
this.eventBus = eventBus;
this.accountManager = accountManager;
this.identityManager = identityManager;
services = new CopyOnWriteArrayList<>();
clients = new CopyOnWriteArrayList<>();
......@@ -99,7 +96,7 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener {
}
@Override
public StartResult startServices() {
public StartResult startServices(SecretKey dbKey) {
if (!startStopSemaphore.tryAcquire()) {
LOG.info("Already starting or stopping");
return ALREADY_RUNNING;
......@@ -108,9 +105,7 @@ class LifecycleManagerImpl implements LifecycleManager, MigrationListener {
LOG.info("Starting services");
long start = now();
SecretKey key = accountManager.getDatabaseKey();
if (key == null) throw new IllegalStateException();
boolean reopened = db.open(key, this);
boolean reopened = db.open(dbKey, this);
if (reopened) logDuration(LOG, "Reopening database", start);
else logDuration(LOG, "Creating database", start);
identityManager.storeLocalAuthor();
......
package org.briarproject.bramble.test;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.lifecycle.Service;
......@@ -39,7 +40,7 @@ public class TestLifecycleModule {
}
@Override
public StartResult startServices() {
public StartResult startServices(SecretKey dbKey) {
return StartResult.SUCCESS;
}
......
......@@ -18,6 +18,7 @@ import android.support.v4.app.NotificationCompat;
import android.support.v4.content.ContextCompat;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.crypto.SecretKey;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager.StartResult;
import org.briarproject.bramble.api.system.AndroidExecutor;
......@@ -97,7 +98,8 @@ public class BriarService extends Service {
stopSelf();
return;
}
if (!accountManager.hasDatabaseKey()) {
SecretKey dbKey = accountManager.getDatabaseKey();
if (dbKey == null) {
LOG.info("No database key");
stopSelf();
return;
......@@ -142,7 +144,7 @@ public class BriarService extends Service {
nm.cancel(REMINDER_NOTIFICATION_ID);
// Start the services in a background thread
new Thread(() -> {
StartResult result = lifecycleManager.startServices();
StartResult result = lifecycleManager.startServices(dbKey);
if (result == SUCCESS) {
started = true;
} else if (result == ALREADY_RUNNING) {
......
......@@ -27,6 +27,7 @@ import org.junit.Test;
import java.io.File;
import java.util.Collection;
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
......@@ -53,10 +54,8 @@ public class FeedManagerIntegrationTest extends BriarTestCase {
LocalAuthor localAuthor = identityManager.createLocalAuthor("feedTest");
identityManager.registerLocalAuthor(localAuthor);
component.getAccountManager().createAccount("password");
lifecycleManager = component.getLifecycleManager();
lifecycleManager.startServices();
lifecycleManager.startServices(getSecretKey());
lifecycleManager.waitForStartup();
feedManager = component.getFeedManager();
......
package org.briarproject.briar.feed;
import org.briarproject.bramble.account.AccountModule;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.client.ClientModule;
......@@ -38,7 +36,6 @@ import dagger.Component;
TestSecureRandomModule.class,
TestSocksModule.class,
TestDnsModule.class,
AccountModule.class,
BriarClientModule.class,
ClientModule.class,
ContactModule.class,
......@@ -82,8 +79,6 @@ interface FeedManagerIntegrationTestComponent {
IdentityManager getIdentityManager();
AccountManager getAccountManager();
LifecycleManager getLifecycleManager();
FeedManager getFeedManager();
......
package org.briarproject.briar.introduction;
import org.briarproject.bramble.account.AccountModule;
import org.briarproject.bramble.client.ClientModule;
import org.briarproject.bramble.contact.ContactModule;
import org.briarproject.bramble.crypto.CryptoExecutorModule;
......@@ -37,7 +36,6 @@ import dagger.Component;
TestDatabaseModule.class,
TestPluginConfigModule.class,
TestSecureRandomModule.class,
AccountModule.class,
BlogModule.class,
BriarClientModule.class,
ClientModule.class,
......
......@@ -103,11 +103,9 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
// Add an identity for the user
IdentityManager identityManager = device.getIdentityManager();
identityManager.registerLocalAuthor(local);
// Create an account
device.getAccountManager().createAccount("password");
// Start the lifecycle manager
LifecycleManager lifecycleManager = device.getLifecycleManager();
lifecycleManager.startServices();
lifecycleManager.startServices(getSecretKey());
lifecycleManager.waitForStartup();
// Add the other user as a contact
ContactManager contactManager = device.getContactManager();
......
package org.briarproject.briar.messaging;
import org.briarproject.bramble.account.AccountModule;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.contact.ContactManager;
import org.briarproject.bramble.api.event.EventBus;
import org.briarproject.bramble.api.identity.IdentityManager;
......@@ -41,7 +39,6 @@ import dagger.Component;
TestDatabaseModule.class,
TestPluginConfigModule.class,
TestSecureRandomModule.class,
AccountModule.class,
BriarClientModule.class,
ClientModule.class,
ContactModule.class,
......@@ -80,8 +77,6 @@ interface SimplexMessagingIntegrationTestComponent {
IdentityManager getIdentityManager();
AccountManager getAccountManager();
ContactManager getContactManager();
MessagingManager getMessagingManager();
......
......@@ -140,9 +140,6 @@ public abstract class BriarIntegrationTest<C extends BriarIntegrationTestCompone
assertTrue(testDir.mkdirs());
createComponents();
c0.getAccountManager().createAccount("password");
c1.getAccountManager().createAccount("password");
c2.getAccountManager().createAccount("password");
identityManager0 = c0.getIdentityManager();
identityManager1 = c1.getIdentityManager();
identityManager2 = c2.getIdentityManager();
......@@ -196,9 +193,9 @@ public abstract class BriarIntegrationTest<C extends BriarIntegrationTestCompone
lifecycleManager0 = c0.getLifecycleManager();
lifecycleManager1 = c1.getLifecycleManager();
lifecycleManager2 = c2.getLifecycleManager();
lifecycleManager0.startServices();
lifecycleManager1.startServices();
lifecycleManager2.startServices();
lifecycleManager0.startServices(getSecretKey());
lifecycleManager1.startServices(getSecretKey());
lifecycleManager2.startServices(getSecretKey());
lifecycleManager0.waitForStartup();
lifecycleManager1.waitForStartup();
lifecycleManager2.waitForStartup();
......
package org.briarproject.briar.test;
import org.briarproject.bramble.account.AccountModule;
import org.briarproject.bramble.api.account.AccountManager;
import org.briarproject.bramble.api.client.ClientHelper;
import org.briarproject.bramble.api.contact.ContactManager;
import org.briarproject.bramble.api.db.DatabaseComponent;
......@@ -56,7 +54,6 @@ import dagger.Component;
TestDatabaseModule.class,
TestPluginConfigModule.class,
TestSecureRandomModule.class,
AccountModule.class,
BlogModule.class,
BriarClientModule.class,
ClientModule.class,
......@@ -123,8 +120,6 @@ public interface BriarIntegrationTestComponent {
IdentityManager getIdentityManager();
AccountManager getAccountManager();
ClientHelper getClientHelper();
ContactManager getContactManager();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment