mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Objective-C
		
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Objective-C
		
	
//
 | 
						|
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#import "OWS104CreateRecipientIdentities.h"
 | 
						|
#import <SignalServiceKit/OWSIdentityManager.h>
 | 
						|
#import <SignalServiceKit/OWSRecipientIdentity.h>
 | 
						|
#import <YapDatabase/YapDatabaseConnection.h>
 | 
						|
#import <YapDatabase/YapDatabaseTransaction.h>
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_BEGIN
 | 
						|
 | 
						|
// Increment a similar constant for every future DBMigration
 | 
						|
static NSString *const OWS104CreateRecipientIdentitiesMigrationId = @"104";
 | 
						|
 | 
						|
/**
 | 
						|
 * New SN behavior requires tracking additional state - not just the identity key data.
 | 
						|
 * So we wrap the key, along with the new meta-data in an OWSRecipientIdentity.
 | 
						|
 */
 | 
						|
@implementation OWS104CreateRecipientIdentities
 | 
						|
 | 
						|
+ (NSString *)migrationId
 | 
						|
{
 | 
						|
    return OWS104CreateRecipientIdentitiesMigrationId;
 | 
						|
}
 | 
						|
 | 
						|
- (void)runUpWithTransaction:(YapDatabaseReadWriteTransaction *)transaction
 | 
						|
{
 | 
						|
    NSMutableDictionary<NSString *, NSData *> *identityKeys = [NSMutableDictionary new];
 | 
						|
 | 
						|
    [transaction
 | 
						|
        enumerateKeysAndObjectsInCollection:TSStorageManagerTrustedKeysCollection
 | 
						|
                                 usingBlock:^(NSString *_Nonnull recipientId, id _Nonnull object, BOOL *_Nonnull stop) {
 | 
						|
                                     if (![object isKindOfClass:[NSData class]]) {
 | 
						|
                                         OWSFail(@"%@ Unexpected object in trusted keys collection key: %@ object: %@",
 | 
						|
                                             self.logTag,
 | 
						|
                                             recipientId,
 | 
						|
                                             object);
 | 
						|
                                         return;
 | 
						|
                                     }
 | 
						|
                                     NSData *identityKey = (NSData *)object;
 | 
						|
                                     [identityKeys setObject:identityKey forKey:recipientId];
 | 
						|
                                 }];
 | 
						|
 | 
						|
    [identityKeys enumerateKeysAndObjectsUsingBlock:^(
 | 
						|
        NSString *_Nonnull recipientId, NSData *_Nonnull identityKey, BOOL *_Nonnull stop) {
 | 
						|
        DDLogInfo(@"%@ Migrating identity key for recipient: %@", self.logTag, recipientId);
 | 
						|
        [[[OWSRecipientIdentity alloc] initWithRecipientId:recipientId
 | 
						|
                                               identityKey:identityKey
 | 
						|
                                           isFirstKnownKey:NO
 | 
						|
                                                 createdAt:[NSDate dateWithTimeIntervalSince1970:0]
 | 
						|
                                         verificationState:OWSVerificationStateDefault]
 | 
						|
            saveWithTransaction:transaction];
 | 
						|
    }];
 | 
						|
 | 
						|
    [self saveWithTransaction:transaction];
 | 
						|
}
 | 
						|
 | 
						|
@end
 | 
						|
 | 
						|
NS_ASSUME_NONNULL_END
 |