From 7726c68047d9f3114c9fff6a72a6a291a51dd30c Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Wed, 21 Jun 2017 16:18:56 -0400 Subject: [PATCH 1/2] Persist registration values in the keychain for debug builds only. // FREEBIE --- .../RegistrationViewController.h | 6 +- .../RegistrationViewController.m | 95 ++++++++++++++++++- 2 files changed, 96 insertions(+), 5 deletions(-) diff --git a/Signal/src/ViewControllers/RegistrationViewController.h b/Signal/src/ViewControllers/RegistrationViewController.h index 08f02f444..2c6bf9fdb 100644 --- a/Signal/src/ViewControllers/RegistrationViewController.h +++ b/Signal/src/ViewControllers/RegistrationViewController.h @@ -4,6 +4,10 @@ #import -@interface RegistrationViewController : UIViewController +NS_ASSUME_NONNULL_BEGIN + +@interface RegistrationViewController : UIViewController @end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/RegistrationViewController.m b/Signal/src/ViewControllers/RegistrationViewController.m index 3e175387d..902bf309b 100644 --- a/Signal/src/ViewControllers/RegistrationViewController.m +++ b/Signal/src/ViewControllers/RegistrationViewController.m @@ -12,9 +12,21 @@ #import "TSAccountManager.h" #import "UIView+OWS.h" #import "ViewControllerUtils.h" +#import -@interface RegistrationViewController () +NS_ASSUME_NONNULL_BEGIN +#ifdef DEBUG + +NSString *const kKeychainServiceDebug = @"kKeychainServiceDebug"; +NSString *const kKeychainLastRegisteredCountryCode = @"kKeychainLastRegisteredCountryCode"; +NSString *const kKeychainLastRegisteredPhoneNumber = @"kKeychainLastRegisteredPhoneNumber"; + +#endif + +@interface RegistrationViewController () + +@property (nonatomic) NSString *countryCode; @property (nonatomic) NSString *callingCode; @property (nonatomic) UILabel *countryCodeLabel; @@ -194,7 +206,7 @@ ofView:separatorView2 withOffset:ScaleFromIPhone5To7Plus(12.f, 15.f)]; [activateButton autoSetDimension:ALDimensionHeight toSize:47.f]; - [activateButton addTarget:self action:@selector(sendCodeAction:) forControlEvents:UIControlEventTouchUpInside]; + [activateButton addTarget:self action:@selector(sendCodeAction) forControlEvents:UIControlEventTouchUpInside]; UIActivityIndicatorView *spinnerView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; @@ -237,6 +249,14 @@ - (void)populateDefaultCountryNameAndCode { NSLocale *locale = NSLocale.currentLocale; NSString *countryCode = [locale objectForKey:NSLocaleCountryCode]; + +#ifdef DEBUG + if ([self lastRegisteredCountryCode].length > 0) { + countryCode = [self lastRegisteredCountryCode]; + } + self.phoneNumberTextField.text = [self lastRegisteredPhoneNumber]; +#endif + NSNumber *callingCode = [[PhoneNumberUtil sharedUtil].nbPhoneNumberUtil getCountryCodeForRegion:countryCode]; NSString *countryName = [PhoneNumberUtil countryNameFromCountryCode:countryCode]; [self updateCountryWithName:countryName @@ -249,7 +269,12 @@ - (void)updateCountryWithName:(NSString *)countryName callingCode:(NSString *)callingCode countryCode:(NSString *)countryCode { + OWSAssert([NSThread isMainThread]); + OWSAssert(countryName.length > 0); + OWSAssert(callingCode.length > 0); + OWSAssert(countryCode.length > 0); + _countryCode = countryCode; _callingCode = callingCode; NSString *title = [NSString stringWithFormat:@"%@ (%@)", @@ -277,7 +302,7 @@ message:NSLocalizedString(@"EXISTING_USER_REGISTRATION_ALERT_BODY", @"during registration")]; } -- (void)sendCodeAction:(id)sender +- (void)sendCodeAction { NSString *phoneNumberText = [_phoneNumberTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; @@ -290,6 +315,7 @@ @"Message of alert indicating that users needs to enter a phone number to register.")]; return; } + NSString *countryCode = self.countryCode; NSString *phoneNumber = [NSString stringWithFormat:@"%@%@", _callingCode, phoneNumberText]; PhoneNumber *localNumber = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:phoneNumber]; NSString *parsedPhoneNumber = localNumber.toE164; @@ -314,6 +340,11 @@ CodeVerificationViewController *vc = [CodeVerificationViewController new]; [weakSelf.navigationController pushViewController:vc animated:YES]; + +#ifdef DEBUG + [weakSelf setLastRegisteredCountryCode:countryCode]; + [weakSelf setLastRegisteredPhoneNumber:phoneNumberText]; +#endif } failure:^(NSError *error) { if (error.code == 400) { @@ -396,9 +427,65 @@ } - (BOOL)textFieldShouldReturn:(UITextField *)textField { - [self sendCodeAction:nil]; + [self sendCodeAction]; [textField resignFirstResponder]; return NO; } +#pragma mark - Debug + +#ifdef DEBUG + +- (NSString *_Nullable)debugKeychainValueForKey:(NSString *)key +{ + OWSCAssert([NSThread isMainThread]); + OWSCAssert(key.length > 0); + + NSError *error; + NSString *value = [SAMKeychain passwordForService:kKeychainServiceDebug account:key error:&error]; + if (error) { + // Ignore errors; these values may not be present. + return nil; + } else { + return value; + } +} + +- (void)setDebugKeychainValue:(NSString *)value forKey:(NSString *)key +{ + OWSCAssert([NSThread isMainThread]); + OWSCAssert(key.length > 0); + OWSCAssert(value.length > 0); + + NSError *error; + [SAMKeychain setPassword:value forService:kKeychainServiceDebug account:key error:&error]; + if (error) { + OWSCFail(@"SetLastRegisteredPhoneNumber error: %@", error); + } +} + +- (NSString *_Nullable)lastRegisteredCountryCode +{ + return [self debugKeychainValueForKey:kKeychainLastRegisteredCountryCode]; +} + +- (void)setLastRegisteredCountryCode:(NSString *)value +{ + [self setDebugKeychainValue:value forKey:kKeychainLastRegisteredCountryCode]; +} + +- (NSString *_Nullable)lastRegisteredPhoneNumber +{ + return [self debugKeychainValueForKey:kKeychainLastRegisteredPhoneNumber]; +} + +- (void)setLastRegisteredPhoneNumber:(NSString *)value +{ + [self setDebugKeychainValue:value forKey:kKeychainLastRegisteredPhoneNumber]; +} + +#endif + @end + +NS_ASSUME_NONNULL_END From 15ecb0347149c80b30c05912c5b742c04831c2ab Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 22 Jun 2017 09:37:30 -0400 Subject: [PATCH 2/2] Respond to CR. // FREEBIE --- .../RegistrationViewController.m | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/Signal/src/ViewControllers/RegistrationViewController.m b/Signal/src/ViewControllers/RegistrationViewController.m index 902bf309b..bdfbfe419 100644 --- a/Signal/src/ViewControllers/RegistrationViewController.m +++ b/Signal/src/ViewControllers/RegistrationViewController.m @@ -18,9 +18,8 @@ NS_ASSUME_NONNULL_BEGIN #ifdef DEBUG -NSString *const kKeychainServiceDebug = @"kKeychainServiceDebug"; -NSString *const kKeychainLastRegisteredCountryCode = @"kKeychainLastRegisteredCountryCode"; -NSString *const kKeychainLastRegisteredPhoneNumber = @"kKeychainLastRegisteredPhoneNumber"; +NSString *const kNSUserDefaultsKey_LastRegisteredCountryCode = @"kNSUserDefaultsKey_LastRegisteredCountryCode"; +NSString *const kNSUserDefaultsKey_LastRegisteredPhoneNumber = @"kNSUserDefaultsKey_LastRegisteredPhoneNumber"; #endif @@ -436,52 +435,41 @@ NSString *const kKeychainLastRegisteredPhoneNumber = @"kKeychainLastRegisteredPh #ifdef DEBUG -- (NSString *_Nullable)debugKeychainValueForKey:(NSString *)key +- (NSString *_Nullable)debugValueForKey:(NSString *)key { OWSCAssert([NSThread isMainThread]); OWSCAssert(key.length > 0); - NSError *error; - NSString *value = [SAMKeychain passwordForService:kKeychainServiceDebug account:key error:&error]; - if (error) { - // Ignore errors; these values may not be present. - return nil; - } else { - return value; - } + return [[NSUserDefaults standardUserDefaults] stringForKey:key]; } -- (void)setDebugKeychainValue:(NSString *)value forKey:(NSString *)key +- (void)setDebugValue:(NSString *)value forKey:(NSString *)key { OWSCAssert([NSThread isMainThread]); OWSCAssert(key.length > 0); OWSCAssert(value.length > 0); - NSError *error; - [SAMKeychain setPassword:value forService:kKeychainServiceDebug account:key error:&error]; - if (error) { - OWSCFail(@"SetLastRegisteredPhoneNumber error: %@", error); - } + [[NSUserDefaults standardUserDefaults] setValue:value forKey:key]; } - (NSString *_Nullable)lastRegisteredCountryCode { - return [self debugKeychainValueForKey:kKeychainLastRegisteredCountryCode]; + return [self debugValueForKey:kNSUserDefaultsKey_LastRegisteredCountryCode]; } - (void)setLastRegisteredCountryCode:(NSString *)value { - [self setDebugKeychainValue:value forKey:kKeychainLastRegisteredCountryCode]; + [self setDebugValue:value forKey:kNSUserDefaultsKey_LastRegisteredCountryCode]; } - (NSString *_Nullable)lastRegisteredPhoneNumber { - return [self debugKeychainValueForKey:kKeychainLastRegisteredPhoneNumber]; + return [self debugValueForKey:kNSUserDefaultsKey_LastRegisteredPhoneNumber]; } - (void)setLastRegisteredPhoneNumber:(NSString *)value { - [self setDebugKeychainValue:value forKey:kKeychainLastRegisteredPhoneNumber]; + [self setDebugValue:value forKey:kNSUserDefaultsKey_LastRegisteredPhoneNumber]; } #endif