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

Commit

Permalink
Merge pull request #15 from KiranPanesar/master
Browse files Browse the repository at this point in the history
Fixed Google Attestation for login
  • Loading branch information
NSExceptional committed Sep 12, 2015
2 parents faf9fcf + f5b874c commit 10996c2
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 6 deletions.
2 changes: 2 additions & 0 deletions Pod/Classes/Categories/NSString+SnapchatKit.h
Expand Up @@ -32,6 +32,8 @@
+ (NSString *)timestamp;
+ (NSString *)timestampFrom:(NSDate *)date;
+ (NSString *)queryStringWithParams:(NSDictionary *)params;
+ (NSString *)queryStringWithParams:(NSDictionary *)params URLEscapeValues:(BOOL)escapeValues;

@end


Expand Down
33 changes: 31 additions & 2 deletions Pod/Classes/Categories/NSString+SnapchatKit.m
Expand Up @@ -109,12 +109,21 @@ + (NSString *)timestampFrom:(NSDate *)date {
}

+ (NSString *)queryStringWithParams:(NSDictionary *)params {
return [NSString queryStringWithParams:params URLEscapeValues:NO];
}

+ (NSString *)queryStringWithParams:(NSDictionary *)params URLEscapeValues:(BOOL)escapeValues {
if (params.allKeys.count == 0) return @"";

NSMutableString *q = [NSMutableString string];
[params enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) {
if ([value isKindOfClass:[NSString class]])
value = [(NSString *)value stringByReplacingOccurrencesOfString:@" " withString:@"+"];
if ([value isKindOfClass:[NSString class]]) {
if (escapeValues) {
value = [(NSString *)value urlencode];
} else {
value = [(NSString *)value stringByReplacingOccurrencesOfString:@" " withString:@"+"];
}
}
[q appendFormat:@"%@=%@&", key, value];
}];

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

- (NSString *)urlencode {
NSMutableString *output = [NSMutableString string];
const unsigned char *source = (const unsigned char *)[self UTF8String];
int sourceLen = (int)strlen((const char *)source);
for (int i = 0; i < sourceLen; ++i) {
const unsigned char thisChar = source[i];
if (thisChar == ' '){
[output appendString:@"+"];
} else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
(thisChar >= 'a' && thisChar <= 'z') ||
(thisChar >= 'A' && thisChar <= 'Z') ||
(thisChar >= '0' && thisChar <= '9')) {
[output appendFormat:@"%c", thisChar];
} else {
[output appendFormat:@"%%%02X", thisChar];
}
}
return output;
}

@end


Expand Down
10 changes: 6 additions & 4 deletions Pod/Classes/Networking/SKClient.m
Expand Up @@ -339,11 +339,11 @@ - (void)getAttestation:(NSString *)username password:(NSString *)password ts:(NS
@"apk_digest": SKAttestation.digest9_14_2};

request.URL = [NSURL URLWithString:SKAttestation.protobufPOSTURL];
request.HTTPBody = [[NSString queryStringWithParams:query] dataUsingEncoding:NSUTF8StringEncoding];
request.HTTPBody = [[NSString queryStringWithParamsForAttestion:query] dataUsingEncoding:NSUTF8StringEncoding];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];

[[session dataTaskWithRequest:request completionHandler:^(NSData *data2, NSURLResponse *response2, NSError *error2) {
/////////////////////////////////
// This is where I get the 400 //
/////////////////////////////////

if (!error2 && [(NSHTTPURLResponse *)response2 statusCode] == 200) {
jsonError = nil;
json = [NSJSONSerialization JSONObjectWithData:data2 options:0 error:&jsonError];
Expand All @@ -355,6 +355,8 @@ - (void)getAttestation:(NSString *)username password:(NSString *)password ts:(NS
request.URL = [NSURL URLWithString:SKAttestation.attestationURL];
request.HTTPBody = [json[@"binary"] base64DecodedData];
[request setValue:SKAttestation.userAgent forHTTPHeaderField:SKHeaders.userAgent];
[request setValue:SKHeaders.values.protobuf forHTTPHeaderField:SKHeaders.contentType];

[[session dataTaskWithRequest:request completionHandler:^(NSData *data3, NSURLResponse *response3, NSError *error3) {
if (!error3 && [(NSHTTPURLResponse *)response3 statusCode] == 200) {
jsonError = nil;
Expand Down

0 comments on commit 10996c2

Please sign in to comment.