Clean up Safety Number comparison error handling

This commit is contained in:
Max Radermacher 2025-03-06 23:44:36 -06:00 committed by GitHub
parent 3d1439237f
commit aeb0962e55
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 25 deletions

View File

@ -11,7 +11,7 @@ public enum OWSErrorCode: Int {
case failedToDecodeJson = 13
case failedToEncodeJson = 14
case failedToDecodeQR = 15
case privacyVerificationFailure = 20
// case privacyVerificationFailure = 20
case untrustedIdentity = 777427
case invalidKeySignature = 777428
case obsolete30 = 30
@ -23,7 +23,7 @@ public enum OWSErrorCode: Int {
case failedToEncryptUDMessage = 111
case messageSendUnauthorized = 1001
case signalServiceRateLimited = 1010
case userError = 2001
// case userError = 2001
case noSuchSignalRecipient = 777404
case messageSendDisabledDueToPreKeyUpdateFailures = 777405
case messageSendFailedToBlockList = 777406

View File

@ -8,9 +8,23 @@ import UIKit
let CompareSafetyNumbersActivityType = "org.whispersystems.signal.activity.CompareSafetyNumbers"
public protocol CompareSafetyNumbersActivityDelegate: AnyObject {
enum CompareSafetyNumberError: Error {
case userError
case verificationError
var localizedError: String {
switch self {
case .userError:
OWSLocalizedString("PRIVACY_VERIFICATION_FAILED_NO_SAFETY_NUMBERS_IN_CLIPBOARD", comment: "Alert body for user error")
case .verificationError:
OWSLocalizedString("PRIVACY_VERIFICATION_FAILED_MISMATCHED_SAFETY_NUMBERS_IN_CLIPBOARD", comment: "Alert body")
}
}
}
protocol CompareSafetyNumbersActivityDelegate: AnyObject {
func compareSafetyNumbersActivitySucceeded(activity: CompareSafetyNumbersActivity)
func compareSafetyNumbersActivity(_ activity: CompareSafetyNumbersActivity, failedWithError error: Error)
func compareSafetyNumbersActivity(_ activity: CompareSafetyNumbersActivity, failedWithError error: CompareSafetyNumberError)
}
public class CompareSafetyNumbersActivity: UIActivity {
@ -55,28 +69,20 @@ public class CompareSafetyNumbersActivity: UIActivity {
}
let pasteboardNumerics = numericOnly(string: UIPasteboard.general.string)
guard let pasteboardString = pasteboardNumerics,
pasteboardString.count == 60 else {
Logger.warn("no valid safety numbers found in pasteboard: \(String(describing: pasteboardNumerics))")
let error = OWSError(error: .userError,
description: OWSLocalizedString("PRIVACY_VERIFICATION_FAILED_NO_SAFETY_NUMBERS_IN_CLIPBOARD", comment: "Alert body for user error"),
isRetryable: false)
delegate.compareSafetyNumbersActivity(self, failedWithError: error)
guard let pasteboardString = pasteboardNumerics, pasteboardString.count == 60 else {
Logger.warn("no valid safety numbers found in pasteboard")
delegate.compareSafetyNumbersActivity(self, failedWithError: .userError)
return
}
let pasteboardSafetyNumbers = pasteboardString
if pasteboardSafetyNumbers == mySafetyNumbers {
Logger.info("successfully matched safety numbers. local numbers: \(String(describing: mySafetyNumbers)) pasteboard:\(pasteboardSafetyNumbers)")
Logger.info("successfully matched safety numbers")
delegate.compareSafetyNumbersActivitySucceeded(activity: self)
} else {
Logger.warn("local numbers: \(String(describing: mySafetyNumbers)) didn't match pasteboard:\(pasteboardSafetyNumbers)")
let error = OWSError(error: .privacyVerificationFailure,
description: OWSLocalizedString("PRIVACY_VERIFICATION_FAILED_MISMATCHED_SAFETY_NUMBERS_IN_CLIPBOARD", comment: "Alert body"),
isRetryable: false)
delegate.compareSafetyNumbersActivity(self, failedWithError: error)
Logger.warn("local numbers didn't match pasteboard")
delegate.compareSafetyNumbersActivity(self, failedWithError: .verificationError)
}
}

View File

@ -466,7 +466,7 @@ public class FingerprintViewController: OWSViewController, OWSNavigationChildCon
extension FingerprintViewController: CompareSafetyNumbersActivityDelegate {
public func compareSafetyNumbersActivitySucceeded(activity: CompareSafetyNumbersActivity) {
func compareSafetyNumbersActivitySucceeded(activity: CompareSafetyNumbersActivity) {
FingerprintScanViewController.showVerificationSucceeded(
from: self,
identityKey: identityKey,
@ -476,17 +476,14 @@ extension FingerprintViewController: CompareSafetyNumbersActivityDelegate {
)
}
public func compareSafetyNumbersActivity(_ activity: CompareSafetyNumbersActivity, failedWithError error: Error) {
let isUserError = (error as NSError).code == OWSErrorCode.userError.rawValue
func compareSafetyNumbersActivity(_ activity: CompareSafetyNumbersActivity, failedWithError error: CompareSafetyNumberError) {
FingerprintScanViewController.showVerificationFailed(
from: self,
isUserError: isUserError,
localizedErrorDescription: error.userErrorDescription,
isUserError: error == .userError,
localizedErrorDescription: error.localizedError,
tag: "[\(type(of: self))]"
)
}
}
extension FingerprintViewController: UITextViewDelegate {