Remove YDB connections.

This commit is contained in:
Matthew Chen 2019-07-23 14:39:14 -03:00
parent dca40dd754
commit 4e736c83a0
4 changed files with 47 additions and 25 deletions

View File

@ -74,7 +74,7 @@ NS_ASSUME_NONNULL_BEGIN
SSKSessionStore *sessionStore = [SSKSessionStore new];
SSKSignedPreKeyStore *signedPreKeyStore = [SSKSignedPreKeyStore new];
SSKPreKeyStore *preKeyStore = [SSKPreKeyStore new];
id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
id<OWSUDManager> udManager = [OWSUDManagerImpl new];
OWSMessageDecrypter *messageDecrypter = [OWSMessageDecrypter new];
SSKMessageDecryptJobQueue *messageDecryptJobQueue = [SSKMessageDecryptJobQueue new];
OWSBatchMessageProcessor *batchMessageProcessor = [OWSBatchMessageProcessor new];

View File

@ -10,7 +10,6 @@
#import <SignalServiceKit/OWSPrimaryStorage.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
#import <SignalServiceKit/TSThread.h>
#import <SignalServiceKit/YapDatabaseConnection+OWS.h>
#import <YapDatabase/YapDatabase.h>
NSString *const kOWSSoundsStorageGlobalNotificationKey = @"kOWSSoundsStorageGlobalNotificationKey";

View File

