Merge pull request #2994 from vector-im/riot_2870

Key Verification: Support m.key.verification.ready event with new SDK API
This commit is contained in:
manuroe 2020-02-14 12:39:55 +01:00 committed by GitHub
commit 345a46b155
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 16 deletions

View file

@ -744,7 +744,7 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
return;
}
NSString *sender = keyVerificationByDMRequest.sender;
NSString *sender = keyVerificationByDMRequest.otherUser;
[room state:^(MXRoomState *roomState) {

View file

@ -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()

View file

@ -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

View file

@ -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))