Skip to content

Commit fd72fb7

Browse files
committed
Update conversion logic to consider other types.
1 parent 8864072 commit fd72fb7

1 file changed

Lines changed: 46 additions & 9 deletions

File tree

GoogleSignIn/Sources/GIDEMMSupport.m

Lines changed: 46 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,17 +120,54 @@ + (NSDictionary *)parametersWithParameters:(NSDictionary *)parameters
120120
[GIDEMMSupport updatedEMMParametersWithParameters:authSession.authState.lastTokenResponse
121121
.additionalParameters];
122122

123-
// Ensure returned dictionary has values of only type String.
124-
NSMutableDictionary<NSString *, NSString *> *convertedParameters =
125-
[NSMutableDictionary dictionary];
126-
[originalParameters enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
127-
if ([value isKindOfClass:[NSNumber class]]) {
128-
convertedParameters[key] = [value stringValue];
129-
} else if ([value isKindOfClass:[NSString class]]) {
130-
convertedParameters[key] = value;
123+
NSMutableDictionary *updatedParameters = [NSMutableDictionary dictionary];
124+
// Will first make any json objects within our original parameters into a string.
125+
[updatedParameters enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
126+
if ([NSJSONSerialization isValidJSONObject:value]) {
127+
NSError *error;
128+
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:value
129+
options:0
130+
error:&error];
131+
if (!error && jsonData) {
132+
updatedParameters[key] = [[NSString alloc] initWithData:jsonData
133+
encoding:NSUTF8StringEncoding];
134+
}
135+
}
136+
else {
137+
updatedParameters[key] = value;
131138
}
132139
}];
133-
return convertedParameters;
140+
141+
// Start converting our original parameters to [String:String]
142+
NSError *error;
143+
NSData *additionalParametersData = [NSJSONSerialization dataWithJSONObject:updatedParameters
144+
options:NSJSONWritingPrettyPrinted
145+
error:nil];
146+
NSString *additionalParametersString = [[NSString alloc] initWithData:additionalParametersData
147+
encoding:NSUTF8StringEncoding];
148+
149+
NSCharacterSet *newline = [NSCharacterSet newlineCharacterSet];
150+
NSMutableArray<NSString *> *keyAndValueArray =
151+
[[additionalParametersString componentsSeparatedByCharactersInSet:newline] mutableCopy];
152+
153+
// Remove braces
154+
[keyAndValueArray removeObjectAtIndex:0];
155+
[keyAndValueArray removeLastObject];
156+
157+
// Set up what characters should be removed in loop
158+
NSMutableCharacterSet *keySet = [[NSCharacterSet whitespaceCharacterSet] mutableCopy];
159+
[keySet formUnionWithCharacterSet:[NSCharacterSet punctuationCharacterSet]];
160+
NSCharacterSet *valueSet = [NSCharacterSet punctuationCharacterSet];
161+
162+
NSMutableDictionary<NSString *, NSString *> *stringOnlyParameters = [@{} mutableCopy];
163+
for (NSString *kvPair in keyAndValueArray) {
164+
NSArray<NSString *> *keyAndValue = [kvPair componentsSeparatedByString:@":"];
165+
NSString *key = [keyAndValue[0] stringByTrimmingCharactersInSet:keySet];
166+
NSString *value = [keyAndValue[1] stringByTrimmingCharactersInSet:valueSet];
167+
stringOnlyParameters[key] = value;
168+
}
169+
170+
return stringOnlyParameters;
134171
}
135172

136173
- (void)updateErrorForAuthSession:(GTMAuthSession *)authSession

0 commit comments

Comments
 (0)