Auth requests using UUID

This commit is contained in:
Nora Trapp 2019-07-10 21:23:28 -07:00
parent 27cf3ab5a3
commit 1392d43a5d
4 changed files with 23 additions and 9 deletions

View File

@ -125,11 +125,11 @@ public class AccountManager: NSObject {
}
Logger.debug("registering with signal server")
var pendingUuid: UUID?
let registrationPromise: Promise<Void> = firstly { () -> Promise<UUID?> in
self.registerForTextSecure(verificationCode: verificationCode, pin: pin)
}.then { (uuid: UUID?) -> Promise<Void> 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

View File

@ -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

View File

@ -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];

View File

@ -8,6 +8,7 @@
#import <SignalCoreKit/NSData+OWS.h>
#import <SignalMetadataKit/SignalMetadataKit-Swift.h>
#import <SignalServiceKit/SSKEnvironment.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
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);
}
}