From 27623edbcde7df03b00a6258aad39a695ee0b953 Mon Sep 17 00:00:00 2001
From: Kamal Bramwell <kamal@elixxir.io>
Date: Fri, 2 Dec 2022 09:28:39 -0500
Subject: [PATCH] Initialize Crust with UD instance

---
 .../xxlabs/messenger/backup/bindings/BackupService.kt |  3 +++
 .../backup/bindings/BindingsBackupMediator.kt         |  8 ++++++++
 .../messenger/backup/data/BackupLocationRepository.kt |  2 +-
 .../messenger/backup/data/backup/BackupMediator.kt    | 11 +++++++++++
 .../messenger/repository/client/ClientRepository.kt   |  9 +++++++++
 5 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/app/src/main/java/io/xxlabs/messenger/backup/bindings/BackupService.kt b/app/src/main/java/io/xxlabs/messenger/backup/bindings/BackupService.kt
index 0e5d7fee..4583b0c7 100644
--- a/app/src/main/java/io/xxlabs/messenger/backup/bindings/BackupService.kt
+++ b/app/src/main/java/io/xxlabs/messenger/backup/bindings/BackupService.kt
@@ -1,9 +1,12 @@
 package io.xxlabs.messenger.backup.bindings
 
+import bindings.UserDiscovery
 import io.xxlabs.messenger.backup.data.restore.RestoreLogger
 import io.xxlabs.messenger.bindings.wrapper.contact.ContactWrapperBase
 
 interface BackupService {
+    fun initializeCrustIntegration(userDiscovery: UserDiscovery, receptionRsaPrivKey: ByteArray)
+
     val backupFilePath: String
     /**
      * Assists in debugging restore-related issues.
diff --git a/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt b/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt
index f85abde6..c1cd03d4 100644
--- a/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt
+++ b/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt
@@ -1,5 +1,6 @@
 package io.xxlabs.messenger.backup.bindings
 
+import bindings.UserDiscovery
 import io.xxlabs.messenger.backup.data.restore.RestoreLogger
 import io.xxlabs.messenger.bindings.listeners.MessageReceivedListener
 import io.xxlabs.messenger.bindings.wrapper.contact.ContactWrapperBase
@@ -28,6 +29,13 @@ class BindingsBackupMediator @Inject constructor(
     private val restoreHandler =
         BindingsRestoreHandler(preferences, daoRepo, messageReceivedListener, backupHandler)
 
+    override fun initializeCrustIntegration(
+        userDiscovery: UserDiscovery,
+        receptionRsaPrivKey: ByteArray
+    ) {
+
+    }
+
     override val backupFilePath: String
         get() = File(appContext().filesDir, BACKUP_FILE_NAME).path
 
diff --git a/app/src/main/java/io/xxlabs/messenger/backup/data/BackupLocationRepository.kt b/app/src/main/java/io/xxlabs/messenger/backup/data/BackupLocationRepository.kt
index 8cddcfce..c9835be0 100644
--- a/app/src/main/java/io/xxlabs/messenger/backup/data/BackupLocationRepository.kt
+++ b/app/src/main/java/io/xxlabs/messenger/backup/data/BackupLocationRepository.kt
@@ -14,7 +14,7 @@ abstract class BackupLocationRepository(
     backupService: BackupService,
 ) : AccountBackupDataSource {
 
-    private val crustApi = BindingsCrustMediator()
+    protected val crustApi = BindingsCrustMediator()
 
     protected val googleDrive = GoogleDrive.getInstance(backupService, preferences)
     protected val dropbox = Dropbox.getInstance(backupService, preferences)
diff --git a/app/src/main/java/io/xxlabs/messenger/backup/data/backup/BackupMediator.kt b/app/src/main/java/io/xxlabs/messenger/backup/data/backup/BackupMediator.kt
index fa696e60..fa357a46 100644
--- a/app/src/main/java/io/xxlabs/messenger/backup/data/backup/BackupMediator.kt
+++ b/app/src/main/java/io/xxlabs/messenger/backup/data/backup/BackupMediator.kt
@@ -1,5 +1,6 @@
 package io.xxlabs.messenger.backup.data.backup
 
+import bindings.UserDiscovery
 import io.xxlabs.messenger.backup.bindings.BackupService
 import io.xxlabs.messenger.backup.data.BackupLocationRepository
 import io.xxlabs.messenger.backup.model.AccountBackup
@@ -15,6 +16,16 @@ class BackupMediator @Inject constructor(
     BackupService by backupService,
     BackupTaskPublisher by backupTaskPublisher
 {
+    override fun initializeCrustIntegration(
+        userDiscovery: UserDiscovery,
+        receptionRsaPrivKey: ByteArray
+    ) {
+        crustApi.apply {
+            udManager = userDiscovery
+            receptionRsaPrivateKey = receptionRsaPrivKey
+        }
+    }
+
     private val settingsHandler: BackupPreferencesDelegate by lazy {
         BackupPreferencesDelegate(preferences, this)
     }
diff --git a/app/src/main/java/io/xxlabs/messenger/repository/client/ClientRepository.kt b/app/src/main/java/io/xxlabs/messenger/repository/client/ClientRepository.kt
index d12615f8..50c1b48a 100644
--- a/app/src/main/java/io/xxlabs/messenger/repository/client/ClientRepository.kt
+++ b/app/src/main/java/io/xxlabs/messenger/repository/client/ClientRepository.kt
@@ -3,6 +3,7 @@ package io.xxlabs.messenger.repository.client
 import android.content.Context
 import bindings.Bindings
 import bindings.NetworkHealthCallback
+import bindings.UserDiscovery
 import com.google.android.gms.tasks.OnCompleteListener
 import com.google.firebase.messaging.FirebaseMessaging
 import io.reactivex.Maybe
@@ -224,6 +225,7 @@ class ClientRepository @Inject constructor(
             try {
                 udWrapperBindings = BindingsWrapperBindings
                     .newUserDiscovery(clientWrapper) as UserDiscoveryWrapperBindings
+                initializeCrust(udWrapperBindings.userDiscovery)
                 emitter.onSuccess(true)
             } catch (e: Exception) {
                 emitter.onError(e)
@@ -231,6 +233,13 @@ class ClientRepository @Inject constructor(
         }
     }
 
+    private fun initializeCrust(userDiscovery: UserDiscovery) {
+        backupService.initializeCrustIntegration(
+            userDiscovery,
+            clientWrapper.client.user.receptionRSAPrivateKeyPem
+        )
+    }
+
     override fun isLoggedIn(): Single<Boolean> {
         return hasInitialized()
     }
-- 
GitLab