Discard sender certificates after 24 hours.

pull/1/head
Matthew Chen 7 years ago
parent 3edf3ed199
commit 4ce0b68a86

@ -104,6 +104,8 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
private let kUDCollection = "kUDCollection" private let kUDCollection = "kUDCollection"
private let kUDCurrentSenderCertificateKey_Production = "kUDCurrentSenderCertificateKey_Production" private let kUDCurrentSenderCertificateKey_Production = "kUDCurrentSenderCertificateKey_Production"
private let kUDCurrentSenderCertificateKey_Staging = "kUDCurrentSenderCertificateKey_Staging" private let kUDCurrentSenderCertificateKey_Staging = "kUDCurrentSenderCertificateKey_Staging"
private let kUDCurrentSenderCertificateDateKey_Production = "kUDCurrentSenderCertificateDateKey_Production"
private let kUDCurrentSenderCertificateDateKey_Staging = "kUDCurrentSenderCertificateDateKey_Staging"
private let kUDUnrestrictedAccessKey = "kUDUnrestrictedAccessKey" private let kUDUnrestrictedAccessKey = "kUDUnrestrictedAccessKey"
// MARK: Recipient State // MARK: Recipient State
@ -134,6 +136,10 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
selector: #selector(registrationStateDidChange), selector: #selector(registrationStateDidChange),
name: .RegistrationStateDidChange, name: .RegistrationStateDidChange,
object: nil) object: nil)
NotificationCenter.default.addObserver(self,
selector: #selector(didBecomeActive),
name: NSNotification.Name.OWSApplicationDidBecomeActive,
object: nil)
} }
@objc @objc
@ -144,6 +150,19 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
ensureSenderCertificate().retainUntilComplete() ensureSenderCertificate().retainUntilComplete()
} }
@objc func didBecomeActive() {
AssertIsOnMainThread()
AppReadiness.runNowOrWhenAppDidBecomeReady {
guard TSAccountManager.isRegistered() else {
return
}
// Any error is silently ignored on startup.
self.ensureSenderCertificate().retainUntilComplete()
}
}
// MARK: - // MARK: -
@objc @objc
@ -313,6 +332,14 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
#endif #endif
private func senderCertificate() -> SMKSenderCertificate? { private func senderCertificate() -> SMKSenderCertificate? {
guard let certificateDate = dbConnection.object(forKey: senderCertificateDateKey(), inCollection: kUDCollection) as? Date else {
return nil
}
guard certificateDate.timeIntervalSinceNow < kDayInterval else {
// Discard certificates that we obtained more than 24 hours ago.
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
} }
@ -333,6 +360,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
} }
func setSenderCertificate(_ certificateData: Data) { func setSenderCertificate(_ certificateData: Data) {
dbConnection.setObject(Date(), forKey: senderCertificateDateKey(), inCollection: kUDCollection)
dbConnection.setObject(certificateData, forKey: senderCertificateKey(), inCollection: kUDCollection) dbConnection.setObject(certificateData, forKey: senderCertificateKey(), inCollection: kUDCollection)
} }
@ -340,6 +368,10 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
return IsUsingProductionService() ? kUDCurrentSenderCertificateKey_Production : kUDCurrentSenderCertificateKey_Staging return IsUsingProductionService() ? kUDCurrentSenderCertificateKey_Production : kUDCurrentSenderCertificateKey_Staging
} }
private func senderCertificateDateKey() -> String {
return IsUsingProductionService() ? kUDCurrentSenderCertificateDateKey_Production : kUDCurrentSenderCertificateDateKey_Staging
}
@objc @objc
public func ensureSenderCertificate(success:@escaping (SMKSenderCertificate) -> Void, public func ensureSenderCertificate(success:@escaping (SMKSenderCertificate) -> Void,
failure:@escaping (Error) -> Void) { failure:@escaping (Error) -> Void) {

Loading…
Cancel
Save