Skip to content

Instantly share code, notes, and snippets.

@koke
Created October 30, 2013 19:46
Show Gist options
  • Select an option

  • Save koke/7238985 to your computer and use it in GitHub Desktop.

Select an option

Save koke/7238985 to your computer and use it in GitHub Desktop.
diff --git a/WordPress/WordPressApi/WordPressComApi.m b/WordPress/WordPressApi/WordPressComApi.m
index fba09db..e0b2361 100644
--- a/WordPress/WordPressApi/WordPressComApi.m
+++ b/WordPress/WordPressApi/WordPressComApi.m
@@ -85,6 +85,7 @@ NSString *const WordPressComApiErrorMessageKey = @"WordPressComApiErrorMessageKe
+ (WordPressComApi *)sharedApi {
static WordPressComApi *_sharedApi = nil;
+ static BOOL _keychainResponded = YES;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:@"wpcom_username_preference"];
@@ -98,6 +99,9 @@ NSString *const WordPressComApiErrorMessageKey = @"WordPressComApiErrorMessageKe
error:&error];
if (error) {
DDLogError(@"Error getting WordPress.com password: %@", error);
+ if (error.code == errSecInteractionNotAllowed) {
+ _keychainResponded = NO;
+ }
} else {
DDLogVerbose(@"Found password for API: %@", password ? @"YES" : @"NO");
}
@@ -106,6 +110,9 @@ NSString *const WordPressComApiErrorMessageKey = @"WordPressComApiErrorMessageKe
error:&error];
if (error) {
DDLogError(@"Error getting WordPress.com OAuth token: %@", error);
+ if (error.code == errSecInteractionNotAllowed) {
+ _keychainResponded = NO;
+ }
} else {
DDLogVerbose(@"Found token for API: %@", authToken ? @"YES" : @"NO");
}
@@ -124,6 +131,44 @@ NSString *const WordPressComApiErrorMessageKey = @"WordPressComApiErrorMessageKe
// [_sharedApi checkForNewUnseenNotifications];
});
+ if (!_keychainResponded && _sharedApi.username) {
+ NSString *username = _sharedApi.username;
+ DDLogWarn(@"Retrying keychain access for WordPress.com username %@", username);
+ NSString *password = nil;
+ NSString *authToken = nil;
+ NSError *error = nil;
+ _keychainResponded = YES;
+ password = [SFHFKeychainUtils getPasswordForUsername:username
+ andServiceName:kWPcomXMLRPCUrl
+ error:&error];
+ if (error) {
+ DDLogError(@"Error getting WordPress.com password: %@", error);
+ if (error.code == errSecInteractionNotAllowed) {
+ _keychainResponded = NO;
+ }
+ } else {
+ DDLogVerbose(@"Found password for API: %@", password ? @"YES" : @"NO");
+ }
+ authToken = [SFHFKeychainUtils getPasswordForUsername:username
+ andServiceName:WordPressComApiOauthServiceName
+ error:&error];
+ if (error) {
+ DDLogError(@"Error getting WordPress.com OAuth token: %@", error);
+ if (error.code == errSecInteractionNotAllowed) {
+ _keychainResponded = NO;
+ }
+ } else {
+ DDLogVerbose(@"Found token for API: %@", authToken ? @"YES" : @"NO");
+ }
+
+ if (password) {
+ _sharedApi.password = password;
+ }
+ if (authToken) {
+ _sharedApi.authToken = authToken;
+ }
+ }
+
return _sharedApi;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment