Skip to content
Snippets Groups Projects

Add MessengerVerifyContact function

Merged Dariusz Rybicki requested to merge feature/messenger-verify-contact into development
4 files
+ 435
2
Compare changes
  • Side-by-side
  • Inline
Files
4
import Foundation
import XCTestDynamicOverlay
import XXClient
public struct MessengerVerifyContact {
public enum Error: Swift.Error, Equatable {
case notConnected
case notLoggedIn
}
public var run: (Contact) throws -> Bool
public func callAsFunction(_ contact: Contact) throws -> Bool {
try run(contact)
}
}
extension MessengerVerifyContact {
public static func live(_ env: MessengerEnvironment) -> MessengerVerifyContact {
MessengerVerifyContact { contact in
guard let e2e = env.e2e() else {
throw Error.notConnected
}
guard let ud = env.ud() else {
throw Error.notLoggedIn
}
let facts = try contact.getFacts()
let verifiedContact: Contact?
if facts.isEmpty {
var lookupResult: Result<Contact, NSError>!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.lookupUD(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
lookupId: try contact.getId(),
singleRequestParamsJSON: env.getSingleUseParams(),
callback: .init { result in
lookupResult = result
semaphore.signal()
}
)
semaphore.wait()
verifiedContact = try lookupResult.get()
} else {
var searchResult: Result<[Contact], NSError>!
let semaphore = DispatchSemaphore(value: 0)
_ = try env.searchUD(
e2eId: e2e.getId(),
udContact: try ud.getContact(),
facts: facts,
singleRequestParamsJSON: env.getSingleUseParams(),
callback: .init { result in
searchResult = result
semaphore.signal()
}
)
semaphore.wait()
verifiedContact = try searchResult.get().first
}
guard let verifiedContact = verifiedContact else {
return false
}
return try e2e.verifyOwnership(
received: contact,
verified: verifiedContact,
e2eId: e2e.getId()
)
}
}
}
extension MessengerVerifyContact {
public static let unimplemented = MessengerVerifyContact(
run: XCTUnimplemented("\(Self.self)")
)
}
Loading