mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-30 00:02:47 +00:00
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:
commit
345a46b155
4 changed files with 32 additions and 16 deletions
|
@ -744,7 +744,7 @@ NSString *const AppDelegateDidValidateEmailNotificationClientSecretKey = @"AppDe
|
|||
return;
|
||||
}
|
||||
|
||||
NSString *sender = keyVerificationByDMRequest.sender;
|
||||
NSString *sender = keyVerificationByDMRequest.otherUser;
|
||||
|
||||
[room state:^(MXRoomState *roomState) {
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Reference in a new issue