Clean up Safety Number comparison error handling
This commit is contained in:
parent
3d1439237f
commit
aeb0962e55
@ -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
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user