From 4505a6f1c872a8454a2b8ada9d51b1f5b6d2fd48 Mon Sep 17 00:00:00 2001 From: Lysann Schlegel Date: Sat, 21 Sep 2013 01:02:27 +0200 Subject: [PATCH 1/2] fix permission when re-logging the user with checkAuthorizationOnCompletion: Previously the permissionGranted attribute was set only in userAuthorizationURLWithRequestToken:requestedPermission:. But this method is only called by the initial authorization procedure (where the user is asked for permission) initiated by beginAuthWithCallbackURL:permission:completion:. It is not called when using checkAuthorizationOnCompletion:. This commit stores the grantedPermission attribute along with the auth token in the NSUserDefaults, and restores them when checkAuthorizationOnCompletion: succeeds. --- Classes/FlickrKit/FlickrKit.m | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Classes/FlickrKit/FlickrKit.m b/Classes/FlickrKit/FlickrKit.m index e492a02..c4cf916 100644 --- a/Classes/FlickrKit/FlickrKit.m +++ b/Classes/FlickrKit/FlickrKit.m @@ -17,6 +17,7 @@ #define kFKStoredTokenKey @"kFKStoredTokenKey" #define kFKStoredTokenSecret @"kFKStoredTokenSecret" +#define kFKStoredTokenPermission @"kFKStoredTokenPermission" @interface FlickrKit () @property (nonatomic, strong) NSString *apiKey; @@ -296,6 +297,7 @@ - (FKDUNetworkOperation *) completeAuthWithURL:(NSURL *)url completion:(FKAPIAut } else { [[NSUserDefaults standardUserDefaults] setValue:oat forKey:kFKStoredTokenKey]; [[NSUserDefaults standardUserDefaults] setValue:oats forKey:kFKStoredTokenSecret]; + [[NSUserDefaults standardUserDefaults] setValue:@(self.permissionGranted) forKey:kFKStoredTokenPermission]; [[NSUserDefaults standardUserDefaults] synchronize]; self.authorized = YES; self.authToken = oat; @@ -334,7 +336,17 @@ - (FKFlickrNetworkOperation *) checkAuthorizationOnCompletion:(FKAPIAuthCompleti NSString *storedToken = [[NSUserDefaults standardUserDefaults] stringForKey:kFKStoredTokenKey]; NSString *storedSecret = [[NSUserDefaults standardUserDefaults] stringForKey:kFKStoredTokenSecret]; - if(storedToken && storedSecret) { + NSNumber *storedPermission = [[NSUserDefaults standardUserDefaults] objectForKey:kFKStoredTokenPermission]; + switch (storedPermission.integerValue) { + case FKPermissionRead: + case FKPermissionWrite: + case FKPermissionDelete: + break; + default: + storedPermission = nil; + break; + } + if(storedToken && storedSecret && storedPermission) { NSDictionary *args = @{@"oauth_token": storedToken}; @@ -344,6 +356,7 @@ - (FKFlickrNetworkOperation *) checkAuthorizationOnCompletion:(FKAPIAuthCompleti if (response) { self.authToken = storedToken; self.authSecret = storedSecret; + self.permissionGranted = storedPermission.integerValue; NSString *username = [response valueForKeyPath:@"oauth.user.username"]; NSString *userid = [response valueForKeyPath:@"oauth.user.nsid"]; @@ -377,6 +390,7 @@ - (FKFlickrNetworkOperation *) checkAuthorizationOnCompletion:(FKAPIAuthCompleti - (void) logout { [[NSUserDefaults standardUserDefaults] removeObjectForKey:kFKStoredTokenKey]; [[NSUserDefaults standardUserDefaults] removeObjectForKey:kFKStoredTokenSecret]; + [[NSUserDefaults standardUserDefaults] removeObjectForKey:kFKStoredTokenPermission]; [[NSUserDefaults standardUserDefaults] synchronize]; self.authorized = NO; self.authSecret = nil; From da7a0ff26207dd255bf4d8b311b0a632e5221199 Mon Sep 17 00:00:00 2001 From: Lysann Schlegel Date: Sat, 21 Sep 2013 01:13:13 +0200 Subject: [PATCH 2/2] setObject:forKey: looks a bit cleaner than setValue:forKey: when also using stringForKey: and objectForKey: and removeObjectForKey: --- Classes/FlickrKit/FlickrKit.m | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Classes/FlickrKit/FlickrKit.m b/Classes/FlickrKit/FlickrKit.m index c4cf916..cee620f 100644 --- a/Classes/FlickrKit/FlickrKit.m +++ b/Classes/FlickrKit/FlickrKit.m @@ -295,9 +295,9 @@ - (FKDUNetworkOperation *) completeAuthWithURL:(NSURL *)url completion:(FKAPIAut completion(nil, nil, nil, error); } } else { - [[NSUserDefaults standardUserDefaults] setValue:oat forKey:kFKStoredTokenKey]; - [[NSUserDefaults standardUserDefaults] setValue:oats forKey:kFKStoredTokenSecret]; - [[NSUserDefaults standardUserDefaults] setValue:@(self.permissionGranted) forKey:kFKStoredTokenPermission]; + [[NSUserDefaults standardUserDefaults] setObject:oat forKey:kFKStoredTokenKey]; + [[NSUserDefaults standardUserDefaults] setObject:oats forKey:kFKStoredTokenSecret]; + [[NSUserDefaults standardUserDefaults] setObject:@(self.permissionGranted) forKey:kFKStoredTokenPermission]; [[NSUserDefaults standardUserDefaults] synchronize]; self.authorized = YES; self.authToken = oat;