From 58edbdfbd93eabcb8df13762c28f169a2599a17e Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 18 May 2017 16:05:10 -0400 Subject: [PATCH] Let users manually specify the domain fronting country. // FREEBIE --- src/Network/OWSCensorshipConfiguration.h | 9 ++-- src/Network/OWSCensorshipConfiguration.m | 12 ++--- src/Network/OWSSignalService.h | 8 +++ src/Network/OWSSignalService.m | 66 ++++++++++++++++++++---- 4 files changed, 74 insertions(+), 21 deletions(-) diff --git a/src/Network/OWSCensorshipConfiguration.h b/src/Network/OWSCensorshipConfiguration.h index b1f363db7..a399a41d2 100644 --- a/src/Network/OWSCensorshipConfiguration.h +++ b/src/Network/OWSCensorshipConfiguration.h @@ -1,5 +1,6 @@ -// Created by Michael Kirk on 12/20/16. -// Copyright © 2016 Open Whisper Systems. All rights reserved. +// +// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// NS_ASSUME_NONNULL_BEGIN @@ -7,9 +8,9 @@ NS_ASSUME_NONNULL_BEGIN @interface OWSCensorshipConfiguration : NSObject -- (NSString *)frontingHost:(NSString *)e164PhonNumber; +- (NSString *)frontingHost:(NSString *)e164PhoneNumber; - (NSString *)reflectorHost; -- (BOOL)isCensoredPhoneNumber:(NSString *)e164PhonNumber; +- (BOOL)isCensoredPhoneNumber:(NSString *)e164PhoneNumber; @end diff --git a/src/Network/OWSCensorshipConfiguration.m b/src/Network/OWSCensorshipConfiguration.m index b58a2467b..ad5431946 100644 --- a/src/Network/OWSCensorshipConfiguration.m +++ b/src/Network/OWSCensorshipConfiguration.m @@ -11,13 +11,13 @@ NSString *const OWSCensorshipConfigurationReflectorHost = @"signal-reflector-mee @implementation OWSCensorshipConfiguration -- (NSString *)frontingHost:(NSString *)e164PhonNumber +- (NSString *)frontingHost:(NSString *)e164PhoneNumber { - OWSAssert(e164PhonNumber.length > 0); - + OWSAssert(e164PhoneNumber.length > 0); + NSString *domain = nil; for (NSString *countryCode in self.censoredCountryCodes) { - if ([e164PhonNumber hasPrefix:countryCode]) { + if ([e164PhoneNumber hasPrefix:countryCode]) { domain = self.censoredCountryCodes[countryCode]; } } @@ -60,10 +60,10 @@ NSString *const OWSCensorshipConfigurationReflectorHost = @"signal-reflector-mee }; } -- (BOOL)isCensoredPhoneNumber:(NSString *)e164PhonNumber +- (BOOL)isCensoredPhoneNumber:(NSString *)e164PhoneNumber { for (NSString *countryCode in self.censoredCountryCodes) { - if ([e164PhonNumber hasPrefix:countryCode]) { + if ([e164PhoneNumber hasPrefix:countryCode]) { return YES; } } diff --git a/src/Network/OWSSignalService.h b/src/Network/OWSSignalService.h index fd0fe9076..ecb570681 100644 --- a/src/Network/OWSSignalService.h +++ b/src/Network/OWSSignalService.h @@ -25,6 +25,14 @@ extern NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidCha - (BOOL)isCensorshipCircumventionManuallyActivated; - (void)setIsCensorshipCircumventionManuallyActivated:(BOOL)value; +#pragma mark - Censorship Circumvention Domain + +- (NSString *)manualCensorshipCircumventionDomain; +- (void)setManualCensorshipCircumventionDomain:(NSString *)value; + +- (NSString *)manualCensorshipCircumventionCountryCode; +- (void)setManualCensorshipCircumventionCountryCode:(NSString *)value; + @end NS_ASSUME_NONNULL_END diff --git a/src/Network/OWSSignalService.m b/src/Network/OWSSignalService.m index 224b76db1..5c41a0128 100644 --- a/src/Network/OWSSignalService.m +++ b/src/Network/OWSSignalService.m @@ -4,16 +4,23 @@ #import -#import "OWSSignalService.h" #import "OWSCensorshipConfiguration.h" #import "OWSHTTPSecurityPolicy.h" -#import "TSConstants.h" +#import "OWSSignalService.h" #import "TSAccountManager.h" +#import "TSConstants.h" +#import "TSStorageManager.h" NS_ASSUME_NONNULL_BEGIN -NSString *const kNSUserDefaults_isCensorshipCircumventionManuallyActivated = - @"kNSUserDefaults_isCensorshipCircumventionManuallyActivated"; +NSString *const kTSStorageManager_OWSSignalService = @"kTSStorageManager_OWSSignalService"; +NSString *const kTSStorageManager_isCensorshipCircumventionManuallyActivated = + @"kTSStorageManager_isCensorshipCircumventionManuallyActivated"; +NSString *const kTSStorageManager_ManualCensorshipCircumventionDomain = + @"kTSStorageManager_ManualCensorshipCircumventionDomain"; +NSString *const kTSStorageManager_ManualCensorshipCircumventionCountryCode = + @"kTSStorageManager_ManualCensorshipCircumventionCountryCode"; + NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = @"kNSNotificationName_IsCensorshipCircumventionActiveDidChange"; @@ -97,19 +104,17 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = - (BOOL)isCensorshipCircumventionManuallyActivated { - OWSAssert([NSThread isMainThread]); - - return [[NSUserDefaults.standardUserDefaults - objectForKey:kNSUserDefaults_isCensorshipCircumventionManuallyActivated] boolValue]; + return [[TSStorageManager sharedManager] boolForKey:kTSStorageManager_isCensorshipCircumventionManuallyActivated + inCollection:kTSStorageManager_OWSSignalService]; } - (void)setIsCensorshipCircumventionManuallyActivated:(BOOL)value { OWSAssert([NSThread isMainThread]); - [NSUserDefaults.standardUserDefaults setObject:@(value) - forKey:kNSUserDefaults_isCensorshipCircumventionManuallyActivated]; - [NSUserDefaults.standardUserDefaults synchronize]; + [[TSStorageManager sharedManager] setObject:@(value) + forKey:kTSStorageManager_isCensorshipCircumventionManuallyActivated + inCollection:kTSStorageManager_OWSSignalService]; [self updateIsCensorshipCircumventionActive]; } @@ -180,6 +185,11 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = OWSAssert(localNumber.length > 0); // Target fronting domain + OWSAssert(self.isCensorshipCircumventionActive); + NSString *frontingHost = [self.censorshipConfiguration frontingHost:localNumber]; + if (self.isCensorshipCircumventionManuallyActivated && self.manualCensorshipCircumventionDomain.length > 0) { + frontingHost = self.manualCensorshipCircumventionDomain; + }; NSURL *baseURL = [[NSURL alloc] initWithString:[self.censorshipConfiguration frontingHost:localNumber]]; NSURLSessionConfiguration *sessionConf = NSURLSessionConfiguration.ephemeralSessionConfiguration; AFHTTPSessionManager *sessionManager = @@ -247,6 +257,40 @@ NSString *const kNSNotificationName_IsCensorshipCircumventionActiveDidChange = }); } +#pragma mark - Manual Censorship Circumvention + +- (NSString *)manualCensorshipCircumventionDomain +{ + return [[TSStorageManager sharedManager] objectForKey:kTSStorageManager_ManualCensorshipCircumventionDomain + inCollection:kTSStorageManager_OWSSignalService]; +} + +- (void)setManualCensorshipCircumventionDomain:(NSString *)value +{ + OWSAssert([NSThread isMainThread]); + + [[TSStorageManager sharedManager] setObject:value + forKey:kTSStorageManager_ManualCensorshipCircumventionDomain + inCollection:kTSStorageManager_OWSSignalService]; +} + +- (NSString *)manualCensorshipCircumventionCountryCode +{ + OWSAssert([NSThread isMainThread]); + + return [[TSStorageManager sharedManager] objectForKey:kTSStorageManager_ManualCensorshipCircumventionCountryCode + inCollection:kTSStorageManager_OWSSignalService]; +} + +- (void)setManualCensorshipCircumventionCountryCode:(NSString *)value +{ + OWSAssert([NSThread isMainThread]); + + [[TSStorageManager sharedManager] setObject:value + forKey:kTSStorageManager_ManualCensorshipCircumventionCountryCode + inCollection:kTSStorageManager_OWSSignalService]; +} + #pragma mark - Logging + (NSString *)tag