From 88640726a9ce1a3f1da6bb2ea9de35627c3ff924 Mon Sep 17 00:00:00 2001 From: brianna Date: Wed, 1 Oct 2025 13:25:26 -0700 Subject: [PATCH 1/2] Ensure additionalTokenRefreshParametersForAuthSession returns a dictionary of type . --- GoogleSignIn/Sources/GIDEMMSupport.m | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/GoogleSignIn/Sources/GIDEMMSupport.m b/GoogleSignIn/Sources/GIDEMMSupport.m index 0e7b0369..eee73c89 100644 --- a/GoogleSignIn/Sources/GIDEMMSupport.m +++ b/GoogleSignIn/Sources/GIDEMMSupport.m @@ -116,8 +116,21 @@ + (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters - (nullable NSDictionary *) additionalTokenRefreshParametersForAuthSession:(GTMAuthSession *)authSession { - return [GIDEMMSupport updatedEMMParametersWithParameters: - authSession.authState.lastTokenResponse.additionalParameters]; + NSDictionary *originalParameters = + [GIDEMMSupport updatedEMMParametersWithParameters:authSession.authState.lastTokenResponse + .additionalParameters]; + + // Ensure returned dictionary has values of only type String. + NSMutableDictionary *convertedParameters = + [NSMutableDictionary dictionary]; + [originalParameters enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { + if ([value isKindOfClass:[NSNumber class]]) { + convertedParameters[key] = [value stringValue]; + } else if ([value isKindOfClass:[NSString class]]) { + convertedParameters[key] = value; + } + }]; + return convertedParameters; } - (void)updateErrorForAuthSession:(GTMAuthSession *)authSession From fd72fb793d2e86462785ecdbe6ae816d69c0b729 Mon Sep 17 00:00:00 2001 From: brianna Date: Fri, 3 Oct 2025 05:51:19 -0700 Subject: [PATCH 2/2] Update conversion logic to consider other types. --- GoogleSignIn/Sources/GIDEMMSupport.m | 55 +++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/GoogleSignIn/Sources/GIDEMMSupport.m b/GoogleSignIn/Sources/GIDEMMSupport.m index eee73c89..5f7606ff 100644 --- a/GoogleSignIn/Sources/GIDEMMSupport.m +++ b/GoogleSignIn/Sources/GIDEMMSupport.m @@ -120,17 +120,54 @@ + (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters [GIDEMMSupport updatedEMMParametersWithParameters:authSession.authState.lastTokenResponse .additionalParameters]; - // Ensure returned dictionary has values of only type String. - NSMutableDictionary *convertedParameters = - [NSMutableDictionary dictionary]; - [originalParameters enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - if ([value isKindOfClass:[NSNumber class]]) { - convertedParameters[key] = [value stringValue]; - } else if ([value isKindOfClass:[NSString class]]) { - convertedParameters[key] = value; + NSMutableDictionary *updatedParameters = [NSMutableDictionary dictionary]; + // Will first make any json objects within our original parameters into a string. + [updatedParameters enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { + if ([NSJSONSerialization isValidJSONObject:value]) { + NSError *error; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:value + options:0 + error:&error]; + if (!error && jsonData) { + updatedParameters[key] = [[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding]; + } + } + else { + updatedParameters[key] = value; } }]; - return convertedParameters; + + // Start converting our original parameters to [String:String] + NSError *error; + NSData *additionalParametersData = [NSJSONSerialization dataWithJSONObject:updatedParameters + options:NSJSONWritingPrettyPrinted + error:nil]; + NSString *additionalParametersString = [[NSString alloc] initWithData:additionalParametersData + encoding:NSUTF8StringEncoding]; + + NSCharacterSet *newline = [NSCharacterSet newlineCharacterSet]; + NSMutableArray *keyAndValueArray = + [[additionalParametersString componentsSeparatedByCharactersInSet:newline] mutableCopy]; + + // Remove braces + [keyAndValueArray removeObjectAtIndex:0]; + [keyAndValueArray removeLastObject]; + + // Set up what characters should be removed in loop + NSMutableCharacterSet *keySet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy]; + [keySet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]]; + NSCharacterSet *valueSet = [NSCharacterSet punctuationCharacterSet]; + + NSMutableDictionary *stringOnlyParameters = [@{} mutableCopy]; + for (NSString *kvPair in keyAndValueArray) { + NSArray *keyAndValue = [kvPair componentsSeparatedByString:@":"]; + NSString *key = [keyAndValue[0] stringByTrimmingCharactersInSet:keySet]; + NSString *value = [keyAndValue[1] stringByTrimmingCharactersInSet:valueSet]; + stringOnlyParameters[key] = value; + } + + return stringOnlyParameters; } - (void)updateErrorForAuthSession:(GTMAuthSession *)authSession