From 2a365d986fdce628f9df57f4174fc2c117c3e4a2 Mon Sep 17 00:00:00 2001 From: ameba23 Date: Wed, 21 Apr 2021 15:36:44 +0200 Subject: [PATCH] Restore account method for account manager --- .../bramble/api/account/AccountManager.java | 12 ++++++++++++ .../bramble/account/AccountManagerImpl.java | 12 ++++++++++++ .../socialbackup/recover/RestoreAccountActivity.java | 4 ++++ .../recover/RestoreAccountViewModel.java | 4 ++++ 4 files changed, 32 insertions(+) create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java create mode 100644 briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java index f33b44594..4acbee525 100644 --- a/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java +++ b/bramble-api/src/main/java/org/briarproject/bramble/api/account/AccountManager.java @@ -2,6 +2,7 @@ package org.briarproject.bramble.api.account; import org.briarproject.bramble.api.crypto.DecryptionException; import org.briarproject.bramble.api.crypto.SecretKey; +import org.briarproject.bramble.api.identity.Identity; import org.briarproject.bramble.api.identity.IdentityManager; import org.briarproject.bramble.api.nullsafety.NotNullByDefault; @@ -43,6 +44,17 @@ public interface AccountManager { */ boolean createAccount(String name, String password); + /** + * Restores a given identity by registering it with the + * {@link IdentityManager}. Creates a database key, encrypts it with the + * given password and stores it on disk. {@link #accountExists()} will + * return true after this method returns true. + * @param identity + * @param password + * @return + */ + boolean restoreAccount(Identity identity, String password); + /** * Deletes all account state from disk. {@link #accountExists()} will * return false after this method returns. diff --git a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java index 4636dfad3..1e1fa71c7 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/account/AccountManagerImpl.java @@ -176,6 +176,18 @@ class AccountManagerImpl implements AccountManager { } } + public boolean restoreAccount(Identity identity, String password) { + synchronized (stateChangeLock) { + if (hasDatabaseKey()) + throw new AssertionError("Already have a database key"); + identityManager.registerIdentity(identity); + SecretKey key = crypto.generateSecretKey(); + if (!encryptAndStoreDatabaseKey(key, password)) return false; + databaseKey = key; + return true; + } + } + @GuardedBy("stateChangeLock") private boolean encryptAndStoreDatabaseKey(SecretKey key, String password) { byte[] plaintext = key.getBytes(); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java new file mode 100644 index 000000000..cd3aceb7f --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountActivity.java @@ -0,0 +1,4 @@ +package org.briarproject.briar.android.socialbackup.recover; + +public class RestoreAccountActivity { +} diff --git a/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java new file mode 100644 index 000000000..3f9f020af --- /dev/null +++ b/briar-android/src/main/java/org/briarproject/briar/android/socialbackup/recover/RestoreAccountViewModel.java @@ -0,0 +1,4 @@ +package org.briarproject.briar.android.socialbackup.recover; + +public class RestoreAccountViewModel { +}