mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Respond to CR.
This commit is contained in:
parent
5da4f7bb57
commit
b808c2b33b
|
@ -9,6 +9,7 @@ import SignalCoreKit
|
||||||
|
|
||||||
public enum OWSUDError: Error {
|
public enum OWSUDError: Error {
|
||||||
case assertionError(description: String)
|
case assertionError(description: String)
|
||||||
|
case invalidData(description: String)
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc public protocol OWSUDManager: class {
|
@objc public protocol OWSUDManager: class {
|
||||||
|
@ -71,12 +72,6 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
|
||||||
ensureSenderCertificate().retainUntilComplete()
|
ensureSenderCertificate().retainUntilComplete()
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Singletons
|
|
||||||
|
|
||||||
private var networkManager: TSNetworkManager {
|
|
||||||
return SSKEnvironment.shared.networkManager
|
|
||||||
}
|
|
||||||
|
|
||||||
// MARK: - Recipient state
|
// MARK: - Recipient state
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
|
@ -138,32 +133,22 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
|
||||||
return Promise(value: certificateData)
|
return Promise(value: certificateData)
|
||||||
}
|
}
|
||||||
// Try to obtain a new sender certificate.
|
// Try to obtain a new sender certificate.
|
||||||
return requestSenderCertificate()
|
return requestSenderCertificate().then { (certificateData) in
|
||||||
|
// Cache the current sender certificate.
|
||||||
|
self.setSenderCertificate(certificateData)
|
||||||
|
|
||||||
|
return Promise(value: certificateData)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private func requestSenderCertificate() -> Promise<Data> {
|
private func requestSenderCertificate() -> Promise<Data> {
|
||||||
let request = OWSRequestFactory.udSenderCertificateRequest()
|
return SignalServiceRestClient().requestUDSenderCertificate().then { (certificateData) in
|
||||||
return self.networkManager.makePromise(request: request)
|
guard self.isValidCertificate(certificateData: certificateData) else {
|
||||||
.then(execute: { (_, responseObject) -> Data in
|
throw OWSUDError.invalidData(description: "Invalid sender certificate returned by server")
|
||||||
let certificateData = try self.parseSenderCertificateResponse(responseObject: responseObject)
|
}
|
||||||
|
|
||||||
guard self.isValidCertificate(certificateData: certificateData) else {
|
return Promise(value: certificateData)
|
||||||
throw OWSUDError.assertionError(description: "Invalid sender certificate returned by server")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cache the current sender certificate.
|
|
||||||
self.setSenderCertificate(certificateData)
|
|
||||||
|
|
||||||
return certificateData
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private func parseSenderCertificateResponse(responseObject: Any?) throws -> Data {
|
|
||||||
guard let parser = ParamParser(responseObject: responseObject) else {
|
|
||||||
throw OWSUDError.assertionError(description: "Invalid sender certificate response")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return try parser.requiredBase64EncodedData(key: "certificate")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func isValidCertificate(certificateData: Data) -> Bool {
|
private func isValidCertificate(certificateData: Data) -> Bool {
|
||||||
|
|
|
@ -9,6 +9,7 @@ protocol SignalServiceClient {
|
||||||
func getAvailablePreKeys() -> Promise<Int>
|
func getAvailablePreKeys() -> Promise<Int>
|
||||||
func registerPreKeys(identityKey: IdentityKey, signedPreKeyRecord: SignedPreKeyRecord, preKeyRecords: [PreKeyRecord]) -> Promise<Void>
|
func registerPreKeys(identityKey: IdentityKey, signedPreKeyRecord: SignedPreKeyRecord, preKeyRecords: [PreKeyRecord]) -> Promise<Void>
|
||||||
func setCurrentSignedPreKey(_ signedPreKey: SignedPreKeyRecord) -> Promise<Void>
|
func setCurrentSignedPreKey(_ signedPreKey: SignedPreKeyRecord) -> Promise<Void>
|
||||||
|
func requestUDSenderCertificate() -> Promise<Data>
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Based on libsignal-service-java's PushServiceSocket class
|
/// Based on libsignal-service-java's PushServiceSocket class
|
||||||
|
@ -51,4 +52,22 @@ class SignalServiceRestClient: SignalServiceClient {
|
||||||
let request = OWSRequestFactory.registerSignedPrekeyRequest(with: signedPreKey)
|
let request = OWSRequestFactory.registerSignedPrekeyRequest(with: signedPreKey)
|
||||||
return networkManager.makePromise(request: request).asVoid()
|
return networkManager.makePromise(request: request).asVoid()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func requestUDSenderCertificate() -> Promise<Data> {
|
||||||
|
let request = OWSRequestFactory.udSenderCertificateRequest()
|
||||||
|
return self.networkManager.makePromise(request: request)
|
||||||
|
.then(execute: { (_, responseObject) -> Data in
|
||||||
|
let certificateData = try self.parseUDSenderCertificateResponse(responseObject: responseObject)
|
||||||
|
|
||||||
|
return certificateData
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private func parseUDSenderCertificateResponse(responseObject: Any?) throws -> Data {
|
||||||
|
guard let parser = ParamParser(responseObject: responseObject) else {
|
||||||
|
throw OWSUDError.invalidData(description: "Invalid sender certificate response")
|
||||||
|
}
|
||||||
|
|
||||||
|
return try parser.requiredBase64EncodedData(key: "certificate")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue