From fcb2bbb76886051a6807e78a16fdd4e02adf301b Mon Sep 17 00:00:00 2001 From: nielsandriesse Date: Wed, 12 Aug 2020 10:00:35 +1000 Subject: [PATCH] Debug --- .../conversation/ConversationActivity.java | 2 +- .../securesms/jobs/PushDecryptJob.java | 2 +- .../jobs/SendDeliveryReceiptJob.java | 3 ++ .../securesms/loki/activities/HomeActivity.kt | 2 +- .../loki/database/LokiAPIDatabase.kt | 32 +++++++++---------- .../loki/database/SharedSenderKeysDatabase.kt | 4 +-- .../loki/protocol/SessionMetaProtocol.kt | 5 +++ 7 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index abb47dcb83..83ed4ef07f 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -1169,7 +1169,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity builder.setPositiveButton(R.string.yes, (dialog, which) -> { Recipient groupRecipient = getRecipient(); try { - String groupPublicKey = HexEncodingKt.toHexString(GroupUtil.getDecodedId(groupRecipient.getAddress().toString())); + String groupPublicKey = HexEncodingKt.toHexString(GroupUtil.getDecodedId(GroupUtil.getDecodedStringId(groupRecipient.getAddress().toString()))); boolean isSSKBasedClosedGroup = DatabaseFactory.getSSKDatabase(this).isSSKBasedClosedGroup(groupPublicKey); if (isSSKBasedClosedGroup) { ClosedGroupsProtocol.leave(this, groupPublicKey); diff --git a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java index 47344b0f2f..cc6445c532 100644 --- a/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/PushDecryptJob.java @@ -303,7 +303,7 @@ public class PushDecryptJob extends BaseJob implements InjectableType { SessionMetaProtocol.handleProfileKeyUpdate(context, content); } - if (content.isNeedsReceipt()) { + if (content.isNeedsReceipt() && SessionMetaProtocol.shouldSendDeliveryReceipt(Address.fromSerialized(content.getSender()))) { handleNeedsDeliveryReceipt(content, message); } } diff --git a/src/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java b/src/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java index b008edb95e..fa589cd5ac 100644 --- a/src/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java +++ b/src/org/thoughtcrime/securesms/jobs/SendDeliveryReceiptJob.java @@ -10,6 +10,7 @@ import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.logging.Log; +import org.thoughtcrime.securesms.loki.protocol.SessionMetaProtocol; import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; @@ -83,6 +84,8 @@ public class SendDeliveryReceiptJob extends BaseJob implements InjectableType { Collections.singletonList(messageId), timestamp); + if (!SessionMetaProtocol.shouldSendDeliveryReceipt(Address.fromSerialized(address))) { return; } + messageSender.sendReceipt(remoteAddress, UnidentifiedAccessUtil.getAccessFor(context, Recipient.from(context, Address.fromSerialized(address), false)), receiptMessage); diff --git a/src/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt b/src/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt index 0b03d16933..a11a84699f 100644 --- a/src/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt +++ b/src/org/thoughtcrime/securesms/loki/activities/HomeActivity.kt @@ -335,7 +335,7 @@ class HomeActivity : PassphraseRequiredActionBarActivity, ConversationClickListe val isClosedGroup = recipient.address.isClosedGroup // Send a leave group message if this is an active closed group if (isClosedGroup && DatabaseFactory.getGroupDatabase(this).isActive(recipient.address.toGroupString())) { - val groupPublicKey = GroupUtil.getDecodedId(recipient.address.toString()).toHexString() + val groupPublicKey = GroupUtil.getDecodedId(GroupUtil.getDecodedStringId(recipient.address.toString())).toHexString() val isSSKBasedClosedGroup = DatabaseFactory.getSSKDatabase(this).isSSKBasedClosedGroup(groupPublicKey) if (isSSKBasedClosedGroup) { ClosedGroupsProtocol.leave(this, groupPublicKey) diff --git a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt index 732ce550f0..58728ed199 100644 --- a/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt +++ b/src/org/thoughtcrime/securesms/loki/database/LokiAPIDatabase.kt @@ -36,7 +36,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( private val lastMessageHashValueTable2 = "last_message_hash_value_table" private val lastMessageHashValue = "last_message_hash_value" @JvmStatic val createLastMessageHashValueTable2Command - = "CREATE TABLE $lastMessageHashValueTable2 ($snode STRING, $publicKey STRING, $lastMessageHashValue TEXT, PRIMARY KEY ($snode, $publicKey));" + = "CREATE TABLE $lastMessageHashValueTable2 ($snode TEXT, $publicKey TEXT, $lastMessageHashValue TEXT, PRIMARY KEY ($snode, $publicKey));" // Received message hash values private val receivedMessageHashValuesTable2 = "received_message_hash_values_table" private val receivedMessageHashValues = "received_message_hash_values" @@ -110,7 +110,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( } string } - val row = wrap(mapOf(Companion.dummyKey to "dummy_key", snodePool to snodePoolAsString)) + val row = wrap(mapOf( Companion.dummyKey to "dummy_key", snodePool to snodePoolAsString )) database.insertOrUpdate(snodePoolTable, row, "${Companion.dummyKey} = ?", wrap("dummy_key")) } @@ -155,13 +155,13 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( if (path0.count() != 3 || path1.count() != 3) { return } Log.d("Loki", "Persisting onion request paths to database.") val database = databaseHelper.writableDatabase - fun set(indexPath: String ,snode: Snode) { + fun set(indexPath: String, snode: Snode) { var snodeAsString = "${snode.address}-${snode.port}" val keySet = snode.publicKeySet if (keySet != null) { snodeAsString += "-${keySet.ed25519Key}-${keySet.x25519Key}" } - val row = wrap(mapOf(Companion.indexPath to indexPath, Companion.snode to snodeAsString)) + val row = wrap(mapOf( Companion.indexPath to indexPath, Companion.snode to snodeAsString )) database.insertOrUpdate(onionRequestPathTable, row, "${Companion.indexPath} = ?", wrap(indexPath)) } set("0-0", path0[0]); set("0-1", path0[1]) @@ -194,23 +194,23 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( } string } - val row = wrap(mapOf(Companion.swarmPublicKey to publicKey, swarm to swarmAsString)) + val row = wrap(mapOf( Companion.swarmPublicKey to publicKey, swarm to swarmAsString )) database.insertOrUpdate(swarmTable, row, "${Companion.swarmPublicKey} = ?", wrap(publicKey)) } override fun getLastMessageHashValue(snode: Snode, publicKey: String): String? { val database = databaseHelper.readableDatabase val query = "${Companion.snode} = ? AND ${Companion.publicKey} = ?" - return database.get(lastMessageHashValueTable2, query, arrayOf( snode.address, publicKey )) { cursor -> + return database.get(lastMessageHashValueTable2, query, arrayOf( snode.toString(), publicKey )) { cursor -> cursor.getString(cursor.getColumnIndexOrThrow(lastMessageHashValue)) } } override fun setLastMessageHashValue(snode: Snode, publicKey: String, newValue: String) { val database = databaseHelper.writableDatabase - val row = wrap(mapOf(Companion.snode to snode.address, Companion.publicKey to publicKey, lastMessageHashValue to newValue)) + val row = wrap(mapOf( Companion.snode to snode.toString(), Companion.publicKey to publicKey, lastMessageHashValue to newValue )) val query = "${Companion.snode} = ? AND ${Companion.publicKey} = ?" - database.insertOrUpdate(lastMessageHashValueTable2, row, query, arrayOf( snode.address, publicKey )) + database.insertOrUpdate(lastMessageHashValueTable2, row, query, arrayOf( snode.toString(), publicKey )) } override fun getReceivedMessageHashValues(publicKey: String): Set? { @@ -218,13 +218,13 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( val query = "$Companion.publicKey = ?" return database.get(receivedMessageHashValuesTable2, query, arrayOf( publicKey )) { cursor -> val receivedMessageHashValuesAsString = cursor.getString(cursor.getColumnIndexOrThrow(receivedMessageHashValues)) - receivedMessageHashValuesAsString.split(", ").toSet() + receivedMessageHashValuesAsString.split("-").toSet() } } override fun setReceivedMessageHashValues(publicKey: String, newValue: Set) { val database = databaseHelper.writableDatabase - val receivedMessageHashValuesAsString = newValue.joinToString(", ") + val receivedMessageHashValuesAsString = newValue.joinToString("-") val row = wrap(mapOf( Companion.publicKey to publicKey, receivedMessageHashValues to receivedMessageHashValuesAsString )) val query = "$Companion.publicKey = ?" database.insertOrUpdate(receivedMessageHashValuesTable2, row, query, arrayOf( publicKey )) @@ -240,7 +240,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( override fun setAuthToken(server: String, newValue: String?) { val database = databaseHelper.writableDatabase if (newValue != null) { - val row = wrap(mapOf(Companion.server to server, token to newValue)) + val row = wrap(mapOf( Companion.server to server, token to newValue )) database.insertOrUpdate(openGroupAuthTokenTable, row, "${Companion.server} = ?", wrap(server)) } else { database.delete(openGroupAuthTokenTable, "${Companion.server} = ?", wrap(server)) @@ -258,7 +258,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( override fun setLastMessageServerID(group: Long, server: String, newValue: Long) { val database = databaseHelper.writableDatabase val index = "$server.$group" - val row = wrap(mapOf(lastMessageServerIDTableIndex to index, lastMessageServerID to newValue.toString())) + val row = wrap(mapOf( lastMessageServerIDTableIndex to index, lastMessageServerID to newValue.toString() )) database.insertOrUpdate(lastMessageServerIDTable, row, "$lastMessageServerIDTableIndex = ?", wrap(index)) } @@ -279,7 +279,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( override fun setLastDeletionServerID(group: Long, server: String, newValue: Long) { val database = databaseHelper.writableDatabase val index = "$server.$group" - val row = wrap(mapOf(lastDeletionServerIDTableIndex to index, lastDeletionServerID to newValue.toString())) + val row = wrap(mapOf( lastDeletionServerIDTableIndex to index, lastDeletionServerID to newValue.toString() )) database.insertOrUpdate(lastDeletionServerIDTable, row, "$lastDeletionServerIDTableIndex = ?", wrap(index)) } @@ -300,7 +300,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( override fun setUserCount(group: Long, server: String, newValue: Int) { val database = databaseHelper.writableDatabase val index = "$server.$group" - val row = wrap(mapOf(publicChatID to index, Companion.userCount to newValue.toString())) + val row = wrap(mapOf( publicChatID to index, Companion.userCount to newValue.toString() )) database.insertOrUpdate(userCountTable, row, "$publicChatID = ?", wrap(index)) } @@ -313,7 +313,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( override fun setSessionRequestSentTimestamp(publicKey: String, newValue: Long) { val database = databaseHelper.writableDatabase - val row = wrap(mapOf(LokiAPIDatabase.publicKey to publicKey, LokiAPIDatabase.timestamp to newValue.toString())) + val row = wrap(mapOf( LokiAPIDatabase.publicKey to publicKey, LokiAPIDatabase.timestamp to newValue.toString() )) database.insertOrUpdate(sessionRequestSentTimestampTable, row, "${LokiAPIDatabase.publicKey} = ?", wrap(publicKey)) } @@ -339,7 +339,7 @@ class LokiAPIDatabase(context: Context, helper: SQLCipherOpenHelper) : Database( override fun setOpenGroupPublicKey(server: String, newValue: String) { val database = databaseHelper.writableDatabase - val row = wrap(mapOf(LokiAPIDatabase.server to server, LokiAPIDatabase.publicKey to newValue)) + val row = wrap(mapOf( LokiAPIDatabase.server to server, LokiAPIDatabase.publicKey to newValue )) database.insertOrUpdate(openGroupPublicKeyTable, row, "${LokiAPIDatabase.server} = ?", wrap(server)) } diff --git a/src/org/thoughtcrime/securesms/loki/database/SharedSenderKeysDatabase.kt b/src/org/thoughtcrime/securesms/loki/database/SharedSenderKeysDatabase.kt index 1b668f532e..23afeeaca0 100644 --- a/src/org/thoughtcrime/securesms/loki/database/SharedSenderKeysDatabase.kt +++ b/src/org/thoughtcrime/securesms/loki/database/SharedSenderKeysDatabase.kt @@ -39,7 +39,7 @@ class SharedSenderKeysDatabase(context: Context, helper: SQLCipherOpenHelper) : return database.get(closedGroupRatchetTable, query, arrayOf( groupPublicKey, senderPublicKey )) { cursor -> val chainKey = cursor.getString(Companion.chainKey) val keyIndex = cursor.getInt(Companion.keyIndex) - val messageKeys = cursor.getString(Companion.messageKeys).split(" - ") + val messageKeys = cursor.getString(Companion.messageKeys).split("-") ClosedGroupRatchet(chainKey, keyIndex, messageKeys) } } @@ -51,7 +51,7 @@ class SharedSenderKeysDatabase(context: Context, helper: SQLCipherOpenHelper) : values.put(Companion.senderPublicKey, senderPublicKey) values.put(Companion.chainKey, ratchet.chainKey) values.put(Companion.keyIndex, ratchet.keyIndex) - values.put(Companion.messageKeys, ratchet.messageKeys.joinToString(" - ")) + values.put(Companion.messageKeys, ratchet.messageKeys.joinToString("-")) val query = "${Companion.closedGroupPublicKey} = ? AND ${Companion.senderPublicKey} = ?" database.insertOrUpdate(closedGroupRatchetTable, values, query, arrayOf( groupPublicKey, senderPublicKey )) } diff --git a/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt b/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt index c0dc77f4b1..1aacde4196 100644 --- a/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt +++ b/src/org/thoughtcrime/securesms/loki/protocol/SessionMetaProtocol.kt @@ -78,6 +78,11 @@ object SessionMetaProtocol { return !recipient.address.isRSSFeed } + @JvmStatic + fun shouldSendDeliveryReceipt(address: Address): Boolean { + return !address.isGroup + } + /** * Should be invoked for the recipient's master device. */