From 5da7dc1fd308fc5307b3a79113a938d5c9f09027 Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 22 Jun 2017 17:07:01 -0400 Subject: [PATCH] Archive sessions upon identity change. Session clearing must be in IdentityKeyStore implementation Trying to do it in the protocol will not work with multiple devices, because we'll only archive the session of the first sending device. // FREEBIE --- src/Messages/OWSIdentityManager.m | 5 ++++- src/Storage/AxolotlStore/TSStorageManager+SessionStore.m | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Messages/OWSIdentityManager.m b/src/Messages/OWSIdentityManager.m index 6940f5fa6..4ddae17d6 100644 --- a/src/Messages/OWSIdentityManager.m +++ b/src/Messages/OWSIdentityManager.m @@ -6,8 +6,8 @@ #import "NSDate+millisecondTimeStamp.h" #import "NotificationsProtocol.h" #import "OWSMessageSender.h" -#import "OWSRecipientIdentity.h" #import "OWSOutgoingNullMessage.h" +#import "OWSRecipientIdentity.h" #import "OWSVerificationStateChangeMessage.h" #import "OWSVerificationStateSyncMessage.h" #import "TSAccountManager.h" @@ -15,6 +15,7 @@ #import "TSErrorMessage.h" #import "TSGroupThread.h" #import "TSStorageManager+keyingMaterial.h" +#import "TSStorageManager+sessionStore.h" #import "TSStorageManager.h" #import "TextSecureKitEnv.h" #import <25519/Curve25519.h> @@ -197,6 +198,8 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa createdAt:[NSDate new] verificationState:verificationState] save]; + [self.storageManager archiveAllSessionsForContact:recipientId]; + // Cancel any pending verification state sync messages for this recipient. [self clearSyncMessageForRecipientId:recipientId]; diff --git a/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m b/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m index 2e6f3690b..0014c34f1 100644 --- a/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m +++ b/src/Storage/AxolotlStore/TSStorageManager+SessionStore.m @@ -170,7 +170,6 @@ void AssertIsOnSessionStoreQueue() sessionRecords = [transaction objectForKey:contactIdentifier inCollection:TSStorageManagerSessionStoreCollection]; - for (id deviceId in sessionRecords) { id object = sessionRecords[deviceId]; if (![object isKindOfClass:[SessionRecord class]]) {