diff --git a/Riot/AppDelegate.m b/Riot/AppDelegate.m index 426a80f86..ae7793281 100644 --- a/Riot/AppDelegate.m +++ b/Riot/AppDelegate.m @@ -744,7 +744,7 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe return; } - NSString *sender = keyVerificationByDMRequest.sender; + NSString *sender = keyVerificationByDMRequest.otherUser; [room state:^(MXRoomState *roomState) { diff --git a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift index d2a095519..60fde37ca 100644 --- a/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift +++ b/Riot/Modules/DeviceVerification/DeviceVerificationCoordinator.swift @@ -83,7 +83,9 @@ final class DeviceVerificationCoordinator: DeviceVerificationCoordinatorType { /// - session: the MXSession /// - incomingKeyVerificationRequest: An existing incoming key verification request to accept convenience init(session: MXSession, incomingKeyVerificationRequest: MXKeyVerificationRequest) { - self.init(session: session, otherUserId: incomingKeyVerificationRequest.sender, otherDeviceId: incomingKeyVerificationRequest.fromDevice) + let otherDeviceId = incomingKeyVerificationRequest.otherDevice ?? incomingKeyVerificationRequest.request.fromDevice + + self.init(session: session, otherUserId: incomingKeyVerificationRequest.otherUser, otherDeviceId: otherDeviceId) self.incomingKeyVerificationRequest = incomingKeyVerificationRequest } @@ -144,7 +146,7 @@ final class DeviceVerificationCoordinator: DeviceVerificationCoordinatorType { } private func createDataLoadingScreenCoordinator(with keyVerificationRequest: MXKeyVerificationRequest) -> DeviceVerificationDataLoadingCoordinator { - let coordinator = DeviceVerificationDataLoadingCoordinator(incomingKeyVerificationRequest: keyVerificationRequest) + let coordinator = DeviceVerificationDataLoadingCoordinator(session: self.session, incomingKeyVerificationRequest: keyVerificationRequest) coordinator.delegate = self coordinator.start() diff --git a/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingCoordinator.swift b/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingCoordinator.swift index c13ecf0eb..461e2fd43 100644 --- a/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingCoordinator.swift +++ b/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingCoordinator.swift @@ -44,8 +44,8 @@ final class DeviceVerificationDataLoadingCoordinator: DeviceVerificationDataLoad self.deviceVerificationDataLoadingViewController = deviceVerificationDataLoadingViewController } - init(incomingKeyVerificationRequest: MXKeyVerificationRequest) { - let deviceVerificationDataLoadingViewModel = DeviceVerificationDataLoadingViewModel(keyVerificationRequest: incomingKeyVerificationRequest) + init(session: MXSession, incomingKeyVerificationRequest: MXKeyVerificationRequest) { + let deviceVerificationDataLoadingViewModel = DeviceVerificationDataLoadingViewModel(session: session, keyVerificationRequest: incomingKeyVerificationRequest) let deviceVerificationDataLoadingViewController = DeviceVerificationDataLoadingViewController.instantiate(with: deviceVerificationDataLoadingViewModel) self.deviceVerificationDataLoadingViewModel = deviceVerificationDataLoadingViewModel self.deviceVerificationDataLoadingViewController = deviceVerificationDataLoadingViewController diff --git a/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingViewModel.swift b/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingViewModel.swift index 9c1348a17..693164375 100644 --- a/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingViewModel.swift +++ b/Riot/Modules/DeviceVerification/Loading/DeviceVerificationDataLoadingViewModel.swift @@ -30,7 +30,7 @@ final class DeviceVerificationDataLoadingViewModel: DeviceVerificationDataLoadin // MARK: Private - private let session: MXSession? + private let session: MXSession private let otherUserId: String? private let otherDeviceId: String? @@ -52,8 +52,8 @@ final class DeviceVerificationDataLoadingViewModel: DeviceVerificationDataLoadin self.keyVerificationRequest = nil } - init(keyVerificationRequest: MXKeyVerificationRequest) { - self.session = nil + init(session: MXSession, keyVerificationRequest: MXKeyVerificationRequest) { + self.session = session self.otherUserId = nil self.otherDeviceId = nil self.keyVerificationRequest = keyVerificationRequest @@ -88,16 +88,31 @@ final class DeviceVerificationDataLoadingViewModel: DeviceVerificationDataLoadin self.update(viewState: .loading) - keyVerificationRequest.accept(withMethod: MXKeyVerificationMethodSAS, success: { [weak self] (deviceVerificationTransaction) in + // TODO: Advertise that we support QR code too + keyVerificationRequest.accept(withMethods: [MXKeyVerificationMethodSAS], success: { [weak self] in guard let self = self else { return } - if let outgoingSASTransaction = deviceVerificationTransaction as? MXOutgoingSASTransaction { - self.registerTransactionDidStateChangeNotification(transaction: outgoingSASTransaction) - } else { - self.update(viewState: .error(DeviceVerificationDataLoadingViewModelError.unknown)) - } + // TODO: Display QR code and the emoji button here (that depends of keyVerificationRequest.methods) + // Instead of starting the transaction right now + self.session.crypto.keyVerificationManager.beginKeyVerification(from: keyVerificationRequest, method: MXKeyVerificationMethodSAS, success: { [weak self] (deviceVerificationTransaction) in + guard let self = self else { + return + } + + if let outgoingSASTransaction = deviceVerificationTransaction as? MXOutgoingSASTransaction { + self.registerTransactionDidStateChangeNotification(transaction: outgoingSASTransaction) + } else { + self.update(viewState: .error(DeviceVerificationDataLoadingViewModelError.unknown)) + } + + }, failure: { [weak self] (error) in + guard let self = self else { + return + } + self.update(viewState: .error(error)) + }) }, failure: { [weak self] (error) in guard let self = self else { @@ -108,8 +123,7 @@ final class DeviceVerificationDataLoadingViewModel: DeviceVerificationDataLoadin } private func downloadOtherDeviceKeys() { - guard let session = self.session, - let crypto = session.crypto, + guard let crypto = session.crypto, let otherUserId = self.otherUserId, let otherDeviceId = self.otherDeviceId else { self.update(viewState: .errorMessage(VectorL10n.deviceVerificationErrorCannotLoadDevice))