Forráskód Böngészése

Update conversion logic to consider other types.

brianna 6 hónapja
szülő
commit
fd72fb793d
1 módosított fájl, 46 hozzáadás és 9 törlés
  1. 46 9
      GoogleSignIn/Sources/GIDEMMSupport.m

+ 46 - 9
GoogleSignIn/Sources/GIDEMMSupport.m

@@ -120,17 +120,54 @@ additionalTokenRefreshParametersForAuthSession:(GTMAuthSession *)authSession {
       [GIDEMMSupport updatedEMMParametersWithParameters:authSession.authState.lastTokenResponse
                                                             .additionalParameters];
 
-  // Ensure returned dictionary has values of only type String.
-  NSMutableDictionary<NSString *, NSString *> *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<NSString *> *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<NSString *, NSString *> *stringOnlyParameters = [@{} mutableCopy];
+  for (NSString *kvPair in keyAndValueArray) {
+    NSArray<NSString *> *keyAndValue = [kvPair componentsSeparatedByString:@":"];
+    NSString *key = [keyAndValue[0] stringByTrimmingCharactersInSet:keySet];
+    NSString *value = [keyAndValue[1] stringByTrimmingCharactersInSet:valueSet];
+    stringOnlyParameters[key] = value;
+  }
+
+  return stringOnlyParameters;
 }
 
 - (void)updateErrorForAuthSession:(GTMAuthSession *)authSession