Only access localNumber on AccountManager and cache it

// FREEBIE
pull/1/head
Michael Kirk 7 years ago
parent e0aae5058d
commit 8a4712bf4c

@ -9,7 +9,6 @@
#import "Signal-Swift.h"
#import "TSAttachmentStream.h"
#import "TSMessagesManager.h"
#import "TSStorageManager+keyingMaterial.h"
#import "UIColor+JSQMessages.h"
#import "UIColor+OWS.h"
#import "UIDevice+TSHardwareVersion.h"

@ -86,7 +86,6 @@
#import <SignalServiceKit/TSSocketManager.h>
#import <SignalServiceKit/TSStorageManager+Calling.h>
#import <SignalServiceKit/TSStorageManager+SessionStore.h>
#import <SignalServiceKit/TSStorageManager+keyingMaterial.h>
#import <SignalServiceKit/TSThread.h>
#import <WebRTC/RTCAudioSession.h>
#import <WebRTC/RTCCameraPreviewView.h>

@ -13,7 +13,6 @@
#import <SignalServiceKit/OWSError.h>
#import <SignalServiceKit/TSAccountManager.h>
#import <SignalServiceKit/TSNetworkManager.h>
#import <SignalServiceKit/TSStorageManager+keyingMaterial.h>
NS_ASSUME_NONNULL_BEGIN

@ -17,9 +17,9 @@
#import <SignalServiceKit/OWSFingerprint.h>
#import <SignalServiceKit/OWSFingerprintBuilder.h>
#import <SignalServiceKit/OWSIdentityManager.h>
#import <SignalServiceKit/TSAccountManager.h>
#import <SignalServiceKit/TSInfoMessage.h>
#import <SignalServiceKit/TSStorageManager+SessionStore.h>
#import <SignalServiceKit/TSStorageManager+keyingMaterial.h>
NS_ASSUME_NONNULL_BEGIN
@ -74,7 +74,7 @@ typedef void (^CustomLayoutBlock)();
@property (nonatomic) NSString *recipientId;
@property (nonatomic) NSData *identityKey;
@property (nonatomic) TSStorageManager *storageManager;
@property (nonatomic) TSAccountManager *accountManager;
@property (nonatomic) OWSFingerprint *fingerprint;
@property (nonatomic) NSString *contactName;
@ -118,6 +118,8 @@ typedef void (^CustomLayoutBlock)();
return self;
}
_accountManager = [TSAccountManager sharedInstance];
[self observeNotifications];
return self;
@ -142,8 +144,6 @@ typedef void (^CustomLayoutBlock)();
self.recipientId = recipientId;
self.storageManager = [TSStorageManager sharedManager];
OWSContactsManager *contactsManager = [Environment getCurrent].contactsManager;
self.contactName = [contactsManager displayNameForPhoneIdentifier:recipientId];
@ -155,7 +155,7 @@ typedef void (^CustomLayoutBlock)();
self.identityKey = recipientIdentity.identityKey;
OWSFingerprintBuilder *builder =
[[OWSFingerprintBuilder alloc] initWithStorageManager:self.storageManager contactsManager:contactsManager];
[[OWSFingerprintBuilder alloc] initWithAccountManager:self.accountManager contactsManager:contactsManager];
self.fingerprint =
[builder fingerprintWithTheirSignalId:recipientId theirIdentityKey:recipientIdentity.identityKey];
}

@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface FingerprintViewScanController () <OWSQRScannerDelegate>
@property (nonatomic) TSStorageManager *storageManager;
@property (nonatomic) TSAccountManager *accountManager;
@property (nonatomic) NSString *recipientId;
@property (nonatomic) NSData *identityKey;
@property (nonatomic) OWSFingerprint *fingerprint;
@ -39,8 +39,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssert(recipientId.length > 0);
self.recipientId = recipientId;
self.storageManager = [TSStorageManager sharedManager];
self.accountManager = [TSAccountManager sharedInstance];
OWSContactsManager *contactsManager = [Environment getCurrent].contactsManager;
self.contactName = [contactsManager displayNameForPhoneIdentifier:recipientId];
@ -53,7 +52,7 @@ NS_ASSUME_NONNULL_BEGIN
self.identityKey = recipientIdentity.identityKey;
OWSFingerprintBuilder *builder =
[[OWSFingerprintBuilder alloc] initWithStorageManager:self.storageManager contactsManager:contactsManager];
[[OWSFingerprintBuilder alloc] initWithAccountManager:self.accountManager contactsManager:contactsManager];
self.fingerprint =
[builder fingerprintWithTheirSignalId:recipientId theirIdentityKey:recipientIdentity.identityKey];
}

