From 4505bed61bf89ddae464d462ad3f1437e5cb2db6 Mon Sep 17 00:00:00 2001 From: Audric Ackermann Date: Tue, 22 Sep 2020 08:58:21 +1000 Subject: [PATCH] add migration to drop existing textsecure prefix from group convo ids --- app/sql.js | 57 ++++++++++++++++++++++++++++++++++++++ ts/receiver/dataMessage.ts | 5 +++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/app/sql.js b/app/sql.js index 225fb7e45..73dbdb5da 100644 --- a/app/sql.js +++ b/app/sql.js @@ -812,6 +812,7 @@ const LOKI_SCHEMA_VERSIONS = [ updateToLokiSchemaVersion6, updateToLokiSchemaVersion7, updateToLokiSchemaVersion8, + updateToLokiSchemaVersion9, ]; async function updateToLokiSchemaVersion1(currentVersion, instance) { @@ -1075,6 +1076,26 @@ async function updateToLokiSchemaVersion8(currentVersion, instance) { console.log('updateToLokiSchemaVersion8: success!'); } +async function updateToLokiSchemaVersion9(currentVersion, instance) { + if (currentVersion >= 9) { + return; + } + console.log('updateToLokiSchemaVersion9: starting...'); + await instance.run('BEGIN TRANSACTION;'); + + await removePrefixFromGroupConversations(instance); + + await instance.run( + `INSERT INTO loki_schema ( + version + ) values ( + 9 + );` + ); + await instance.run('COMMIT TRANSACTION;'); + console.log('updateToLokiSchemaVersion9: success!'); +} + async function updateLokiSchema(instance) { const result = await instance.get( "SELECT name FROM sqlite_master WHERE type = 'table' AND name='loki_schema';" @@ -3039,3 +3060,39 @@ async function removeKnownAttachments(allAttachments) { return Object.keys(lookup); } + +async function removePrefixFromGroupConversations(instance) { + const rows = await instance.all( + `SELECT json FROM conversations WHERE + type = 'group' AND + id LIKE '__textsecure_group__!%';` + ); + + const objs = map(rows, row => jsonToObject(row.json)); + + await Promise.all( + objs.map(async o => { + const oldId = o.id; + const newId = oldId.replace('__textsecure_group__!', ''); + + console.log(`migrating conversation, ${oldId} to ${newId}`); + + const morphedObject = { + ...o, + id: newId, + }; + + await instance.run( + `UPDATE ${CONVERSATIONS_TABLE} SET + id = $newId, + json = $json + WHERE id = $oldId;`, + { + $newId: newId, + $json: objectToJSON(morphedObject), + $oldId: oldId, + } + ); + }) + ); +} diff --git a/ts/receiver/dataMessage.ts b/ts/receiver/dataMessage.ts index 0818e037e..ea8049a71 100644 --- a/ts/receiver/dataMessage.ts +++ b/ts/receiver/dataMessage.ts @@ -645,7 +645,10 @@ export async function handleMessageEvent(event: MessageEvent): Promise { let conversationId = id; if (isGroupMessage) { // remove the prefix from the source object so this is correct for all other - message.group.id = message.group.id.replace(PubKey.PREFIX_GROUP_TEXTSECURE, ''); + message.group.id = message.group.id.replace( + PubKey.PREFIX_GROUP_TEXTSECURE, + '' + ); conversationId = message.group.id; }