diff --git a/GoogleSignIn/Sources/GIDEMMSupport.m b/GoogleSignIn/Sources/GIDEMMSupport.m index 0e7b0369..5f7606ff 100644 --- a/GoogleSignIn/Sources/GIDEMMSupport.m +++ b/GoogleSignIn/Sources/GIDEMMSupport.m @@ -116,8 +116,58 @@ + (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters - (nullable NSDictionary *) additionalTokenRefreshParametersForAuthSession:(GTMAuthSession *)authSession { - return [GIDEMMSupport updatedEMMParametersWithParameters: - authSession.authState.lastTokenResponse.additionalParameters]; + NSDictionary *originalParameters = + [GIDEMMSupport updatedEMMParametersWithParameters:authSession.authState.lastTokenResponse + .additionalParameters]; + + 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; + } + }]; + + // 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