@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic) NSArray<NSNumber *> *disappearingMessagesDurations;
@property (nonatomic) OWSDisappearingMessagesConfiguration *disappearingMessagesConfiguration;
@property (nonatomic, readonly) TSStorageManager *storageManager;
@property (nonatomic, readonly) TSAccountManager *accountManager;
@property (nonatomic, readonly) OWSContactsManager *contactsManager;
@property (nonatomic, readonly) OWSMessageSender *messageSender;
@property (nonatomic, readonly) OWSBlockingManager *blockingManager;
@ -93,7 +93,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)commonInit
{
_storageManager = [TSStorageManager sharedManager];
_accountManager = [TSAccountManager sharedInstance];
_contactsManager = [Environment getCurrent].contactsManager;
_messageSender = [Environment getCurrent].messageSender;
_blockingManager = [OWSBlockingManager sharedManager];
@ -925,7 +925,7 @@ NS_ASSUME_NONNULL_BEGIN
}];
NSMutableArray *newGroupMemberIds = [NSMutableArray arrayWithArray:gThread.groupModel.groupMemberIds];
[newGroupMemberIds removeObject:[self.storageManager localNumber]];
[newGroupMemberIds removeObject:[self.accountManager localNumber]];
gThread.groupModel.groupMemberIds = newGroupMemberIds;
[gThread save];

