Add support for manually starting SaS verification flows and accepting remotely started ones

This commit is contained in:
Stefan Ceriu
2023-01-05 18:06:39 +02:00
committed by Stefan Ceriu
parent 7888736a4d
commit 956e92a9ac
13 changed files with 185 additions and 46 deletions
@@ -27,7 +27,21 @@ struct MockSessionVerificationControllerProxy: SessionVerificationControllerProx
func requestVerification() async -> Result<Void, SessionVerificationControllerProxyError> {
Task.detached {
try await Task.sleep(for: requestDelay)
callbacks.send(.receivedVerificationData(Self.emojis))
callbacks.send(.acceptedVerificationRequest)
}
return .success(())
}
func startSasVerification() async -> Result<Void, SessionVerificationControllerProxyError> {
Task.detached {
try await Task.sleep(for: requestDelay)
callbacks.send(.startedSasVerification)
Task.detached {
try await Task.sleep(for: requestDelay)
callbacks.send(.receivedVerificationData(Self.emojis))
}
}
return .success(())
@@ -31,6 +31,14 @@ private class WeakSessionVerificationControllerProxy: SessionVerificationControl
proxy?.didReceiveData(data)
}
func didAcceptVerificationRequest() {
proxy?.didAcceptVerificationRequest()
}
func didStartSasVerification() {
proxy?.didStartSasVerification()
}
func didFail() {
proxy?.didFail()
}
@@ -73,6 +81,17 @@ class SessionVerificationControllerProxy: SessionVerificationControllerProxyProt
}
}
func startSasVerification() async -> Result<Void, SessionVerificationControllerProxyError> {
await Task.dispatch(on: .global()) {
do {
try self.sessionVerificationController.startSasVerification()
return .success(())
} catch {
return .failure(.failedStartingSasVerification)
}
}
}
func approveVerification() async -> Result<Void, SessionVerificationControllerProxyError> {
await Task.dispatch(on: .global()) {
do {
@@ -108,6 +127,14 @@ class SessionVerificationControllerProxy: SessionVerificationControllerProxyProt
// MARK: - Private
fileprivate func didAcceptVerificationRequest() {
callbacks.send(.acceptedVerificationRequest)
}
fileprivate func didStartSasVerification() {
callbacks.send(.startedSasVerification)
}
fileprivate func didReceiveData(_ data: [MatrixRustSDK.SessionVerificationEmoji]) {
callbacks.send(.receivedVerificationData(data.map { emoji in
SessionVerificationEmoji(symbol: emoji.symbol(), description: emoji.description())
@@ -19,12 +19,15 @@ import Foundation
enum SessionVerificationControllerProxyError: Error {
case failedRequestingVerification
case failedStartingSasVerification
case failedApprovingVerification
case failedDecliningVerification
case failedCancellingVerification
}
enum SessionVerificationControllerProxyCallback {
case acceptedVerificationRequest
case startedSasVerification
case receivedVerificationData([SessionVerificationEmoji])
case finished
case cancelled
@@ -43,6 +46,8 @@ protocol SessionVerificationControllerProxyProtocol {
func requestVerification() async -> Result<Void, SessionVerificationControllerProxyError>
func startSasVerification() async -> Result<Void, SessionVerificationControllerProxyError>
func approveVerification() async -> Result<Void, SessionVerificationControllerProxyError>
func declineVerification() async -> Result<Void, SessionVerificationControllerProxyError>