Handle rate limits in registration flow.

This commit is contained in:
Matthew Chen 2018-03-05 13:05:21 -03:00
parent 3207aedeb6
commit 7543a82858
3 changed files with 32 additions and 27 deletions

View File

@ -302,29 +302,18 @@ NS_ASSUME_NONNULL_BEGIN
- (void)presentAlertWithVerificationError:(NSError *)error
{
UIAlertController *alertController;
// In the case of the "rate limiting" error, we want to show the
// "recovery suggestion", not the error's "description."
if ([error.domain isEqualToString:TSNetworkManagerDomain] &&
error.code == 413) {
alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"REGISTRATION_VERIFICATION_FAILED_TITLE",
@"Alert view title")
message:error.localizedRecoverySuggestion
preferredStyle:UIAlertControllerStyleAlert];
} else {
alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"REGISTRATION_VERIFICATION_FAILED_TITLE",
@"Alert view title")
message:error.localizedDescription
preferredStyle:UIAlertControllerStyleAlert];
}
UIAlertAction *dismissAction = [UIAlertAction actionWithTitle:CommonStrings.dismissButton
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[_challengeTextField becomeFirstResponder];
}];
[alertController addAction:dismissAction];
UIAlertController *alert;
alert = [UIAlertController
alertControllerWithTitle:NSLocalizedString(@"REGISTRATION_VERIFICATION_FAILED_TITLE", @"Alert view title")
message:error.localizedDescription
preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:CommonStrings.dismissButton
style:UIAlertActionStyleDefault
handler:^(UIAlertAction *action) {
[_challengeTextField becomeFirstResponder];
}]];
[self presentViewController:alertController animated:YES completion:nil];
[self presentViewController:alert animated:YES completion:nil];
}
- (NSString *)validationCodeFromTextField {

View File

@ -1444,9 +1444,12 @@
/* Alert view title */
"REGISTRATION_VERIFICATION_FAILED_TITLE" = "Verification Failed";
/* Alert body, during registration */
/* Error message indicating that regitration failed due to a missing or incorrect verification code. */
"REGISTRATION_VERIFICATION_FAILED_WRONG_CODE_DESCRIPTION" = "The numbers you submitted don't match what we sent. Want to double check?";
/* Error message indicating that regitration failed due to a missing or incorrect 2FA PIN. */
"REGISTRATION_VERIFICATION_FAILED_WRONG_PIN" = "Incorrect Registration Lock PIN.";
/* No comment provided by engineer. */
"REGISTRATION_VERIFY_DEVICE" = "Activate This Device";

View File

@ -386,24 +386,37 @@ NSString *const TSAccountManager_ServerSignalingKey = @"TSStorageServerSignaling
if (!IsNSErrorNetworkFailure(error)) {
OWSProdError([OWSAnalyticsEvents accountsErrorVerifyAccountRequestFailed]);
}
OWSAssert([error.domain isEqualToString:TSNetworkManagerDomain]);
DDLogWarn(@"%@ Error verifying code: %@", self.logTag, error.debugDescription);
switch (error.code) {
case 403: {
NSError *userError = OWSErrorWithCodeDescription(OWSErrorCodeUserError,
NSLocalizedString(@"REGISTRATION_VERIFICATION_FAILED_WRONG_CODE_DESCRIPTION",
"Alert body, during registration"));
"Error message indicating that regitration failed due to a missing or incorrect "
"verification code."));
failureBlock(userError);
break;
}
case 413: {
// In the case of the "rate limiting" error, we want to show the
// "recovery suggestion", not the error's "description."
NSError *userError
= OWSErrorWithCodeDescription(OWSErrorCodeUserError, error.localizedRecoverySuggestion);
failureBlock(userError);
break;
}
case 423: {
DDLogError(@"%@ 2FA PIN required: %ld", self.logTag, error.code);
NSError *error = OWSErrorWithCodeDescription(
OWSErrorCodeRegistrationMissing2FAPIN, @"Registration missing 2FA PIN.");
NSError *error = OWSErrorWithCodeDescription(OWSErrorCodeRegistrationMissing2FAPIN,
NSLocalizedString(@"REGISTRATION_VERIFICATION_FAILED_WRONG_PIN",
"Error message indicating that regitration failed due to a missing or incorrect 2FA PIN."));
failureBlock(error);
break;
}
default: {
DDLogError(@"%@ verifying code failed with unhandled error: %@", self.logTag, error);
DDLogError(@"%@ verifying code failed with unknown error: %@", self.logTag, error);
failureBlock(error);
break;
}