@ -8,7 +8,7 @@
#import <SignalServiceKit/ECKeyPair+OWSPrivateKey.h>
#import <SignalServiceKit/OWSDeviceProvisioner.h>
#import <SignalServiceKit/OWSIdentityManager.h>
#import <SignalServiceKit/TSStorageManager+keyingMaterial.h>
#import <SignalServiceKit/TSAccountManager.h>
NS_ASSUME_NONNULL_BEGIN
@ -131,7 +131,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSAssert(identityKeyPair);
NSData *myPublicKey = identityKeyPair.publicKey;
NSData *myPrivateKey = identityKeyPair.ows_privateKey;
NSString *accountIdentifier = [TSStorageManager localNumber];
NSString *accountIdentifier = [TSAccountManager localNumber];
OWSDeviceProvisioner *provisioner = [[OWSDeviceProvisioner alloc] initWithMyPublicKey:myPublicKey
myPrivateKey:myPrivateKey

@ -22,7 +22,7 @@ extern NSString *const kNSNotificationName_LocalNumberDidChange;
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
storageManager:(TSStorageManager *)storageManager;
storageManager:(TSStorageManager *)storageManager NS_DESIGNATED_INITIALIZER;
+ (instancetype)sharedInstance;
@ -43,6 +43,7 @@ extern NSString *const kNSNotificationName_LocalNumberDidChange;
* @return E164 formatted phone number
*/
+ (nullable NSString *)localNumber;
- (nullable NSString *)localNumber;
/**
* The registration ID is unique to an installation of TextSecure, it allows to know if the app was reinstalled

@ -23,12 +23,39 @@ NSString *const kNSNotificationName_LocalNumberDidChange = @"kNSNotificationName
@interface TSAccountManager ()
@property (nonatomic, nullable) NSString *phoneNumberAwaitingVerification;
@property (nonatomic, nullable) NSString *cachedLocalNumber;
@property (nonatomic, readonly) TSStorageManager *storageManager;
@end
#pragma mark -
@interface TSStorageManager (TSAccountManagerStorage)
/**
* Stored registered phone number
*
* @return E164 string of the registered phone number
*/
+ (nullable NSString *)localNumber;
- (nullable NSString *)localNumber;
@end
@implementation TSStorageManager (TSAccountManagerStorage)
+ (nullable NSString *)localNumber
{
return [[self sharedManager] localNumber];
}
- (nullable NSString *)localNumber
{
return [self stringForKey:TSStorageRegisteredNumberKey inCollection:TSStorageUserAccountCollection];
}
@end
@implementation TSAccountManager
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
@ -95,13 +122,25 @@ NSString *const kNSNotificationName_LocalNumberDidChange = @"kNSNotificationName
+ (nullable NSString *)localNumber
{
TSAccountManager *sharedManager = [self sharedInstance];
NSString *awaitingVerif = sharedManager.phoneNumberAwaitingVerification;
return [[self sharedInstance] localNumber];
}
- (nullable NSString *)localNumber
{
NSString *awaitingVerif = self.phoneNumberAwaitingVerification;
if (awaitingVerif) {
return awaitingVerif;
}
return [TSStorageManager localNumber];
// Cache this since we access this a lot, and once set it will not change.
@synchronized(self)
{
if (self.cachedLocalNumber == nil) {
self.cachedLocalNumber = [TSStorageManager localNumber];
}
}
return self.cachedLocalNumber;
}
+ (uint32_t)getOrGenerateRegistrationId {

@ -3,9 +3,8 @@
//
#import "TSAttributes.h"
#import "TSAccountManager.h"
#import "TSStorageHeaders.h"
#import "TSStorageManager+keyingMaterial.h"
@implementation TSAttributes

@ -4,7 +4,8 @@
#import "SignalRecipient.h"
#import "OWSIdentityManager.h"
#import "TSStorageHeaders.h"
#import "TSAccountManager.h"
#import <YapDatabase/YapDatabaseConnection.h>
NS_ASSUME_NONNULL_BEGIN
@ -45,10 +46,9 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)selfRecipient
{
SignalRecipient *myself = [self recipientWithTextSecureIdentifier:[TSStorageManager localNumber]];
SignalRecipient *myself = [self recipientWithTextSecureIdentifier:[TSAccountManager localNumber]];
if (!myself) {
myself = [[self alloc] initWithTextSecureIdentifier:[TSStorageManager localNumber]
relay:nil];
myself = [[self alloc] initWithTextSecureIdentifier:[TSAccountManager localNumber] relay:nil];
}
return myself;
}

@ -15,7 +15,6 @@
#import "TSContactThread.h"
#import "TSErrorMessage.h"
#import "TSGroupThread.h"
#import "TSStorageManager+keyingMaterial.h"
#import "TSStorageManager+sessionStore.h"
#import "TSStorageManager.h"
#import "TextSecureKitEnv.h"
@ -326,7 +325,7 @@ NSString *const kNSNotificationName_IdentityStateDidChange = @"kNSNotificationNa
@synchronized(self)
{
if ([[self.storageManager localNumber] isEqualToString:recipientId]) {
if ([[TSAccountManager localNumber] isEqualToString:recipientId]) {
if ([[self identityKeyPair].publicKey isEqualToData:identityKey]) {
return YES;
} else {

@ -30,7 +30,6 @@
#import "TSPreKeyManager.h"
#import "TSStorageManager+PreKeyStore.h"
#import "TSStorageManager+SignedPreKeyStore.h"
#import "TSStorageManager+keyingMaterial.h"
#import "TSStorageManager+sessionStore.h"
#import "TSStorageManager.h"
#import "TSThread.h"
@ -623,7 +622,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
|| [message isKindOfClass:[OWSOutgoingSyncMessage class]]) {
TSContactThread *contactThread = (TSContactThread *)thread;
if ([contactThread.contactIdentifier isEqualToString:self.storageManager.localNumber]
if ([contactThread.contactIdentifier isEqualToString:[TSAccountManager localNumber]]
&& ![message isKindOfClass:[OWSOutgoingSyncMessage class]]) {
[self handleSendToMyself:message];
@ -632,7 +631,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
}
NSString *recipientContactId = [message isKindOfClass:[OWSOutgoingSyncMessage class]]
? self.storageManager.localNumber
? [TSAccountManager localNumber]
: contactThread.contactIdentifier;
// If we block a user, don't send 1:1 messages to them. The UI
@ -734,7 +733,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
NSString *recipientId = recipient.recipientId;
// We don't need to send the message to ourselves...
if ([recipientId isEqualToString:[TSStorageManager localNumber]]) {
if ([recipientId isEqualToString:[TSAccountManager localNumber]]) {
continue;
}
// We don't need to sent the message to all group members if

@ -476,10 +476,9 @@ NSString *const kNSNotification_SocketManagerStateDidChange = @"kNSNotification_
}
- (NSString *)webSocketAuthenticationString {
return [NSString
stringWithFormat:@"?login=%@&password=%@",
[[TSStorageManager localNumber] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"],
[TSStorageManager serverAuthToken]];
return [NSString stringWithFormat:@"?login=%@&password=%@",
[[TSAccountManager localNumber] stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"],
[TSStorageManager serverAuthToken]];
}
#pragma mark - Socket LifeCycle

@ -4,14 +4,14 @@
NS_ASSUME_NONNULL_BEGIN
@class TSStorageManager;
@class TSAccountManager;
@class OWSFingerprint;
@protocol ContactsManagerProtocol;
@interface OWSFingerprintBuilder : NSObject
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithStorageManager:(TSStorageManager *)storageManager
- (instancetype)initWithAccountManager:(TSAccountManager *)accountManager
contactsManager:(id<ContactsManagerProtocol>)contactsManager NS_DESIGNATED_INITIALIZER;
/**

@ -6,21 +6,21 @@
#import "ContactsManagerProtocol.h"
#import "OWSFingerprint.h"
#import "OWSIdentityManager.h"
#import "TSStorageManager+keyingMaterial.h"
#import "TSAccountManager.h"
#import <25519/Curve25519.h>
NS_ASSUME_NONNULL_BEGIN
@interface OWSFingerprintBuilder ()
@property (nonatomic, readonly) TSStorageManager *storageManager;
@property (nonatomic, readonly) TSAccountManager *accountManager;
@property (nonatomic, readonly) id<ContactsManagerProtocol> contactsManager;
@end
@implementation OWSFingerprintBuilder
- (instancetype)initWithStorageManager:(TSStorageManager *)storageManager
- (instancetype)initWithAccountManager:(TSAccountManager *)accountManager
contactsManager:(id<ContactsManagerProtocol>)contactsManager
{
self = [super init];
@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
_storageManager = storageManager;
_accountManager = accountManager;
_contactsManager = contactsManager;
return self;
@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
{
NSString *theirName = [self.contactsManager displayNameForPhoneIdentifier:theirSignalId];
NSString *mySignalId = [self.storageManager localNumber];
NSString *mySignalId = [self.accountManager localNumber];
NSData *myIdentityKey = [[OWSIdentityManager sharedManager] identityKeyPair].publicKey;
return [OWSFingerprint fingerprintWithMyStableId:mySignalId

@ -12,7 +12,6 @@
#import "TSStorageManager+SessionStore.h"
#import "TSStorageManager+SignedPreKeyStore.h"
#import "TSStorageManager+keyFromIntLong.h"
#import "TSStorageManager+keyingMaterial.h"
#import "TSStorageManager+messageIDs.h"
#endif

@ -1,9 +1,5 @@
//
// TSStorageManager+keyingMaterial.h
// TextSecureKit
//
// Created by Frederic Jacobs on 06/11/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "TSStorageManager.h"
@ -28,14 +24,6 @@
+ (NSString *)serverAuthToken;
/**
* Registered phone number
*
* @return E164 string of the registered phone number
*/
- (NSString *)localNumber;
+ (NSString *)localNumber;
- (void)ifLocalNumberPresent:(BOOL)isPresent runAsync:(void (^)())block;
+ (void)storeServerToken:(NSString *)authToken signalingKey:(NSString *)signalingKey;

@ -6,17 +6,6 @@
@implementation TSStorageManager (keyingMaterial)
+ (NSString *)localNumber
{
return [[self sharedManager] localNumber];
}
- (NSString *)localNumber
{
// TODO cache this? It only changes once, ever, and otherwise causes "surprising" transactions to occur.
return [self stringForKey:TSStorageRegisteredNumberKey inCollection:TSStorageUserAccountCollection];
}
- (void)ifLocalNumberPresent:(BOOL)runIfPresent runAsync:(void (^)())block;
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

Loading…
Cancel
Save