From 7f239c8040094b9ad951e33ef5a913471205505c Mon Sep 17 00:00:00 2001 From: Michael Kirk Date: Thu, 30 Mar 2017 12:51:48 -0400 Subject: [PATCH] [SSK] + Enforce singleton access for MessagesManager and MessageSender // FREEBIE --- Podfile.lock | 2 +- Signal/src/AppDelegate.m | 18 ++++----- Signal/src/Jobs/MessageFetcherJob.swift | 4 +- Signal/src/environment/Environment.m | 30 +++++++++++++- Signal/src/network/PushManager.m | 40 ++++++------------- .../view controllers/NewGroupViewController.m | 6 +-- ...SConversationSettingsTableViewController.m | 5 +-- 7 files changed, 51 insertions(+), 54 deletions(-) diff --git a/Podfile.lock b/Podfile.lock index a60e5faef..5220d08b0 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -132,7 +132,7 @@ CHECKOUT OPTIONS: :commit: af1946846ab2826fafadb1886a80d1da8632f091 :git: https://github.com/WhisperSystems/SignalProtocolKit.git SignalServiceKit: - :commit: 718164fbe509e902d6dfda9f3c33c0dfc11c5e19 + :commit: bdd0241a94797a65d57b97daf4c0dac39f0ee9dd :git: https://github.com/WhisperSystems/SignalServiceKit.git SocketRocket: :commit: 877ac7438be3ad0b45ef5ca3969574e4b97112bf diff --git a/Signal/src/AppDelegate.m b/Signal/src/AppDelegate.m index 3df25e793..a991ef06d 100644 --- a/Signal/src/AppDelegate.m +++ b/Signal/src/AppDelegate.m @@ -100,8 +100,7 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; // XXX - careful when moving this. It must happen before we initialize TSStorageManager. [self verifyDBKeysAvailableBeforeBackgroundLaunch]; - // Setting up environment - [Environment setCurrent:[Release releaseEnvironment]]; + [self setupEnvironment]; [UIUtil applySignalAppearence]; [[PushManager sharedManager] registerPushKitNotificationFuture]; @@ -114,7 +113,6 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; [Environment.getCurrent.contactsManager doAfterEnvironmentInitSetup]; } - [self setupTSKitEnv]; UIStoryboard *storyboard; if ([TSAccountManager isRegistered]) { @@ -188,27 +186,25 @@ static NSString *const kURLHostVerifyPrefix = @"verify"; return YES; } -- (void)setupTSKitEnv { +- (void)setupEnvironment +{ + [Environment setCurrent:[Release releaseEnvironment]]; + // Encryption/Descryption mutates session state and must be synchronized on a serial queue. [SessionCipher setSessionCipherDispatchQueue:[OWSDispatch sessionCipher]]; TextSecureKitEnv *sharedEnv = [[TextSecureKitEnv alloc] initWithCallMessageHandler:[Environment getCurrent].callMessageHandler contactsManager:[Environment getCurrent].contactsManager + messageSender:[Environment getCurrent].messageSender notificationsManager:[Environment getCurrent].notificationsManager]; [TextSecureKitEnv setSharedEnv:sharedEnv]; [[TSStorageManager sharedManager] setupDatabase]; - OWSMessageSender *messageSender = - [[OWSMessageSender alloc] initWithNetworkManager:[Environment getCurrent].networkManager - storageManager:[TSStorageManager sharedManager] - contactsManager:[Environment getCurrent].contactsManager - contactsUpdater:[Environment getCurrent].contactsUpdater]; - self.incomingMessageReadObserver = [[OWSIncomingMessageReadObserver alloc] initWithStorageManager:[TSStorageManager sharedManager] - messageSender:messageSender]; + messageSender:[Environment getCurrent].messageSender]; [self.incomingMessageReadObserver startObserving]; self.staleNotificationObserver = [OWSStaleNotificationObserver new]; diff --git a/Signal/src/Jobs/MessageFetcherJob.swift b/Signal/src/Jobs/MessageFetcherJob.swift index 2fe0b63c9..d7b06efb0 100644 --- a/Signal/src/Jobs/MessageFetcherJob.swift +++ b/Signal/src/Jobs/MessageFetcherJob.swift @@ -13,15 +13,13 @@ class MessageFetcherJob: NSObject { // MARK: injected dependencies let networkManager: TSNetworkManager let messagesManager: TSMessagesManager - let messageSender: MessageSender let signalService: OWSSignalService var runPromises = [Double: Promise]() - init(messagesManager: TSMessagesManager, messageSender: MessageSender, networkManager: TSNetworkManager, signalService: OWSSignalService) { + init(messagesManager: TSMessagesManager, networkManager: TSNetworkManager, signalService: OWSSignalService) { self.messagesManager = messagesManager self.networkManager = networkManager - self.messageSender = messageSender self.signalService = signalService } diff --git a/Signal/src/environment/Environment.m b/Signal/src/environment/Environment.m index 60dba97d5..76da3d1b1 100644 --- a/Signal/src/environment/Environment.m +++ b/Signal/src/environment/Environment.m @@ -13,8 +13,6 @@ #import "TSGroupThread.h" #import -#define isRegisteredUserDefaultString @"isRegistered" - static Environment *environment = nil; @implementation Environment @@ -22,6 +20,10 @@ static Environment *environment = nil; @synthesize accountManager = _accountManager, callMessageHandler = _callMessageHandler, callService = _callService, + contactsManager = _contactsManager, + contactsUpdater = _contactsUpdater, + messageSender = _messageSender, + networkManager = _networkManager, notificationsManager = _notificationsManager, preferences = _preferences, outboundCallInitiator = _outboundCallInitiator; @@ -114,6 +116,30 @@ static Environment *environment = nil; return _outboundCallInitiator; } +- (OWSContactsManager *)contactsManager +{ + OWSAssert(_contactsManager != nil); + return _contactsManager; +} + +- (ContactsUpdater *)contactsUpdater +{ + OWSAssert(_contactsUpdater != nil); + return _contactsUpdater; +} + +- (TSNetworkManager *)networkManager +{ + OWSAssert(_networkManager != nil); + return _networkManager; +} + +- (OWSMessageSender *)messageSender +{ + OWSAssert(_messageSender != nil); + return _messageSender; +} + - (NotificationsManager *)notificationsManager { @synchronized (self) { diff --git a/Signal/src/network/PushManager.m b/Signal/src/network/PushManager.m index aa3a5a2b0..5fff2fdfb 100644 --- a/Signal/src/network/PushManager.m +++ b/Signal/src/network/PushManager.m @@ -24,7 +24,6 @@ @property UIAlertView *missingPermissionsAlertView; @property (nonatomic, retain) NSMutableArray *currentNotifications; @property (nonatomic) UIBackgroundTaskIdentifier callBackgroundTask; -@property (nonatomic, readonly) OWSContactsManager *contactsManager; @property (nonatomic, readonly) OWSMessageSender *messageSender; @property (nonatomic, readonly) OWSMessageFetcherJob *messageFetcherJob; @property (nonatomic, readonly) CallUIAdapter *callUIAdapter; @@ -44,44 +43,29 @@ - (instancetype)initDefault { - return [self initWithContactsManager:[Environment getCurrent].contactsManager - networkManager:[Environment getCurrent].networkManager - storageManager:[TSStorageManager sharedManager] - callMessageHandler:[Environment getCurrent].callMessageHandler - callService:[Environment getCurrent].callService - contactsUpdater:[Environment getCurrent].contactsUpdater]; + return [self initWithNetworkManager:[Environment getCurrent].networkManager + storageManager:[TSStorageManager sharedManager] + callUIAdapter:[Environment getCurrent].callService.callUIAdapter + messagesManager:[TSMessagesManager sharedManager] + messageSender:[Environment getCurrent].messageSender]; } -- (instancetype)initWithContactsManager:(OWSContactsManager *)contactsManager - networkManager:(TSNetworkManager *)networkManager - storageManager:(TSStorageManager *)storageManager - callMessageHandler:(OWSWebRTCCallMessageHandler *)callMessageHandler - callService:(CallService *)callService - contactsUpdater:(ContactsUpdater *)contactsUpdater +- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager + storageManager:(TSStorageManager *)storageManager + callUIAdapter:(CallUIAdapter *)callUIAdapter + messagesManager:(TSMessagesManager *)messagesManager + messageSender:(OWSMessageSender *)messageSender { self = [super init]; if (!self) { return self; } - _contactsManager = contactsManager; - _callUIAdapter = callService.callUIAdapter; - - _messageSender = [[OWSMessageSender alloc] initWithNetworkManager:networkManager - storageManager:storageManager - contactsManager:contactsManager - contactsUpdater:contactsUpdater]; - - TSMessagesManager *messagesManager = [[TSMessagesManager alloc] initWithNetworkManager:networkManager - storageManager:storageManager - callMessageHandler:callMessageHandler - contactsManager:contactsManager - contactsUpdater:contactsUpdater - messageSender:_messageSender]; + _callUIAdapter = callUIAdapter; + _messageSender = messageSender; OWSSignalService *signalService = [OWSSignalService new]; _messageFetcherJob = [[OWSMessageFetcherJob alloc] initWithMessagesManager:messagesManager - messageSender:_messageSender networkManager:networkManager signalService:signalService]; diff --git a/Signal/src/view controllers/NewGroupViewController.m b/Signal/src/view controllers/NewGroupViewController.m index 75faf6495..a78f3ad2e 100644 --- a/Signal/src/view controllers/NewGroupViewController.m +++ b/Signal/src/view controllers/NewGroupViewController.m @@ -58,11 +58,7 @@ static NSString *const kUnwindToMessagesViewSegue = @"UnwindToMessagesViewSegue" - (void)commonInit { - _messageSender = [[OWSMessageSender alloc] initWithNetworkManager:[Environment getCurrent].networkManager - storageManager:[TSStorageManager sharedManager] - contactsManager:[Environment getCurrent].contactsManager - contactsUpdater:[Environment getCurrent].contactsUpdater]; - + _messageSender = [Environment getCurrent].messageSender; _contactsManager = [Environment getCurrent].contactsManager; [self observeNotifications]; diff --git a/Signal/src/view controllers/OWSConversationSettingsTableViewController.m b/Signal/src/view controllers/OWSConversationSettingsTableViewController.m index 52339bbb6..84db32991 100644 --- a/Signal/src/view controllers/OWSConversationSettingsTableViewController.m +++ b/Signal/src/view controllers/OWSConversationSettingsTableViewController.m @@ -124,10 +124,7 @@ static NSString *const OWSConversationSettingsTableViewControllerSegueShowGroupM { _storageManager = [TSStorageManager sharedManager]; _contactsManager = [Environment getCurrent].contactsManager; - _messageSender = [[OWSMessageSender alloc] initWithNetworkManager:[Environment getCurrent].networkManager - storageManager:_storageManager - contactsManager:_contactsManager - contactsUpdater:[Environment getCurrent].contactsUpdater]; + _messageSender = [Environment getCurrent].messageSender; } - (void)configureWithThread:(TSThread *)thread