Skip to content
This repository was archived by the owner on Dec 18, 2022. It is now read-only.

Commit 10996c2

Browse files
committed
Merge pull request #15 from KiranPanesar/master
Fixed Google Attestation for login
2 parents faf9fcf + f5b874c commit 10996c2

File tree

3 files changed

+39
-6
lines changed

3 files changed

+39
-6
lines changed

Pod/Classes/Categories/NSString+SnapchatKit.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
+ (NSString *)timestamp;
3333
+ (NSString *)timestampFrom:(NSDate *)date;
3434
+ (NSString *)queryStringWithParams:(NSDictionary *)params;
35+
+ (NSString *)queryStringWithParams:(NSDictionary *)params URLEscapeValues:(BOOL)escapeValues;
36+
3537
@end
3638

3739

Pod/Classes/Categories/NSString+SnapchatKit.m

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,21 @@ + (NSString *)timestampFrom:(NSDate *)date {
109109
}
110110

111111
+ (NSString *)queryStringWithParams:(NSDictionary *)params {
112+
return [NSString queryStringWithParams:params URLEscapeValues:NO];
113+
}
114+
115+
+ (NSString *)queryStringWithParams:(NSDictionary *)params URLEscapeValues:(BOOL)escapeValues {
112116
if (params.allKeys.count == 0) return @"";
113117

114118
NSMutableString *q = [NSMutableString string];
115119
[params enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
116-
if ([value isKindOfClass:[NSString class]])
117-
value = [(NSString *)value stringByReplacingOccurrencesOfString:@" " withString:@"+"];
120+
if ([value isKindOfClass:[NSString class]]) {
121+
if (escapeValues) {
122+
value = [(NSString *)value urlencode];
123+
} else {
124+
value = [(NSString *)value stringByReplacingOccurrencesOfString:@" " withString:@"+"];
125+
}
126+
}
118127
[q appendFormat:@"%@=%@&", key, value];
119128
}];
120129

@@ -123,6 +132,26 @@ + (NSString *)queryStringWithParams:(NSDictionary *)params {
123132
return q;
124133
}
125134

135+
- (NSString *)urlencode {
136+
NSMutableString *output = [NSMutableString string];
137+
const unsigned char *source = (const unsigned char *)[self UTF8String];
138+
int sourceLen = (int)strlen((const char *)source);
139+
for (int i = 0; i < sourceLen; ++i) {
140+
const unsigned char thisChar = source[i];
141+
if (thisChar == ' '){
142+
[output appendString:@"+"];
143+
} else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
144+
(thisChar >= 'a' && thisChar <= 'z') ||
145+
(thisChar >= 'A' && thisChar <= 'Z') ||
146+
(thisChar >= '0' && thisChar <= '9')) {
147+
[output appendFormat:@"%c", thisChar];
148+
} else {
149+
[output appendFormat:@"%%%02X", thisChar];
150+
}
151+
}
152+
return output;
153+
}
154+
126155
@end
127156

128157

Pod/Classes/Networking/SKClient.m

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,11 @@ - (void)getAttestation:(NSString *)username password:(NSString *)password ts:(NS
339339
@"apk_digest": SKAttestation.digest9_14_2};
340340

341341
request.URL = [NSURL URLWithString:SKAttestation.protobufPOSTURL];
342-
request.HTTPBody = [[NSString queryStringWithParams:query] dataUsingEncoding:NSUTF8StringEncoding];
342+
request.HTTPBody = [[NSString queryStringWithParamsForAttestion:query] dataUsingEncoding:NSUTF8StringEncoding];
343+
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
344+
343345
[[session dataTaskWithRequest:request completionHandler:^(NSData *data2, NSURLResponse *response2, NSError *error2) {
344-
/////////////////////////////////
345-
// This is where I get the 400 //
346-
/////////////////////////////////
346+
347347
if (!error2 && [(NSHTTPURLResponse *)response2 statusCode] == 200) {
348348
jsonError = nil;
349349
json = [NSJSONSerialization JSONObjectWithData:data2 options:0 error:&jsonError];
@@ -355,6 +355,8 @@ - (void)getAttestation:(NSString *)username password:(NSString *)password ts:(NS
355355
request.URL = [NSURL URLWithString:SKAttestation.attestationURL];
356356
request.HTTPBody = [json[@"binary"] base64DecodedData];
357357
[request setValue:SKAttestation.userAgent forHTTPHeaderField:SKHeaders.userAgent];
358+
[request setValue:SKHeaders.values.protobuf forHTTPHeaderField:SKHeaders.contentType];
359+
358360
[[session dataTaskWithRequest:request completionHandler:^(NSData *data3, NSURLResponse *response3, NSError *error3) {
359361
if (!error3 && [(NSHTTPURLResponse *)response3 statusCode] == 200) {
360362
jsonError = nil;

0 commit comments

Comments
 (0)