From 1392d43a5d37fc3bdc19b783b587e5c753e56959 Mon Sep 17 00:00:00 2001 From: Nora Trapp Date: Wed, 10 Jul 2019 21:23:28 -0700 Subject: [PATCH] Auth requests using UUID --- Signal/src/Models/AccountManager.swift | 11 +++++------ SignalServiceKit/src/Account/TSAccountManager.h | 3 ++- SignalServiceKit/src/Account/TSAccountManager.m | 15 ++++++++++++++- .../src/Network/API/Requests/TSRequest.m | 3 ++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/Signal/src/Models/AccountManager.swift b/Signal/src/Models/AccountManager.swift index 83df3232d3..8be2b9b1b7 100644 --- a/Signal/src/Models/AccountManager.swift +++ b/Signal/src/Models/AccountManager.swift @@ -125,11 +125,11 @@ public class AccountManager: NSObject { } Logger.debug("registering with signal server") - var pendingUuid: UUID? let registrationPromise: Promise = firstly { () -> Promise in self.registerForTextSecure(verificationCode: verificationCode, pin: pin) }.then { (uuid: UUID?) -> Promise in - pendingUuid = uuid + assert(!FeatureFlags.allowUUIDOnlyContacts || uuid != nil) + TSAccountManager.sharedInstance().uuidAwaitingVerification = uuid return self.accountServiceClient.updateAttributes() }.then { self.createPreKeys() @@ -149,8 +149,7 @@ public class AccountManager: NSObject { } } }.done { (_) -> Void in - assert(!FeatureFlags.allowUUIDOnlyContacts || pendingUuid != nil) - self.completeRegistration(uuid: pendingUuid) + self.completeRegistration() } registrationPromise.retainUntilComplete() @@ -204,9 +203,9 @@ public class AccountManager: NSObject { return job.run() } - private func completeRegistration(uuid: UUID?) { + private func completeRegistration() { Logger.info("") - tsAccountManager.didRegister(uuid: uuid) + tsAccountManager.didRegister() } // MARK: Message Delivery diff --git a/SignalServiceKit/src/Account/TSAccountManager.h b/SignalServiceKit/src/Account/TSAccountManager.h index cb8e2f9303..3b50e912fc 100644 --- a/SignalServiceKit/src/Account/TSAccountManager.h +++ b/SignalServiceKit/src/Account/TSAccountManager.h @@ -32,6 +32,7 @@ typedef NS_ENUM(NSUInteger, OWSRegistrationState) { @property (nonatomic, readonly) SDSKeyValueStore *keyValueStore; @property (nonatomic, nullable) NSString *phoneNumberAwaitingVerification; +@property (nonatomic, nullable) NSUUID *uuidAwaitingVerification; #pragma mark - Initializers @@ -94,7 +95,7 @@ typedef NS_ENUM(NSUInteger, OWSRegistrationState) { // - obtained signal server credentials // - uploaded pre-keys // - uploaded push tokens -- (void)didRegisterWithUUID:(nullable NSUUID *)uuid NS_SWIFT_NAME(didRegister(uuid:)); +- (void)didRegister; - (void)recordUuidForLegacyUser:(NSUUID *)uuid NS_SWIFT_NAME(recordUuidForLegacyUser(_:)); #if TARGET_OS_IPHONE diff --git a/SignalServiceKit/src/Account/TSAccountManager.m b/SignalServiceKit/src/Account/TSAccountManager.m index 7de019495e..3a5bde8f19 100644 --- a/SignalServiceKit/src/Account/TSAccountManager.m +++ b/SignalServiceKit/src/Account/TSAccountManager.m @@ -182,15 +182,20 @@ NSString *const TSAccountManager_NeedsAccountAttributesUpdateKey = @"TSAccountMa return self.registrationState == OWSRegistrationState_Registered; } -- (void)didRegisterWithUUID:(nullable NSUUID *)uuid +- (void)didRegister { OWSLogInfo(@"didRegister"); NSString *phoneNumber = self.phoneNumberAwaitingVerification; + NSUUID *uuid = self.uuidAwaitingVerification; if (!phoneNumber) { OWSFail(@"phoneNumber was unexpectedly nil"); } + if (SSKFeatureFlags.allowUUIDOnlyContacts && !uuid) { + OWSFail(@"uuid was unexpectedly nil"); + } + [self.databaseStorage writeWithBlock:^(SDSAnyWriteTransaction *transaction) { [self storeLocalNumber:phoneNumber uuid:uuid transaction:transaction]; }]; @@ -274,6 +279,11 @@ NSString *const TSAccountManager_NeedsAccountAttributesUpdateKey = @"TSAccountMa - (nullable NSUUID *)uuid { + NSUUID *awaitingVerif = self.uuidAwaitingVerification; + if (awaitingVerif) { + return awaitingVerif; + } + // Cache this since we access this a lot, and once set it will not change. @synchronized(self) { if (self.cachedUuid == nil) { @@ -351,6 +361,7 @@ NSString *const TSAccountManager_NeedsAccountAttributesUpdateKey = @"TSAccountMa [self.keyValueStore removeValueForKey:TSAccountManager_ReregisteringPhoneNumberKey transaction:transaction]; self.phoneNumberAwaitingVerification = nil; + self.uuidAwaitingVerification = nil; self.cachedLocalNumber = localNumber; } } @@ -671,6 +682,8 @@ NSString *const TSAccountManager_NeedsAccountAttributesUpdateKey = @"TSAccountMa _isRegistered = NO; _cachedLocalNumber = nil; _phoneNumberAwaitingVerification = nil; + _cachedUuid = nil; + _uuidAwaitingVerification = nil; _cachedIsDeregistered = nil; [self.databaseStorage writeWithBlock:^(SDSAnyWriteTransaction *transaction) { [self.keyValueStore removeAllWithTransaction:transaction]; diff --git a/SignalServiceKit/src/Network/API/Requests/TSRequest.m b/SignalServiceKit/src/Network/API/Requests/TSRequest.m index fe14e167d6..a0769490ca 100644 --- a/SignalServiceKit/src/Network/API/Requests/TSRequest.m +++ b/SignalServiceKit/src/Network/API/Requests/TSRequest.m @@ -8,6 +8,7 @@ #import #import #import +#import NS_ASSUME_NONNULL_BEGIN @@ -109,7 +110,7 @@ NS_ASSUME_NONNULL_BEGIN OWSAssertDebug(self.shouldHaveAuthorizationHeaders); @synchronized(self) { - return (_authUsername ?: [TSAccountManager localNumber]); + return (_authUsername ?: TSAccountManager.sharedInstance.localAddress.serviceIdentifier); } }