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
{
[SAMKeychain setAccessibilityType:kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly];
NSString *dbPassword = [SAMKeychain passwordForService:keychainService account:keychainDBPassAccount];
if (!dbPassword) {
dbPassword = [[Randomness generateRandomBytes:30] base64EncodedString];
NSError *error;
[SAMKeychain setPassword:dbPassword forService:keychainService account:keychainDBPassAccount error:&error];
if (error) {
// Sync log to ensure it logs before exiting
NSLog(@"Exiting because we failed to set new DB password. error: %@", error);
exit(1);
} else {
DDLogError(@"Succesfully set new DB password. First launch?");
NSError *keyFetchError;
NSString *dbPassword =
[SAMKeychain passwordForService:keychainService account:keychainDBPassAccount error:&keyFetchError];
if (keyFetchError) {
switch (keyFetchError.code) {
case errSecItemNotFound:
dbPassword = [self createAndSetNewDatabasePassword];
break;
default:
[NSException raise:@"Serious error when getting DB password from keychain."
format:@"error: %@", keyFetchError];
break;
}
}
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
- (void)purgeCollection:(NSString *)collection {

Loading…
Cancel
Save