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
|
|
{
|
|
OWSAssert(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];
|
|
}];
|
|
}
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|