diff --git a/submodules/CloudData/Sources/CloudData.swift b/submodules/CloudData/Sources/CloudData.swift index 12bb67f42b..94b898dcbe 100644 --- a/submodules/CloudData/Sources/CloudData.swift +++ b/submodules/CloudData/Sources/CloudData.swift @@ -12,9 +12,6 @@ private enum FetchError { @available(iOS 10.0, *) private func fetchRawData(prefix: String) -> Signal { return Signal { subscriber in - #if targetEnvironment(simulator) - return EmptyDisposable - #else let container = CKContainer.default() let publicDatabase = container.database(with: .public) let recordId = CKRecord.ID(recordName: "emergency-datacenter-\(prefix)") @@ -47,7 +44,6 @@ private func fetchRawData(prefix: String) -> Signal { return ActionDisposable { } - #endif } } diff --git a/submodules/MtProtoKit/Sources/MTBackupAddressSignals.m b/submodules/MtProtoKit/Sources/MTBackupAddressSignals.m index 68e2f921ed..cbafb7b87c 100644 --- a/submodules/MtProtoKit/Sources/MTBackupAddressSignals.m +++ b/submodules/MtProtoKit/Sources/MTBackupAddressSignals.m @@ -95,7 +95,6 @@ static NSData *base64_decode(NSString *str) { + (MTSignal *)fetchBackupIpsResolveGoogle:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride { NSArray *hosts = @[ @[@"dns.google.com", @""], - @[@"www.google.com", @"dns.google.com"], ]; id encryptionProvider = currentContext.encryptionProvider; @@ -153,6 +152,9 @@ static NSData *base64_decode(NSString *str) { for (NSString *string in strings) { finalString = [finalString stringByAppendingString:[string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"="]]]; } + while (finalString.length % 4 != 0) { + finalString = [finalString stringByAppendingString:@"="]; + } NSData *result = base64_decode(finalString); NSMutableData *finalData = [[NSMutableData alloc] initWithData:result]; @@ -193,90 +195,6 @@ static NSString *makeRandomPadding() { return string; } -+ (MTSignal *)fetchBackupIpsResolveCloudflare:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride { - id encryptionProvider = currentContext.encryptionProvider; - - NSArray *hosts = @[ - @[@"mozilla.cloudflare-dns.com", @""], - ]; - - NSMutableArray *signals = [[NSMutableArray alloc] init]; - for (NSArray *hostAndHostname in hosts) { - NSString *host = hostAndHostname[0]; - NSString *hostName = hostAndHostname[1]; - NSMutableDictionary *headers = [[NSMutableDictionary alloc] init]; - headers[@"accept"] = @"application/dns-json"; - if ([hostName length] != 0) { - headers[@"Host"] = hostName; - } - NSString *apvHost = @"apv3.stel.com"; - if (addressOverride != nil) { - apvHost = addressOverride; - } - MTSignal *signal = [[[MTHttpRequestOperation dataForHttpUrl:[NSURL URLWithString:[NSString stringWithFormat:@"https://%@/dns-query?name=%@&type=16&random_padding=%@", host, isTesting ? @"tapv3.stel.com" : apvHost, makeRandomPadding()]] headers:headers] mapToSignal:^MTSignal *(MTHttpResponse *response) { - NSString *dateHeader = response.headers[@"Date"]; - if ([dateHeader isKindOfClass:[NSString class]]) { - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; - [formatter setLocale:usLocale]; - [formatter setDateFormat:@"EEE',' dd' 'MMM' 'yyyy HH':'mm':'ss zzz"]; - NSDate *date = [formatter dateFromString:dateHeader]; - if (date != nil) { - double difference = [date timeIntervalSince1970] - [[NSDate date] timeIntervalSince1970]; - [MTContext setFixedTimeDifference:(int32_t)difference]; - } - } - - NSData *data = response.data; - - NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; - if ([dict respondsToSelector:@selector(objectForKey:)]) { - NSArray *answer = dict[@"Answer"]; - NSMutableArray *strings = [[NSMutableArray alloc] init]; - if ([answer respondsToSelector:@selector(objectAtIndex:)]) { - for (NSDictionary *value in answer) { - if ([value respondsToSelector:@selector(objectForKey:)]) { - NSString *part = value[@"data"]; - if ([part respondsToSelector:@selector(characterAtIndex:)]) { - [strings addObject:part]; - } - } - } - [strings sortUsingComparator:^NSComparisonResult(NSString *lhs, NSString *rhs) { - if (lhs.length > rhs.length) { - return NSOrderedAscending; - } else { - return NSOrderedDescending; - } - }]; - - NSString *finalString = @""; - for (NSString *string in strings) { - finalString = [finalString stringByAppendingString:[string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"="]]]; - } - - NSData *result = base64_decode(finalString); - NSMutableData *finalData = [[NSMutableData alloc] initWithData:result]; - [finalData setLength:256]; - MTBackupDatacenterData *datacenterData = MTIPDataDecode(encryptionProvider, finalData, phoneNumber); - if (datacenterData != nil && [self checkIpData:datacenterData timestamp:(int32_t)[currentContext globalTime] source:@"resolveCloudflare"]) { - return [MTSignal single:datacenterData]; - } - } - } - return [MTSignal complete]; - }] catch:^MTSignal *(__unused id error) { - return [MTSignal complete]; - }]; - if (signals.count != 0) { - signal = [signal delay:signals.count onQueue:[[MTQueue alloc] init]]; - } - [signals addObject:signal]; - } - - return [[MTSignal mergeSignals:signals] take:1]; -} - MTAtomic *sharedFetchConfigKeychains() { static MTAtomic *value = nil; static dispatch_once_t onceToken; @@ -377,7 +295,6 @@ MTAtomic *sharedFetchConfigKeychains() { + (MTSignal * _Nonnull)fetchBackupIps:(bool)isTestingEnvironment currentContext:(MTContext * _Nonnull)currentContext additionalSource:(MTSignal * _Nullable)additionalSource phoneNumber:(NSString * _Nullable)phoneNumber mainDatacenterId:(NSInteger)mainDatacenterId { NSMutableArray *signals = [[NSMutableArray alloc] init]; [signals addObject:[self fetchBackupIpsResolveGoogle:isTestingEnvironment phoneNumber:phoneNumber currentContext:currentContext addressOverride:currentContext.apiEnvironment.accessHostOverride]]; - [signals addObject:[self fetchBackupIpsResolveCloudflare:isTestingEnvironment phoneNumber:phoneNumber currentContext:currentContext addressOverride:currentContext.apiEnvironment.accessHostOverride]]; if (additionalSource != nil) { [signals addObject:[additionalSource mapToSignal:^MTSignal *(MTBackupDatacenterData *datacenterData) { if (![datacenterData isKindOfClass:[MTBackupDatacenterData class]]) {