From 62328514ec1dae52b8cc966561f73b81d7ebed80 Mon Sep 17 00:00:00 2001 From: Koen <koen@pop-os.localdomain> Date: Tue, 5 Dec 2023 15:56:45 +0100 Subject: [PATCH] Moved to upgradeOldSecrets. --- .../futo/polycentric/core/SqlLiteDbHelper.kt | 68 ++++++++++--------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/futo/polycentric/core/SqlLiteDbHelper.kt b/app/src/main/java/com/futo/polycentric/core/SqlLiteDbHelper.kt index 2304845..52d0c26 100644 --- a/app/src/main/java/com/futo/polycentric/core/SqlLiteDbHelper.kt +++ b/app/src/main/java/com/futo/polycentric/core/SqlLiteDbHelper.kt @@ -19,44 +19,14 @@ class SqlLiteDbHelper : SQLiteOpenHelper { Log.w(TAG, "This is version 1, no DB to update") var currentVersion = oldVersion - if (oldVersion == 1 && newVersion == 2) { + if (oldVersion <= 1 && newVersion == 2) { deleteTables(db) createTables(db) currentVersion = 2 } if (currentVersion == 2 && newVersion == 3) { - val cursor = db.rawQuery("SELECT value FROM process_secrets", arrayOf()) - val secrets = arrayListOf<ProcessSecret>() - - cursor.use { - if (it.moveToFirst()) { - do { - val value = it.getBlob(0) - if (value != null) { - try { - val secret = ProcessSecret.fromProto(Protocol.StorageTypeProcessSecret.parseFrom(PEncryptionProviderV0.instance.decrypt(value))) - secrets.add(secret) - } catch (e: Throwable) { - Log.i(TAG, "Failed to convert secret, assuming it is V1 already and skipping", e) - } - } - } while (cursor.moveToNext()) - } - } - - db.beginTransaction(); - try { - for (secret in secrets) { - db.execSQL("DELETE FROM process_secrets WHERE public_key = ?", arrayOf(secret.system.publicKey.key.toBase64())) - val value = PEncryptionProviderV1.instance.encrypt(secret.toProto().toByteArray()) - db.execSQL("INSERT INTO process_secrets VALUES(?, ?)", arrayOf(secret.system.publicKey.key.toBase64(), value)) - } - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); - } - + upgradeOldSecrets(db) currentVersion = 3 } @@ -86,6 +56,40 @@ class SqlLiteDbHelper : SQLiteOpenHelper { } } + fun upgradeOldSecrets(db: SQLiteDatabase) { + val cursor = db.rawQuery("SELECT value FROM process_secrets", arrayOf()) + val secrets = arrayListOf<ProcessSecret>() + + cursor.use { + if (it.moveToFirst()) { + do { + val value = it.getBlob(0) + if (value != null) { + try { + val secret = ProcessSecret.fromProto(Protocol.StorageTypeProcessSecret.parseFrom(PEncryptionProviderV0.instance.decrypt(value))) + Log.i(TAG, "Upgrading old secret system = ${secret.system.publicKey.key.toBase64()}") + secrets.add(secret) + } catch (e: Throwable) { + Log.i(TAG, "Failed to convert secret, assuming it is V1 already and skipping", e) + } + } + } while (cursor.moveToNext()) + } + } + + db.beginTransaction(); + try { + for (secret in secrets) { + db.execSQL("DELETE FROM process_secrets WHERE public_key = ?", arrayOf(secret.system.publicKey.key.toBase64())) + val value = PEncryptionProviderV1.instance.encrypt(secret.toProto().toByteArray()) + db.execSQL("INSERT INTO process_secrets VALUES(?, ?)", arrayOf(secret.system.publicKey.key.toBase64(), value)) + } + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + } + private fun createTables(db: SQLiteDatabase) { db.execSQL("CREATE TABLE system_states (public_key VARCHAR PRIMARY KEY, value BLOB)") db.execSQL("CREATE TABLE process_states (public_key_process VARCHAR PRIMARY KEY, value BLOB)") -- GitLab