diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 3acaa93ee..20f136a04 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -84,9 +84,7 @@ [[TSStorageManager sharedManager] setupDatabase]; [self performUpdateCheck]; - - //self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; - + [self prepareScreenshotProtection]; self.notificationTracker = [NotificationTracker notificationTracker]; diff --git a/Signal/src/contact/Contact.m b/Signal/src/contact/Contact.m index 4603916a7..126cdee6b 100644 --- a/Signal/src/contact/Contact.m +++ b/Signal/src/contact/Contact.m @@ -84,7 +84,7 @@ static NSString *const DEFAULTS_KEY_DATE = @"DefaultsKeyDate"; - (BOOL)isTextSecureContact{ __block BOOL isRecipient = NO; - [[TSStorageManager sharedManager].databaseConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWithBlock:^(YapDatabaseReadTransaction *transaction) { for (PhoneNumber *number in self.parsedPhoneNumbers) { if ([TSRecipient recipientWithTextSecureIdentifier:number.toE164 withTransaction:transaction]) { isRecipient = YES; diff --git a/Signal/src/contact/ContactsManager.h b/Signal/src/contact/ContactsManager.h index 8a6785695..3862a84d7 100644 --- a/Signal/src/contact/ContactsManager.h +++ b/Signal/src/contact/ContactsManager.h @@ -45,4 +45,6 @@ typedef void(^ABReloadRequestCompletionBlock)(NSArray *contacts); - (NSArray*)allContacts; - (NSArray*)textSecureContacts; +- (NSString*)nameStringForPhoneIdentifier:(NSString*)identifier; + @end diff --git a/Signal/src/contact/ContactsManager.m b/Signal/src/contact/ContactsManager.m index d7d7273ed..7d15fecb4 100644 --- a/Signal/src/contact/ContactsManager.m +++ b/Signal/src/contact/ContactsManager.m @@ -425,4 +425,15 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in return phoneNumber != nil && [directory containsPhoneNumber:phoneNumber]; } +- (NSString*)nameStringForPhoneIdentifier:(NSString*)identifier{ + for (Contact *contact in self.textSecureContacts) { + for (PhoneNumber *phoneNumber in contact.parsedPhoneNumbers) { + if ([phoneNumber.toE164 isEqualToString:identifier]) { + return contact.fullName; + } + } + } + return nil; +} + @end diff --git a/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m b/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m index 5918c8985..a317b47ab 100644 --- a/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m +++ b/Signal/src/phone/signaling/number directory/PhoneNumberDirectoryFilterManager.m @@ -134,7 +134,7 @@ } } - [[TSStorageManager sharedManager].databaseConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { + [[TSStorageManager sharedManager].dbConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *transaction) { for (NSString *identifier in tsIdentifiers) { TSRecipient *recipient = [TSRecipient recipientWithTextSecureIdentifier:identifier withTransaction:transaction]; if (!recipient) { diff --git a/Signal/src/textsecure/Account/TSAccountManager.m b/Signal/src/textsecure/Account/TSAccountManager.m index 48e5d9fd2..c674bbe24 100644 --- a/Signal/src/textsecure/Account/TSAccountManager.m +++ b/Signal/src/textsecure/Account/TSAccountManager.m @@ -73,7 +73,7 @@ [[TSNetworkManager sharedManager] queueAuthenticatedRequest:[[TSRegisterForPushRequest alloc] initWithPushIdentifier:stringToken] success:^(NSURLSessionDataTask *task, id responseObject) { success(); - } failure:^(NSURLSessionDataTask *task, NSError *error) { + } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"NSError: %@", error.debugDescription); TSRegistrationFailure failureType = kTSRegistrationFailureNetwork; diff --git a/Signal/src/textsecure/Storage/TSDatabaseView.m b/Signal/src/textsecure/Storage/TSDatabaseView.m index 19ff33146..58536d055 100644 --- a/Signal/src/textsecure/Storage/TSDatabaseView.m +++ b/Signal/src/textsecure/Storage/TSDatabaseView.m @@ -19,7 +19,6 @@ NSString *TSThreadGroup = @"TSThreadGroup"; NSString *TSThreadDatabaseViewExtensionName = @"TSThreadDatabaseViewExtensionName"; NSString *TSMessageDatabaseViewExtensionName = @"TSMessageDatabaseViewExtensionName"; -NSString *TSRecipientsDatabaseViewExtensionName = @"TSRecipientsDatabaseViewExtensionName"; @implementation TSDatabaseView diff --git a/Signal/src/textsecure/Storage/TSStorageManager.m b/Signal/src/textsecure/Storage/TSStorageManager.m index b5283f254..1460a586c 100644 --- a/Signal/src/textsecure/Storage/TSStorageManager.m +++ b/Signal/src/textsecure/Storage/TSStorageManager.m @@ -40,26 +40,60 @@ static NSString * keychainDBPassAccount = @"TSDatabasePass"; return sharedMyManager; } -- (void)setupDatabase { +- (instancetype)init { + self = [super init]; + YapDatabaseOptions *options = [[YapDatabaseOptions alloc] init]; options.corruptAction = YapDatabaseCorruptAction_Fail; options.passphraseBlock = ^{ return [self databasePassword]; }; - self. database = [[YapDatabase alloc] initWithPath:[self dbPath] - objectSerializer:NULL - objectDeserializer:NULL - metadataSerializer:NULL - metadataDeserializer:NULL - objectSanitizer:NULL - metadataSanitizer:NULL - options:options]; - self.dbConnection = self.databaseConnection; + _database = [[YapDatabase alloc] initWithPath:[self dbPath] + objectSerializer:NULL + objectDeserializer:NULL + metadataSerializer:NULL + metadataDeserializer:NULL + objectSanitizer:NULL + metadataSanitizer:NULL + options:options]; + _dbConnection = self.newDatabaseConnection; + return self; +} + +- (void)setupDatabase { [TSDatabaseView registerThreadDatabaseView]; [TSDatabaseView registerBuddyConversationDatabaseView]; } +/** + * Protects the preference and logs file with disk encryption and prevents them to leak to iCloud. + */ + +- (void)protectDatabaseFile{ + + NSDictionary *attrs = @{NSFileProtectionKey: NSFileProtectionCompleteUntilFirstUserAuthentication}; + NSError *error; + + + [NSFileManager.defaultManager setAttributes:attrs ofItemAtPath:[self dbPath] error:&error]; + [[NSURL fileURLWithPath:[self dbPath]] setResourceValue:@YES + forKey:NSURLIsExcludedFromBackupKey + error:&error]; + + if (error) { + DDLogError(@"Error while removing log files from backup: %@", error.description); + UIAlertView *alert = [[UIAlertView alloc]initWithTitle:NSLocalizedString(@"WARNING", @"") + message:NSLocalizedString(@"DISABLING_BACKUP_FAILED", @"") + delegate:nil + cancelButtonTitle:NSLocalizedString(@"OK", @"") + otherButtonTitles:nil]; + [alert show]; + return; + } + +} + - (YapDatabaseConnection *)newDatabaseConnection { return self.database.newConnection; }