@ -107,10 +107,23 @@ public class OWSUDAccess: NSObject {
@objc
public class OWSUDManagerImpl: NSObject, OWSUDManager {
private let dbConnection: YapDatabaseConnection
// MARK: - Dependencies
private var databaseStorage: SDSDatabaseStorage {
return SDSDatabaseStorage.shared
}
// MARK: -
@objc
public let keyValueStore = SDSKeyValueStore(collection: "kUDCollection")
@objc
public let phoneNumberAccessStore = SDSKeyValueStore(collection: "kUnidentifiedAccessCollection")
@objc
public let uuidAccessStore = SDSKeyValueStore(collection: "kUnidentifiedAccessUUIDCollection")
// MARK: Local Configuration State
private let kUDCollection = "kUDCollection"
private let kUDCurrentSenderCertificateKey_Production = "kUDCurrentSenderCertificateKey_Production"
private let kUDCurrentSenderCertificateKey_Staging = "kUDCurrentSenderCertificateKey_Staging"
private let kUDCurrentSenderCertificateDateKey_Production = "kUDCurrentSenderCertificateDateKey_Production"
@ -118,14 +131,11 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
private let kUDUnrestrictedAccessKey = "kUDUnrestrictedAccessKey"
// MARK: Recipient State
private let kUnidentifiedAccessPhoneNumberCollection = "kUnidentifiedAccessCollection"
private let kUnidentifiedAccessUUIDCollection = "kUnidentifiedAccessUUIDCollection"
var certificateValidator: SMKCertificateValidator
@objc
public required init(primaryStorage: OWSPrimaryStorage) {
self.dbConnection = primaryStorage.newDatabaseConnection()
public required override init() {
self.certificateValidator = SMKCertificateDefaultValidator(trustRoot: OWSUDManagerImpl.trustRoot())
super.init()
@ -202,12 +212,12 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
}
private func unidentifiedAccessMode(forAddress address: SignalServiceAddress,
transaction: YapDatabaseReadWriteTransaction) -> UnidentifiedAccessMode {
transaction: SDSAnyWriteTransaction) -> UnidentifiedAccessMode {
let defaultValue: UnidentifiedAccessMode = address.isLocalAddress ? .enabled : .unknown
let existingUUIDValue: UnidentifiedAccessMode?
if let uuidString = address.uuidString,
let existingRawValue = transaction.object(forKey: uuidString, inCollection: kUnidentifiedAccessUUIDCollection) as? Int {
let existingRawValue = uuidAccessStore.getOptionalInt(uuidString, transaction: transaction) {
guard let value = UnidentifiedAccessMode(rawValue: existingRawValue) else {
owsFailDebug("Couldn't parse mode value.")
@ -220,7 +230,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
let existingPhoneNumberValue: UnidentifiedAccessMode?
if let phoneNumber = address.phoneNumber,
let existingRawValue = transaction.object(forKey: phoneNumber, inCollection: kUnidentifiedAccessPhoneNumberCollection) as? Int {
let existingRawValue = phoneNumberAccessStore.getOptionalInt(phoneNumber, transaction: transaction) {
guard let value = UnidentifiedAccessMode(rawValue: existingRawValue) else {
owsFailDebug("Couldn't parse mode value.")
@ -239,7 +249,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
if existingPhoneNumberValue != existingUUIDValue {
owsFailDebug("UUID and Phone Number unexpectedly have different UD values")
Logger.info("Unexpected UD value mismatch, migrating phone number value: \(existingPhoneNumberValue) to uuid value: \(existingUUIDValue)")
transaction.setObject(existingUUIDValue.rawValue, forKey: address.phoneNumber!, inCollection: kUnidentifiedAccessPhoneNumberCollection)
phoneNumberAccessStore.setInt(existingUUIDValue.rawValue, key: address.phoneNumber!, transaction: transaction)
}
existingValue = existingUUIDValue
@ -248,14 +258,14 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
// We had phone number entry but not UUID, update UUID value
if let uuidString = address.uuidString {
transaction.setObject(existingPhoneNumberValue.rawValue, forKey: uuidString, inCollection: kUnidentifiedAccessUUIDCollection)
uuidAccessStore.setInt(existingPhoneNumberValue.rawValue, key: uuidString, transaction: transaction)
}
} else if let existingUUIDValue = existingUUIDValue {
existingValue = existingUUIDValue
// We had UUID entry but not phone number, update phone number value
if let phoneNumber = address.phoneNumber {
transaction.setObject(existingUUIDValue.rawValue, forKey: phoneNumber, inCollection: kUnidentifiedAccessPhoneNumberCollection)
phoneNumberAccessStore.setInt(existingUUIDValue.rawValue, key: phoneNumber, transaction: transaction)
}
} else {
existingValue = nil
@ -267,7 +277,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
@objc
public func unidentifiedAccessMode(forAddress address: SignalServiceAddress) -> UnidentifiedAccessMode {
var mode: UnidentifiedAccessMode = .unknown
dbConnection.readWrite { (transaction) in
databaseStorage.write { (transaction) in
mode = self.unidentifiedAccessMode(forAddress: address, transaction: transaction)
}
return mode
@ -279,15 +289,15 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
Logger.info("Setting local UD access mode: \(string(forUnidentifiedAccessMode: mode))")
}
dbConnection.readWrite { (transaction) in
databaseStorage.write { (transaction) in
let oldMode = self.unidentifiedAccessMode(forAddress: address, transaction: transaction)
if let uuidString = address.uuidString {
transaction.setObject(mode.rawValue as Int, forKey: uuidString, inCollection: self.kUnidentifiedAccessUUIDCollection)
self.uuidAccessStore.setInt(mode.rawValue, key: uuidString, transaction: transaction)
}
if let phoneNumber = address.phoneNumber {
transaction.setObject(mode.rawValue as Int, forKey: phoneNumber, inCollection: self.kUnidentifiedAccessPhoneNumberCollection)
self.phoneNumberAccessStore.setInt(mode.rawValue, key: phoneNumber, transaction: transaction)
}
if mode != oldMode {
@ -392,8 +402,15 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
#endif
private func senderCertificate(certificateExpirationPolicy: OWSUDCertificateExpirationPolicy) -> SMKSenderCertificate? {
var certificateDateValue: Date?
var certificateDataValue: Data?
databaseStorage.read { transaction in
certificateDateValue = self.keyValueStore.getDate(self.senderCertificateDateKey(), transaction: transaction)
certificateDataValue = self.keyValueStore.getData(self.senderCertificateKey(), transaction: transaction)
}
if certificateExpirationPolicy == .strict {
guard let certificateDate = dbConnection.object(forKey: senderCertificateDateKey(), inCollection: kUDCollection) as? Date else {
guard let certificateDate = certificateDateValue else {
return nil
}
guard certificateDate.timeIntervalSinceNow < kDayInterval else {
@ -402,7 +419,7 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
}
}
guard let certificateData = dbConnection.object(forKey: senderCertificateKey(), inCollection: kUDCollection) as? Data else {
guard let certificateData = certificateDataValue else {
return nil
}
@ -422,8 +439,10 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
}
func setSenderCertificate(_ certificateData: Data) {
dbConnection.setObject(Date(), forKey: senderCertificateDateKey(), inCollection: kUDCollection)
dbConnection.setObject(certificateData, forKey: senderCertificateKey(), inCollection: kUDCollection)
databaseStorage.write { transaction in
self.keyValueStore.setDate(Date(), key: self.senderCertificateDateKey(), transaction: transaction)
self.keyValueStore.setData(certificateData, key: self.senderCertificateKey(), transaction: transaction)
}
}
private func senderCertificateKey() -> String {
@ -522,12 +541,16 @@ public class OWSUDManagerImpl: NSObject, OWSUDManager {
@objc
public func shouldAllowUnrestrictedAccessLocal() -> Bool {
return dbConnection.bool(forKey: kUDUnrestrictedAccessKey, inCollection: kUDCollection, defaultValue: false)
return databaseStorage.readReturningResult { transaction in
self.keyValueStore.getBool(self.kUDUnrestrictedAccessKey, defaultValue: false, transaction: transaction)
}
}
@objc
public func setShouldAllowUnrestrictedAccessLocal(_ value: Bool) {
dbConnection.setBool(value, forKey: kUDUnrestrictedAccessKey, inCollection: kUDCollection)
databaseStorage.write { transaction in
self.keyValueStore.setBool(value, key: self.kUDUnrestrictedAccessKey, transaction: transaction)
}
// Try to update the account attributes to reflect this change.
tsAccountManager.updateAccountAttributes().retainUntilComplete()

View File

@ -69,7 +69,7 @@ NS_ASSUME_NONNULL_BEGIN
SSKSessionStore *sessionStore = [SSKSessionStore new];
SSKPreKeyStore *preKeyStore = [SSKPreKeyStore new];
SSKSignedPreKeyStore *signedPreKeyStore = [SSKSignedPreKeyStore new];
id<OWSUDManager> udManager = [[OWSUDManagerImpl alloc] initWithPrimaryStorage:primaryStorage];
id<OWSUDManager> udManager = [OWSUDManagerImpl new];
OWSMessageDecrypter *messageDecrypter = [OWSMessageDecrypter new];
SSKMessageDecryptJobQueue *messageDecryptJobQueue = [SSKMessageDecryptJobQueue new];
OWSBatchMessageProcessor *batchMessageProcessor = [OWSBatchMessageProcessor new];