mirror of
https://github.com/TelegramMessenger/Telegram-iOS.git
synced 2026-07-05 19:28:46 +02:00
Fix base64
This commit is contained in:
parent
75ec477248
commit
adc275af27
2 changed files with 3 additions and 90 deletions
|
|
@ -12,9 +12,6 @@ private enum FetchError {
|
||||||
@available(iOS 10.0, *)
|
@available(iOS 10.0, *)
|
||||||
private func fetchRawData(prefix: String) -> Signal<Data, FetchError> {
|
private func fetchRawData(prefix: String) -> Signal<Data, FetchError> {
|
||||||
return Signal { subscriber in
|
return Signal { subscriber in
|
||||||
#if targetEnvironment(simulator)
|
|
||||||
return EmptyDisposable
|
|
||||||
#else
|
|
||||||
let container = CKContainer.default()
|
let container = CKContainer.default()
|
||||||
let publicDatabase = container.database(with: .public)
|
let publicDatabase = container.database(with: .public)
|
||||||
let recordId = CKRecord.ID(recordName: "emergency-datacenter-\(prefix)")
|
let recordId = CKRecord.ID(recordName: "emergency-datacenter-\(prefix)")
|
||||||
|
|
@ -47,7 +44,6 @@ private func fetchRawData(prefix: String) -> Signal<Data, FetchError> {
|
||||||
|
|
||||||
return ActionDisposable {
|
return ActionDisposable {
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,6 @@ static NSData *base64_decode(NSString *str) {
|
||||||
+ (MTSignal *)fetchBackupIpsResolveGoogle:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride {
|
+ (MTSignal *)fetchBackupIpsResolveGoogle:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride {
|
||||||
NSArray *hosts = @[
|
NSArray *hosts = @[
|
||||||
@[@"dns.google.com", @""],
|
@[@"dns.google.com", @""],
|
||||||
@[@"www.google.com", @"dns.google.com"],
|
|
||||||
];
|
];
|
||||||
|
|
||||||
id<EncryptionProvider> encryptionProvider = currentContext.encryptionProvider;
|
id<EncryptionProvider> encryptionProvider = currentContext.encryptionProvider;
|
||||||
|
|
@ -153,6 +152,9 @@ static NSData *base64_decode(NSString *str) {
|
||||||
for (NSString *string in strings) {
|
for (NSString *string in strings) {
|
||||||
finalString = [finalString stringByAppendingString:[string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"="]]];
|
finalString = [finalString stringByAppendingString:[string stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"="]]];
|
||||||
}
|
}
|
||||||
|
while (finalString.length % 4 != 0) {
|
||||||
|
finalString = [finalString stringByAppendingString:@"="];
|
||||||
|
}
|
||||||
|
|
||||||
NSData *result = base64_decode(finalString);
|
NSData *result = base64_decode(finalString);
|
||||||
NSMutableData *finalData = [[NSMutableData alloc] initWithData:result];
|
NSMutableData *finalData = [[NSMutableData alloc] initWithData:result];
|
||||||
|
|
@ -193,90 +195,6 @@ static NSString *makeRandomPadding() {
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (MTSignal *)fetchBackupIpsResolveCloudflare:(bool)isTesting phoneNumber:(NSString *)phoneNumber currentContext:(MTContext *)currentContext addressOverride:(NSString *)addressOverride {
|
|
||||||
id<EncryptionProvider> 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() {
|
MTAtomic *sharedFetchConfigKeychains() {
|
||||||
static MTAtomic *value = nil;
|
static MTAtomic *value = nil;
|
||||||
static dispatch_once_t onceToken;
|
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 {
|
+ (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];
|
NSMutableArray *signals = [[NSMutableArray alloc] init];
|
||||||
[signals addObject:[self fetchBackupIpsResolveGoogle:isTestingEnvironment phoneNumber:phoneNumber currentContext:currentContext addressOverride:currentContext.apiEnvironment.accessHostOverride]];
|
[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) {
|
if (additionalSource != nil) {
|
||||||
[signals addObject:[additionalSource mapToSignal:^MTSignal *(MTBackupDatacenterData *datacenterData) {
|
[signals addObject:[additionalSource mapToSignal:^MTSignal *(MTBackupDatacenterData *datacenterData) {
|
||||||
if (![datacenterData isKindOfClass:[MTBackupDatacenterData class]]) {
|
if (![datacenterData isKindOfClass:[MTBackupDatacenterData class]]) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue