diff --git a/app/src/main/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManager.kt b/app/src/main/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManager.kt index 962f79b3a..a20ae5d1c 100644 --- a/app/src/main/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManager.kt +++ b/app/src/main/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManager.kt @@ -30,6 +30,11 @@ import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString import kotlinx.serialization.json.Json +private const val SNAPSHOT_PACKAGE_NAME_PREFIX = "com.ai.assistance.operit" + +internal fun isSupportedSnapshotPackageName(packageName: String): Boolean = + packageName.startsWith(SNAPSHOT_PACKAGE_NAME_PREFIX) + object RawSnapshotBackupManager { private const val TAG = "RawSnapshotBackup" @@ -288,7 +293,7 @@ object RawSnapshotBackupManager { AppLogger.i(TAG, "restore closed databases (room + objectbox)") withContext(Dispatchers.Main) { onProgress?.invoke(RestoreProgress.EXTRACTING) } - val manifest = extractZipToWorkDir(cacheZip, workDir, expectedPackageName = context.packageName) + val manifest = extractZipToWorkDir(cacheZip, workDir) val payloadDir = File(workDir, "payload") val externalFilesPayloadDir = File(payloadDir, "external_files") @@ -343,7 +348,7 @@ object RawSnapshotBackupManager { } } - private fun extractZipToWorkDir(zipFile: File, workDir: File, expectedPackageName: String): Manifest { + private fun extractZipToWorkDir(zipFile: File, workDir: File): Manifest { val payloadRoot = File(workDir, "payload") payloadRoot.mkdirs() @@ -407,7 +412,7 @@ object RawSnapshotBackupManager { throw IllegalArgumentException("Unsupported backup version: ${manifest.formatVersion}") } - if (manifest.packageName != expectedPackageName) { + if (!isSupportedSnapshotPackageName(manifest.packageName)) { throw IllegalArgumentException("Backup package mismatch: ${manifest.packageName}") } diff --git a/app/src/test/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManagerTest.kt b/app/src/test/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManagerTest.kt new file mode 100644 index 000000000..0f78b7c46 --- /dev/null +++ b/app/src/test/java/com/ai/assistance/operit/data/backup/RawSnapshotBackupManagerTest.kt @@ -0,0 +1,21 @@ +package com.ai.assistance.operit.data.backup + +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Test + +class RawSnapshotBackupManagerTest { + + @Test + fun snapshotPackageName_acceptsOperitPackagePrefix() { + assertTrue(isSupportedSnapshotPackageName("com.ai.assistance.operit")) + assertTrue(isSupportedSnapshotPackageName("com.ai.assistance.operit.debug")) + assertTrue(isSupportedSnapshotPackageName("com.ai.assistance.operit.clone")) + } + + @Test + fun snapshotPackageName_rejectsDifferentPackagePrefix() { + assertFalse(isSupportedSnapshotPackageName("com.ai.assistance.other")) + assertFalse(isSupportedSnapshotPackageName("com.example.operit")) + } +}