diff --git a/Riot/Assets/en.lproj/Vector.strings b/Riot/Assets/en.lproj/Vector.strings index d1677e9dd..30cc0e7b4 100644 --- a/Riot/Assets/en.lproj/Vector.strings +++ b/Riot/Assets/en.lproj/Vector.strings @@ -80,9 +80,13 @@ "auth_missing_email" = "Missing email address"; "auth_missing_phone" = "Missing phone number"; "auth_missing_email_or_phone" = "Missing email address or phone number"; +"auth_email_in_use" = "This email address is already in use"; +"auth_phone_in_use" = "This phone number is already in use"; +"auth_untrusted_id_server" = "The identity server is not trusted"; "auth_password_dont_match" = "Passwords don't match"; "auth_username_in_use" = "Username in use"; "auth_forgot_password" = "Forgot password?"; +"auth_email_not_found" = "Failed to send email: This email address was not found"; "auth_use_server_options" = "Use custom server options (advanced)"; "auth_email_validation_message" = "Please check your email to continue registration"; "auth_msisdn_validation_title" = "Verification Pending"; diff --git a/Riot/ViewController/SettingsViewController.m b/Riot/ViewController/SettingsViewController.m index 1cbbd1723..2cdc2e7b4 100644 --- a/Riot/ViewController/SettingsViewController.m +++ b/Riot/ViewController/SettingsViewController.m @@ -2884,6 +2884,36 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)(); [self stopActivityIndicator]; NSLog(@"[SettingsViewController] Failed to request email token"); + + // Translate the potential MX error. + MXError *mxError = [[MXError alloc] initWithNSError:error]; + if (mxError && ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse] || [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted])) + { + NSMutableDictionary *userInfo; + if (error.userInfo) + { + userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo]; + } + else + { + userInfo = [NSMutableDictionary dictionary]; + } + + userInfo[NSLocalizedFailureReasonErrorKey] = nil; + + if ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse]) + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil); + } + else + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + } + + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + } // Notify user [[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error]; @@ -2957,6 +2987,36 @@ typedef void (^blockSettingsViewController_onReadyToDestroy)(); NSLog(@"[SettingsViewController] Failed to request msisdn token"); + // Translate the potential MX error. + MXError *mxError = [[MXError alloc] initWithNSError:error]; + if (mxError && ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse] || [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted])) + { + NSMutableDictionary *userInfo; + if (error.userInfo) + { + userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo]; + } + else + { + userInfo = [NSMutableDictionary dictionary]; + } + + userInfo[NSLocalizedFailureReasonErrorKey] = nil; + + if ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse]) + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_phone_in_use", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_phone_in_use", @"Vector", nil); + } + else + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + } + + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + } + // Notify user [[NSNotificationCenter defaultCenter] postNotificationName:kMXKErrorNotification object:error]; diff --git a/Riot/Views/Authentication/AuthInputsView.m b/Riot/Views/Authentication/AuthInputsView.m index b33b20cd8..6af7c8678 100644 --- a/Riot/Views/Authentication/AuthInputsView.m +++ b/Riot/Views/Authentication/AuthInputsView.m @@ -457,6 +457,36 @@ return; } + // Translate the potential MX error. + MXError *mxError = [[MXError alloc] initWithNSError:error]; + if (mxError && ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse] || [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted])) + { + NSMutableDictionary *userInfo; + if (error.userInfo) + { + userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo]; + } + else + { + userInfo = [NSMutableDictionary dictionary]; + } + + userInfo[NSLocalizedFailureReasonErrorKey] = nil; + + if ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse]) + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_phone_in_use", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_phone_in_use", @"Vector", nil); + } + else + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + } + + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + } + callback(nil, error); }]; @@ -530,6 +560,35 @@ return; } + // Translate the potential MX error. + MXError *mxError = [[MXError alloc] initWithNSError:error]; + if (mxError && ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse] || [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted])) + { + NSMutableDictionary *userInfo; + if (error.userInfo) + { + userInfo = [NSMutableDictionary dictionaryWithDictionary:error.userInfo]; + } + else + { + userInfo = [NSMutableDictionary dictionary]; + } + + userInfo[NSLocalizedFailureReasonErrorKey] = nil; + + if ([mxError.errcode isEqualToString:kMXErrCodeStringThreePIDInUse]) + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_email_in_use", @"Vector", nil); + } + else + { + userInfo[NSLocalizedDescriptionKey] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + userInfo[@"error"] = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + } + + error = [NSError errorWithDomain:error.domain code:error.code userInfo:userInfo]; + } callback(nil, error); }]; diff --git a/Riot/Views/Authentication/ForgotPasswordInputsView.m b/Riot/Views/Authentication/ForgotPasswordInputsView.m index ec5f50ea6..18f4e6d35 100644 --- a/Riot/Views/Authentication/ForgotPasswordInputsView.m +++ b/Riot/Views/Authentication/ForgotPasswordInputsView.m @@ -251,7 +251,14 @@ } NSString *errorMessage; - if (error.userInfo[@"error"]) + + // Translate the potential MX error. + MXError *mxError = [[MXError alloc] initWithNSError:error]; + if (mxError && [mxError.errcode isEqualToString:kMXErrCodeStringThreePIDNotFound]) + errorMessage = NSLocalizedStringFromTable(@"auth_email_not_found", @"Vector", nil); + else if (mxError && [mxError.errcode isEqualToString:kMXErrCodeStringServerNotTrusted]) + errorMessage = NSLocalizedStringFromTable(@"auth_untrusted_id_server", @"Vector", nil); + else if (error.userInfo[@"error"]) errorMessage = error.userInfo[@"error"]; else errorMessage = error.localizedDescription;