Respond to CR.

pull/1/head
Matthew Chen 7 years ago
parent 4ce0b68a86
commit 4126b35a27

@ -12,6 +12,15 @@ public enum OWSUDError: Error {
case invalidData(description: String) case invalidData(description: String)
} }
@objc
public enum OWSUDCertificateExpirationPolicy: Int {
// We want to try to rotate the sender certificate
// on a frequent basis, but we don't want to block
// sending on this.
case strict
case permissive
}
@objc @objc
public enum UnidentifiedAccessMode: Int { public enum UnidentifiedAccessMode: Int {
case unknown case unknown
@ -130,7 +139,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
} }
// Any error is silently ignored on startup. // Any error is silently ignored on startup.
self.ensureSenderCertificate().retainUntilComplete() self.ensureSenderCertificate(certificateExpirationPolicy: .strict).retainUntilComplete()
} }
NotificationCenter.default.addObserver(self, NotificationCenter.default.addObserver(self,
selector: #selector(registrationStateDidChange), selector: #selector(registrationStateDidChange),
@ -147,7 +156,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
AssertIsOnMainThread() AssertIsOnMainThread()
// Any error is silently ignored // Any error is silently ignored
ensureSenderCertificate().retainUntilComplete() ensureSenderCertificate(certificateExpirationPolicy: .strict).retainUntilComplete()
} }
@objc func didBecomeActive() { @objc func didBecomeActive() {
@ -159,7 +168,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
} }
// Any error is silently ignored on startup. // Any error is silently ignored on startup.
self.ensureSenderCertificate().retainUntilComplete() self.ensureSenderCertificate(certificateExpirationPolicy: .strict).retainUntilComplete()
} }
} }
@ -327,11 +336,12 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
#if DEBUG #if DEBUG
@objc @objc
public func hasSenderCertificate() -> Bool { public func hasSenderCertificate() -> Bool {
return senderCertificate() != nil return senderCertificate(certificateExpirationPolicy: .permissive) != nil
} }
#endif #endif
private func senderCertificate() -> SMKSenderCertificate? { private func senderCertificate(certificateExpirationPolicy: OWSUDCertificateExpirationPolicy) -> SMKSenderCertificate? {
if certificateExpirationPolicy == .strict {
guard let certificateDate = dbConnection.object(forKey: senderCertificateDateKey(), inCollection: kUDCollection) as? Date else { guard let certificateDate = dbConnection.object(forKey: senderCertificateDateKey(), inCollection: kUDCollection) as? Date else {
return nil return nil
} }
@ -339,6 +349,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
// Discard certificates that we obtained more than 24 hours ago. // Discard certificates that we obtained more than 24 hours ago.
return nil return nil
} }
}
guard let certificateData = dbConnection.object(forKey: senderCertificateKey(), inCollection: kUDCollection) as? Data else { guard let certificateData = dbConnection.object(forKey: senderCertificateKey(), inCollection: kUDCollection) as? Data else {
return nil return nil
@ -375,8 +386,16 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
@objc @objc
public func ensureSenderCertificate(success:@escaping (SMKSenderCertificate) -> Void, public func ensureSenderCertificate(success:@escaping (SMKSenderCertificate) -> Void,
failure:@escaping (Error) -> Void) { failure:@escaping (Error) -> Void) {
return ensureSenderCertificate(certificateExpirationPolicy: .permissive,
success: success,
failure: failure)
}
private func ensureSenderCertificate(certificateExpirationPolicy: OWSUDCertificateExpirationPolicy,
success:@escaping (SMKSenderCertificate) -> Void,
failure:@escaping (Error) -> Void) {
firstly { firstly {
ensureSenderCertificate() ensureSenderCertificate(certificateExpirationPolicy: certificateExpirationPolicy)
}.map { certificate in }.map { certificate in
success(certificate) success(certificate)
}.catch { error in }.catch { error in
@ -384,9 +403,11 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
}.retainUntilComplete() }.retainUntilComplete()
} }
public func ensureSenderCertificate() -> Promise<SMKSenderCertificate> { public func ensureSenderCertificate(certificateExpirationPolicy: OWSUDCertificateExpirationPolicy) -> Promise<SMKSenderCertificate> {
// If there is a valid cached sender certificate, use that. // If there is a valid cached sender certificate, use that.
if let certificate = senderCertificate() { //
// NOTE: We use a "strict" expiration policy.
if let certificate = senderCertificate(certificateExpirationPolicy: certificateExpirationPolicy) {
return Promise.value(certificate) return Promise.value(certificate)
} }

Loading…
Cancel
Save