Browse Source

Merge branch 'pin-GIDProfileDataFetcher-new' into pin-GIDProfileDataFetcher-fake

pinlu 3 years ago
parent
commit
ec79d8f243

+ 0 - 23
GoogleSignIn/Sources/GIDProfileData.m

@@ -32,13 +32,6 @@ static NSString *const kFamilyNameKey = @"family_name";
 static NSString *const kImageURLKey = @"image_url";
 static NSString *const kOldImageURLStringKey = @"picture";
 
-// Basic profile (Fat ID Token / userinfo endpoint) keys
-NSString *const kBasicProfileEmailKey = @"email";
-NSString *const kBasicProfilePictureKey = @"picture";
-NSString *const kBasicProfileNameKey = @"name";
-NSString *const kBasicProfileGivenNameKey = @"given_name";
-NSString *const kBasicProfileFamilyNameKey = @"family_name";
-
 @implementation GIDProfileData {
   NSURL *_imageURL;
 }
@@ -59,22 +52,6 @@ NSString *const kBasicProfileFamilyNameKey = @"family_name";
   return self;
 }
 
-- (nullable instancetype)initWithIDToken:(OIDIDToken *)idToken {
-  if (!idToken ||
-      !idToken.claims[kBasicProfilePictureKey] ||
-      !idToken.claims[kBasicProfileNameKey] ||
-      !idToken.claims[kBasicProfileGivenNameKey] ||
-      !idToken.claims[kBasicProfileFamilyNameKey]) {
-    return nil;
-  }
-
-  return [self initWithEmail:idToken.claims[kBasicProfileEmailKey]
-                        name:idToken.claims[kBasicProfileNameKey]
-                   givenName:idToken.claims[kBasicProfileGivenNameKey]
-                  familyName:idToken.claims[kBasicProfileFamilyNameKey]
-                    imageURL:[NSURL URLWithString:idToken.claims[kBasicProfilePictureKey]]];
-}
-
 - (BOOL)hasImage {
   return _imageURL != nil;
 }

+ 7 - 1
GoogleSignIn/Sources/GIDProfileDataFetcher/API/GIDProfileDataFetcher.h

@@ -17,13 +17,14 @@
 #import <Foundation/Foundation.h>
 
 @class OIDAuthState;
+@class OIDIDToken;
 @class GIDProfileData;
 
 NS_ASSUME_NONNULL_BEGIN
 
 @protocol GIDProfileDataFetcher <NSObject>
 
-/// Fetches the latest @GIDProfileData object.
+/// Fetches the latest `GIDProfileData` object.
 ///
 /// "This method either extracts profile data from `OIDIDToken` in `OIDAuthState` or fetches it
 /// from the UserInfo endpoint."
@@ -34,6 +35,11 @@ NS_ASSUME_NONNULL_BEGIN
                            completion:(void (^)(GIDProfileData *_Nullable profileData,
                                                 NSError *_Nullable error))completion;
 
+/// Fetches the latest `GIDProfileData` object.
+///
+/// @param idToken The ID token.
+- (nullable GIDProfileData*)fetchProfileDataWithIDToken:(OIDIDToken *)idToken;
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 25 - 1
GoogleSignIn/Sources/GIDProfileDataFetcher/Implementations/GIDProfileDataFetcher.m

@@ -34,6 +34,13 @@ NS_ASSUME_NONNULL_BEGIN
 // The URL template for the URL to get user info.
 static NSString *const kUserInfoURLTemplate = @"https://%@/oauth2/v3/userinfo";
 
+// Basic profile (Fat ID Token / userinfo endpoint) keys
+static NSString *const kBasicProfileEmailKey = @"email";
+static NSString *const kBasicProfilePictureKey = @"picture";
+static NSString *const kBasicProfileNameKey = @"name";
+static NSString *const kBasicProfileGivenNameKey = @"given_name";
+static NSString *const kBasicProfileFamilyNameKey = @"family_name";
+
 @implementation GIDProfileDataFetcher {
   id<GIDHTTPFetcher> _httpFetcher;
 }
@@ -58,7 +65,7 @@ static NSString *const kUserInfoURLTemplate = @"https://%@/oauth2/v3/userinfo";
       [[OIDIDToken alloc] initWithIDTokenString:authState.lastTokenResponse.idToken];
   // If profile data is present in the ID token, use it.
   if (idToken) {
-    GIDProfileData *profileData = [[GIDProfileData alloc] initWithIDToken:idToken];
+    GIDProfileData *profileData = [self fetchProfileDataWithIDToken:idToken];
     completion(profileData, nil);
     return;
   }
@@ -99,6 +106,23 @@ static NSString *const kUserInfoURLTemplate = @"https://%@/oauth2/v3/userinfo";
   }];
 }
 
+- (nullable GIDProfileData*)fetchProfileDataWithIDToken:(OIDIDToken *)idToken {
+  if (!idToken ||
+      !idToken.claims[kBasicProfilePictureKey] ||
+      !idToken.claims[kBasicProfileNameKey] ||
+      !idToken.claims[kBasicProfileGivenNameKey] ||
+      !idToken.claims[kBasicProfileFamilyNameKey]) {
+    return nil;
+  }
+
+  return [[GIDProfileData alloc]
+      initWithEmail:idToken.claims[kBasicProfileEmailKey]
+               name:idToken.claims[kBasicProfileNameKey]
+          givenName:idToken.claims[kBasicProfileGivenNameKey]
+         familyName:idToken.claims[kBasicProfileFamilyNameKey]
+           imageURL:[NSURL URLWithString:idToken.claims[kBasicProfilePictureKey]]];
+}
+
 @end
 
 NS_ASSUME_NONNULL_END

+ 0 - 11
GoogleSignIn/Sources/GIDProfileData_Private.h

@@ -16,16 +16,8 @@
 
 #import "GoogleSignIn/Sources/Public/GoogleSignIn/GIDProfileData.h"
 
-@class OIDIDToken;
-
 NS_ASSUME_NONNULL_BEGIN
 
-extern NSString *const kBasicProfileEmailKey;
-extern NSString *const kBasicProfilePictureKey;
-extern NSString *const kBasicProfileNameKey;
-extern NSString *const kBasicProfileGivenNameKey;
-extern NSString *const kBasicProfileFamilyNameKey;
-
 // Private |GIDProfileData| methods that are used in this SDK.
 @interface GIDProfileData ()
 
@@ -36,9 +28,6 @@ extern NSString *const kBasicProfileFamilyNameKey;
                    familyName:(nullable NSString *)familyName
                      imageURL:(nullable NSURL *)imageURL NS_DESIGNATED_INITIALIZER;
 
-/// Initialize with ID token.
-- (nullable instancetype)initWithIDToken:(OIDIDToken *)idToken;
-
 @end
 
 NS_ASSUME_NONNULL_END

+ 1 - 1
GoogleSignIn/Sources/GIDSignIn.m

@@ -219,7 +219,7 @@ static NSString *const kConfigOpenIDRealmKey = @"GIDOpenIDRealm";
   // Restore current user without refreshing the access token.
   OIDIDToken *idToken =
       [[OIDIDToken alloc] initWithIDTokenString:authState.lastTokenResponse.idToken];
-  GIDProfileData *profileData = [[GIDProfileData alloc] initWithIDToken:idToken];
+  GIDProfileData *profileData = [_profileDataFetcher fetchProfileDataWithIDToken:idToken];
 
   GIDGoogleUser *user = [[GIDGoogleUser alloc] initWithAuthState:authState profileData:profileData];
   self.currentUser = user;