Add NSURLSession support (BITAuthenticator)

This commit is contained in:
Christoph Wendt 2015-09-02 11:25:43 -07:00
parent 8935364018
commit f06cf2a636

View File

@ -331,33 +331,49 @@ static unsigned char kBITPNGEndChunk[4] = {0x49, 0x45, 0x4e, 0x44};
} }
NSString *validationPath = [NSString stringWithFormat:@"api/3/apps/%@/identity/validate", self.encodedAppIdentifier]; NSString *validationPath = [NSString stringWithFormat:@"api/3/apps/%@/identity/validate", self.encodedAppIdentifier];
__weak typeof (self) weakSelf = self;
[self.hockeyAppClient getPath:validationPath id nsurlsessionClass = NSClassFromString(@"NSURLSessionUploadTask");
parameters:[self validationParameters] if (nsurlsessionClass && !bit_isRunningInAppExtension()) {
completion:^(BITHTTPOperation *operation, NSData* responseData, NSError *error) { NSURLRequest *request = [self.hockeyAppClient requestWithMethod:@"GET" path:validationPath parameters:[self validationParameters]];
typeof (self) strongSelf = weakSelf; NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
if(nil == responseData) { NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
NSDictionary *userInfo = @{NSLocalizedDescriptionKey : BITHockeyLocalizedString(@"HockeyAuthenticationFailedAuthenticate")};
if(error) { NSURLSessionDataTask *task = [session dataTaskWithRequest:request
NSMutableDictionary *dict = [userInfo mutableCopy]; completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
dict[NSUnderlyingErrorKey] = error; [self handleValidationResponseWithData:data error:error completion:completion];
userInfo = dict; }];
} [task resume];
NSError *error = [NSError errorWithDomain:kBITAuthenticatorErrorDomain }else{
code:BITAuthenticatorNetworkError [self.hockeyAppClient getPath:validationPath
userInfo:userInfo]; parameters:[self validationParameters]
strongSelf.validated = NO; completion:^(BITHTTPOperation *operation, NSData* responseData, NSError *error) {
if(completion) completion(NO, error); [self handleValidationResponseWithData:responseData error:error completion:completion];
} else { }];
NSError *validationParseError = nil; }
BOOL valid = [strongSelf.class isValidationResponseValid:responseData error:&validationParseError]; }
strongSelf.validated = valid;
if(valid) { - (void)handleValidationResponseWithData:(NSData *) responseData error:(NSError *)error completion:(void (^)(BOOL validated, NSError *))completion {
[self setLastAuthenticatedVersion:self.executableUUID]; if(nil == responseData) {
} NSDictionary *userInfo = @{NSLocalizedDescriptionKey : BITHockeyLocalizedString(@"HockeyAuthenticationFailedAuthenticate")};
if(completion) completion(valid, validationParseError); if(error) {
} NSMutableDictionary *dict = [userInfo mutableCopy];
}]; dict[NSUnderlyingErrorKey] = error;
userInfo = dict;
}
NSError *error = [NSError errorWithDomain:kBITAuthenticatorErrorDomain
code:BITAuthenticatorNetworkError
userInfo:userInfo];
self.validated = NO;
if(completion) completion(NO, error);
} else {
NSError *validationParseError = nil;
BOOL valid = [self.class isValidationResponseValid:responseData error:&validationParseError];
self.validated = valid;
if(valid) {
[self setLastAuthenticatedVersion:self.executableUUID];
}
if(completion) completion(valid, validationParseError);
}
} }
- (NSDictionary*) validationParameters { - (NSDictionary*) validationParameters {