check for errors in the keychain password retrieval

// FREEBIE
pull/1/head
Sam Vevang 8 years ago committed by Michael Kirk
parent 3eeb6c55d3
commit f8bb46c46c

@ -238,24 +238,40 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
- (NSData *)databasePassword - (NSData *)databasePassword
{ {
[SAMKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly]; [SAMKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly];
NSString *dbPassword = [SAMKeychain passwordForService:keychainService account:keychainDBPassAccount];
if (!dbPassword) { NSError *keyFetchError;
dbPassword = [[Randomness generateRandomBytes:30] base64EncodedString]; NSString *dbPassword =
NSError *error; [SAMKeychain passwordForService:keychainService account:keychainDBPassAccount error:&keyFetchError];
[SAMKeychain setPassword:dbPassword forService:keychainService account:keychainDBPassAccount error:&error];
if (error) { if (keyFetchError) {
// Sync log to ensure it logs before exiting switch (keyFetchError.code) {
NSLog(@"Exiting because we failed to set new DB password. error: %@", error); case errSecItemNotFound:
exit(1); dbPassword = [self createAndSetNewDatabasePassword];
} else { break;
DDLogError(@"Succesfully set new DB password. First launch?"); default:
[NSException raise:@"Serious error when getting DB password from keychain."
format:@"error: %@", keyFetchError];
break;
} }
} }
return [dbPassword dataUsingEncoding:NSUTF8StringEncoding]; return [dbPassword dataUsingEncoding:NSUTF8StringEncoding];
} }
- (NSString *)createAndSetNewDatabasePassword
{
NSString *newDBPassword = [[Randomness generateRandomBytes:30] base64EncodedString];
NSError *keySetError;
[SAMKeychain setPassword:newDBPassword forService:keychainService account:keychainDBPassAccount error:&keySetError];
if (keySetError) {
[NSException raise:@"Error when setting DB password." format:@"error: %@", keySetError];
} else {
DDLogError(@"Succesfully set new DB password. First launch?");
}
return newDBPassword;
}
#pragma mark convenience methods #pragma mark convenience methods
- (void)purgeCollection:(NSString *)collection { - (void)purgeCollection:(NSString *)collection {

Loading…
Cancel
Save