diff --git a/src/Messages/TSBlockingManager.h b/src/Messages/OWSBlockingManager.h similarity index 85% rename from src/Messages/TSBlockingManager.h rename to src/Messages/OWSBlockingManager.h index 3a537884a..ab7832995 100644 --- a/src/Messages/TSBlockingManager.h +++ b/src/Messages/OWSBlockingManager.h @@ -7,10 +7,10 @@ NS_ASSUME_NONNULL_BEGIN @class TSStorageManager; @class OWSMessageSender; -extern NSString * const kNSNotificationName_BlockedPhoneNumbersDidChange; +extern NSString *const kNSNotificationName_BlockedPhoneNumbersDidChange; // This class can be safely accessed and used from any thread. -@interface TSBlockingManager : NSObject +@interface OWSBlockingManager : NSObject - (instancetype)init NS_UNAVAILABLE; diff --git a/src/Messages/TSBlockingManager.m b/src/Messages/OWSBlockingManager.m similarity index 78% rename from src/Messages/TSBlockingManager.m rename to src/Messages/OWSBlockingManager.m index e73ba5af1..4549eb6fc 100644 --- a/src/Messages/TSBlockingManager.m +++ b/src/Messages/OWSBlockingManager.m @@ -2,7 +2,7 @@ // Copyright (c) 2017 Open Whisper Systems. All rights reserved. // -#import "TSBlockingManager.h" +#import "OWSBlockingManager.h" #import "OWSBlockedPhoneNumbersMessage.h" #import "OWSMessageSender.h" #import "TSStorageManager.h" @@ -10,14 +10,14 @@ NS_ASSUME_NONNULL_BEGIN -NSString * const kNSNotificationName_BlockedPhoneNumbersDidChange = @"kNSNotificationName_BlockedPhoneNumbersDidChange"; -NSString * const kTSStorageManager_BlockedPhoneNumbersCollection = @"kTSStorageManager_BlockedPhoneNumbersCollection"; +NSString *const kNSNotificationName_BlockedPhoneNumbersDidChange = @"kNSNotificationName_BlockedPhoneNumbersDidChange"; +NSString *const kOWSBlockingManager_BlockedPhoneNumbersCollection = @"kOWSBlockingManager_BlockedPhoneNumbersCollection"; // This key is used to persist the current "blocked phone numbers" state. -NSString * const kTSStorageManager_BlockedPhoneNumbersKey = @"kTSStorageManager_BlockedPhoneNumbersKey"; +NSString *const kOWSBlockingManager_BlockedPhoneNumbersKey = @"kOWSBlockingManager_BlockedPhoneNumbersKey"; // This key is used to persist the most recently synced "blocked phone numbers" state. -NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageManager_SyncedBlockedPhoneNumbersKey"; +NSString *const kOWSBlockingManager_SyncedBlockedPhoneNumbersKey = @"kOWSBlockingManager_SyncedBlockedPhoneNumbersKey"; -@interface TSBlockingManager () +@interface OWSBlockingManager () @property (nonatomic, readonly) TSStorageManager *storageManager; @property (nonatomic, readonly) OWSMessageSender *messageSender; @@ -31,11 +31,11 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan #pragma mark - -@implementation TSBlockingManager +@implementation OWSBlockingManager + (instancetype)sharedManager { - static TSBlockingManager *sharedMyManager = nil; + static OWSBlockingManager *sharedMyManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedMyManager = [[self alloc] initDefault]; @@ -48,11 +48,10 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan TSStorageManager *storageManager = [TSStorageManager sharedManager]; OWSMessageSender *messageSender = [TextSecureKitEnv sharedEnv].messageSender; - return [self initStorageManager:storageManager - messageSender:messageSender]; + return [self initWithStorageManager:storageManager messageSender:messageSender]; } -- (instancetype)initStorageManager:(TSStorageManager *)storageManager messageSender:(OWSMessageSender *)messageSender +- (instancetype)initWithStorageManager:(TSStorageManager *)storageManager messageSender:(OWSMessageSender *)messageSender { self = [super init]; @@ -62,7 +61,7 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan OWSAssert(storageManager); OWSAssert(messageSender); - + _storageManager = storageManager; _messageSender = messageSender; @@ -75,38 +74,42 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan return self; } -- (void)addBlockedPhoneNumber:(NSString *)phoneNumber { +- (void)addBlockedPhoneNumber:(NSString *)phoneNumber +{ OWSAssert(phoneNumber.length > 0); DDLogInfo(@"%@ addBlockedPhoneNumber: %@", self.tag, phoneNumber); - @synchronized (self) { + @synchronized(self) + { [self lazyLoadBlockedPhoneNumbersIfNecessary]; if ([_blockedPhoneNumberSet containsObject:phoneNumber]) { // Ignore redundant changes. return; } - + [_blockedPhoneNumberSet addObject:phoneNumber]; } [self handleUpdate]; } -- (void)removeBlockedPhoneNumber:(NSString *)phoneNumber { +- (void)removeBlockedPhoneNumber:(NSString *)phoneNumber +{ OWSAssert(phoneNumber.length > 0); DDLogInfo(@"%@ removeBlockedPhoneNumber: %@", self.tag, phoneNumber); - @synchronized (self) { + @synchronized(self) + { [self lazyLoadBlockedPhoneNumbersIfNecessary]; if (![_blockedPhoneNumberSet containsObject:phoneNumber]) { // Ignore redundant changes. return; } - + [_blockedPhoneNumberSet removeObject:phoneNumber]; } @@ -119,22 +122,25 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan DDLogInfo(@"%@ setBlockedPhoneNumbers: %d", self.tag, (int)blockedPhoneNumbers.count); - @synchronized (self) { + @synchronized(self) + { [self lazyLoadBlockedPhoneNumbersIfNecessary]; NSSet *newSet = [NSSet setWithArray:blockedPhoneNumbers]; if ([_blockedPhoneNumberSet isEqualToSet:newSet]) { return; } - + _blockedPhoneNumberSet = [newSet mutableCopy]; } [self handleUpdate:sendSyncMessage]; } -- (NSArray *)blockedPhoneNumbers { - @synchronized (self) { +- (NSArray *)blockedPhoneNumbers +{ + @synchronized(self) + { [self lazyLoadBlockedPhoneNumbersIfNecessary]; return [_blockedPhoneNumberSet.allObjects sortedArrayUsingSelector:@selector(compare:)]; @@ -154,8 +160,8 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan NSArray *blockedPhoneNumbers = [self blockedPhoneNumbers]; [_storageManager setObject:blockedPhoneNumbers - forKey:kTSStorageManager_BlockedPhoneNumbersKey - inCollection:kTSStorageManager_BlockedPhoneNumbersCollection]; + forKey:kOWSBlockingManager_BlockedPhoneNumbersKey + inCollection:kOWSBlockingManager_BlockedPhoneNumbersCollection]; dispatch_async(dispatch_get_main_queue(), ^{ if (sendSyncMessage) { @@ -190,15 +196,16 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan return; } - NSArray *blockedPhoneNumbers = [_storageManager objectForKey:kTSStorageManager_BlockedPhoneNumbersKey - inCollection:kTSStorageManager_BlockedPhoneNumbersCollection]; + NSArray *blockedPhoneNumbers = + [_storageManager objectForKey:kOWSBlockingManager_BlockedPhoneNumbersKey + inCollection:kOWSBlockingManager_BlockedPhoneNumbersCollection]; _blockedPhoneNumberSet = [[NSMutableSet alloc] initWithArray:(blockedPhoneNumbers ?: [NSArray new])]; // If we haven't yet successfully synced the current "blocked phone numbers" changes, // try again to sync now. NSArray *syncedBlockedPhoneNumbers = - [_storageManager objectForKey:kTSStorageManager_SyncedBlockedPhoneNumbersKey - inCollection:kTSStorageManager_BlockedPhoneNumbersCollection]; + [_storageManager objectForKey:kOWSBlockingManager_SyncedBlockedPhoneNumbersKey + inCollection:kOWSBlockingManager_BlockedPhoneNumbersCollection]; NSSet *syncedBlockedPhoneNumberSet = [[NSSet alloc] initWithArray:(syncedBlockedPhoneNumbers ?: [NSArray new])]; if (![_blockedPhoneNumberSet isEqualToSet:syncedBlockedPhoneNumberSet]) { DDLogInfo(@"%@ retrying sync of blocked phone numbers", self.tag); @@ -235,8 +242,8 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan // Record the last set of "blocked phone numbers" which we successfully synced. [_storageManager setObject:blockedPhoneNumbers - forKey:kTSStorageManager_SyncedBlockedPhoneNumbersKey - inCollection:kTSStorageManager_BlockedPhoneNumbersCollection]; + forKey:kOWSBlockingManager_SyncedBlockedPhoneNumbersKey + inCollection:kOWSBlockingManager_BlockedPhoneNumbersCollection]; } #pragma mark - Logging diff --git a/src/Messages/OWSMessageSender.h b/src/Messages/OWSMessageSender.h index 62c2b113d..3cc4653d8 100644 --- a/src/Messages/OWSMessageSender.h +++ b/src/Messages/OWSMessageSender.h @@ -7,7 +7,7 @@ NS_ASSUME_NONNULL_BEGIN @class ContactsUpdater; @class OWSUploadingService; @class SignalRecipient; -@class TSBlockingManager; +@class OWSBlockingManager; @class TSInvalidIdentityKeySendingErrorMessage; @class TSNetworkManager; @class TSOutgoingMessage; @@ -32,7 +32,7 @@ NS_SWIFT_NAME(MessageSender) contactsManager:(id)contactsManager contactsUpdater:(ContactsUpdater *)contactsUpdater; -- (void)setBlockingManager:(TSBlockingManager *)blockingManager; +- (void)setBlockingManager:(OWSBlockingManager *)blockingManager; /** * Send and resend text messages or resend messages with existing attachments. diff --git a/src/Messages/OWSMessageSender.m b/src/Messages/OWSMessageSender.m index 0fe690a71..e45e2a1c7 100644 --- a/src/Messages/OWSMessageSender.m +++ b/src/Messages/OWSMessageSender.m @@ -5,6 +5,7 @@ #import "OWSMessageSender.h" #import "ContactsUpdater.h" #import "NSData+messagePadding.h" +#import "OWSBlockingManager.h" #import "OWSDevice.h" #import "OWSDisappearingMessagesJob.h" #import "OWSError.h" @@ -17,7 +18,6 @@ #import "SignalRecipient.h" #import "TSAccountManager.h" #import "TSAttachmentStream.h" -#import "TSBlockingManager.h" #import "TSContactThread.h" #import "TSGroupThread.h" #import "TSIncomingMessage.h" @@ -258,7 +258,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; @property (nonatomic, readonly) TSNetworkManager *networkManager; @property (nonatomic, readonly) TSStorageManager *storageManager; -@property (nonatomic, readonly) TSBlockingManager *blockingManager; +@property (nonatomic, readonly) OWSBlockingManager *blockingManager; @property (nonatomic, readonly) OWSUploadingService *uploadingService; @property (nonatomic, readonly) YapDatabaseConnection *dbConnection; @property (nonatomic, readonly) id contactsManager; @@ -295,7 +295,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; return self; } -- (void)setBlockingManager:(TSBlockingManager *)blockingManager +- (void)setBlockingManager:(OWSBlockingManager *)blockingManager { OWSAssert(blockingManager); OWSAssert(!_blockingManager); @@ -636,13 +636,13 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; int blockedCount = 0; for (SignalRecipient *rec in recipients) { // We don't need to send the message to ourselves... - if ([[rec uniqueId] isEqualToString:[TSStorageManager localNumber]]) { + if ([rec.uniqueId isEqualToString:[TSStorageManager localNumber]]) { continue; } // ...or to anyone on our blocklist... - OWSAssert([rec uniqueId].length > 0); - if ([blockedPhoneNumbers containsObject:[rec uniqueId]]) { - DDLogInfo(@"%@ skipping group send to blocked contact: %@", self.tag, [rec uniqueId]); + OWSAssert(rec.uniqueId.length > 0); + if ([blockedPhoneNumbers containsObject:rec.uniqueId]) { + DDLogInfo(@"%@ skipping group send to blocked contact: %@", self.tag, rec.uniqueId); blockedCount++; continue; } diff --git a/src/Messages/TSMessagesManager.m b/src/Messages/TSMessagesManager.m index bc0bbf206..ddb643a6f 100644 --- a/src/Messages/TSMessagesManager.m +++ b/src/Messages/TSMessagesManager.m @@ -10,6 +10,7 @@ #import "NSDate+millisecondTimeStamp.h" #import "NotificationsProtocol.h" #import "OWSAttachmentsProcessor.h" +#import "OWSBlockingManager.h" #import "OWSCallMessageHandler.h" #import "OWSDisappearingConfigurationUpdateInfoMessage.h" #import "OWSDisappearingMessagesConfiguration.h" @@ -24,7 +25,6 @@ #import "OWSSyncGroupsMessage.h" #import "TSAccountManager.h" #import "TSAttachmentStream.h" -#import "TSBlockingManager.h" #import "TSCall.h" #import "TSContactThread.h" #import "TSDatabaseView.h" @@ -49,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) OWSMessageSender *messageSender; @property (nonatomic, readonly) OWSDisappearingMessagesJob *disappearingMessagesJob; @property (nonatomic, readonly) OWSIncomingMessageFinder *incomingMessageFinder; -@property (nonatomic, readonly) TSBlockingManager *blockingManager; +@property (nonatomic, readonly) OWSBlockingManager *blockingManager; @end @@ -104,7 +104,7 @@ NS_ASSUME_NONNULL_BEGIN _dbConnection = storageManager.newDatabaseConnection; _disappearingMessagesJob = [[OWSDisappearingMessagesJob alloc] initWithStorageManager:storageManager]; _incomingMessageFinder = [[OWSIncomingMessageFinder alloc] initWithDatabase:storageManager.database]; - _blockingManager = [TSBlockingManager sharedManager]; + _blockingManager = [OWSBlockingManager sharedManager]; OWSSingletonAssert(); @@ -158,7 +158,6 @@ NS_ASSUME_NONNULL_BEGIN DDLogInfo(@"%@ received envelope: %@", self.tag, [self descriptionForEnvelope:envelope]); - // TODO: Can we trust envelope.source to be properly formatted? OWSAssert(envelope.source.length > 0); BOOL isEnvelopeBlocked = [_blockingManager.blockedPhoneNumbers containsObject:envelope.source]; if (isEnvelopeBlocked) {