From 52c7a9a21459ee4e66857b8e365e07a5db9bec4f Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Thu, 22 May 2025 09:36:11 -0400 Subject: [PATCH] Add copy media backup id to backup playground. --- .../backup/InternalBackupPlaygroundFragment.kt | 10 ++++++++++ .../signalservice/api/backup/MediaRootBackupKey.kt | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt index b5ebfc9a53..43a675a2ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/internal/backup/InternalBackupPlaygroundFragment.kt @@ -77,6 +77,7 @@ import org.signal.core.ui.compose.Rows import org.signal.core.ui.compose.SignalPreview import org.signal.core.ui.compose.Snackbars import org.signal.core.ui.compose.TextFields.TextField +import org.signal.core.util.Base64 import org.signal.core.util.Hex import org.signal.core.util.getLength import org.thoughtcrime.securesms.R @@ -462,6 +463,15 @@ fun Screen( } ) + Rows.TextRow( + text = "Copy Media Backup ID", + label = "Copies the Media Backup ID, Base64 encoded; it can be used to identify your media backup on the server.", + onClick = { + Util.copyToClipboard(context, Base64.encodeWithoutPadding(SignalStore.backup.mediaRootBackupKey.deriveBackupId(SignalStore.account.requireAci()).value)) + Toast.makeText(context, "Copied!", Toast.LENGTH_SHORT).show() + } + ) + Dividers.Default() Text( diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt index 84cd7cf22b..7cea37fcb6 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/backup/MediaRootBackupKey.kt @@ -51,6 +51,15 @@ class MediaRootBackupKey(override val value: ByteArray) : BackupKey { ) } + /** + * Identifies a the location of a user's backup. + */ + fun deriveBackupId(aci: ACI): BackupId { + return BackupId( + LibSignalBackupKey(value).deriveBackupId(aci.libSignalAci) + ) + } + class MediaKeyMaterial( val id: MediaId, val macKey: ByteArray,