diff --git a/SignalServiceKit/src/Account/TSAccountManager.m b/SignalServiceKit/src/Account/TSAccountManager.m index a686407f1..da57b972c 100644 --- a/SignalServiceKit/src/Account/TSAccountManager.m +++ b/SignalServiceKit/src/Account/TSAccountManager.m @@ -14,6 +14,7 @@ #import "TSNetworkManager.h" #import "TSPreKeyManager.h" #import "TSStorageManager+SessionStore.h" +#import "TSVerifyCodeRequest.h" #import "YapDatabaseConnection+OWS.h" #import diff --git a/SignalServiceKit/src/Account/TSPreKeyManager.m b/SignalServiceKit/src/Account/TSPreKeyManager.m index 11cdf7351..cf3e183f4 100644 --- a/SignalServiceKit/src/Account/TSPreKeyManager.m +++ b/SignalServiceKit/src/Account/TSPreKeyManager.m @@ -9,7 +9,6 @@ #import "OWSIdentityManager.h" #import "OWSRequestFactory.h" #import "TSNetworkManager.h" -#import "TSRegisterSignedPrekeyRequest.h" #import "TSStorageHeaders.h" #import "TSStorageManager+SignedPreKeyStore.h" @@ -161,14 +160,13 @@ static const NSUInteger kMaxPrekeyUpdateFailureCount = 5; // service to prevent race conditions and other edge cases. [storageManager storePreKeyRecords:preKeys]; - request = [[TSRegisterPrekeysRequest alloc] - initWithPrekeyArray:preKeys - identityKey:identityKeyPair.publicKey - signedPreKeyRecord:signedPreKey - preKeyLastResort:lastResortPreKey]; + request = [OWSRequestFactory registerPrekeysRequestWithPrekeyArray:preKeys + identityKey:identityKeyPair.publicKey + signedPreKey:signedPreKey + preKeyLastResort:lastResortPreKey]; } else { description = @"just signed prekey"; - request = [[TSRegisterSignedPrekeyRequest alloc] initWithSignedPreKeyRecord:signedPreKey]; + request = [OWSRequestFactory registerSignedPrekeyRequestWithSignedPreKeyRecord:signedPreKey]; } [[TSNetworkManager sharedManager] makeRequest:request diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 3cd4f8630..7d64c1420 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -998,10 +998,10 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; DDLogWarn(@"%@ Sending a message with no device messages.", self.logTag); } - TSSubmitMessageRequest *request = [[TSSubmitMessageRequest alloc] initWithRecipient:recipient.uniqueId - messages:deviceMessages - relay:recipient.relay - timeStamp:message.timestamp]; + TSRequest *request = [OWSRequestFactory submitMessageRequestWithRecipient:recipient.uniqueId + messages:deviceMessages + relay:recipient.relay + timeStamp:message.timestamp]; [self.networkManager makeRequest:request success:^(NSURLSessionDataTask *task, id responseObject) { if (isLocalNumber && deviceMessages.count == 0) { diff --git a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h index 21dfa9cb2..d73be79c1 100644 --- a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h +++ b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h @@ -5,6 +5,8 @@ NS_ASSUME_NONNULL_BEGIN @class OWSDevice; +@class PreKeyRecord; +@class SignedPreKeyRecord; @class TSRequest; typedef NS_ENUM(NSUInteger, TSVerificationTransport) { TSVerificationTransportVoice = 1, TSVerificationTransportSMS }; @@ -56,6 +58,18 @@ typedef NS_ENUM(NSUInteger, TSVerificationTransport) { TSVerificationTransportVo + (TSRequest *)requestVerificationCodeRequestWithPhoneNumber:(NSString *)phoneNumber transport:(TSVerificationTransport)transport; ++ (TSRequest *)submitMessageRequestWithRecipient:(NSString *)recipientId + messages:(NSArray *)messages + relay:(nullable NSString *)relay + timeStamp:(uint64_t)timeStamp; + ++ (TSRequest *)registerSignedPrekeyRequestWithSignedPreKeyRecord:(SignedPreKeyRecord *)signedPreKey; + ++ (TSRequest *)registerPrekeysRequestWithPrekeyArray:(NSArray *)prekeys + identityKey:(NSData *)identityKeyPublic + signedPreKey:(SignedPreKeyRecord *)signedPreKey + preKeyLastResort:(PreKeyRecord *)preKeyLastResort; + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m index 31a668cb9..83380d738 100644 --- a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m +++ b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m @@ -7,6 +7,8 @@ #import "TSAttributes.h" #import "TSConstants.h" #import "TSRequest.h" +#import +#import #import NS_ASSUME_NONNULL_BEGIN @@ -205,6 +207,80 @@ NS_ASSUME_NONNULL_BEGIN } } ++ (TSRequest *)submitMessageRequestWithRecipient:(NSString *)recipientId + messages:(NSArray *)messages + relay:(nullable NSString *)relay + timeStamp:(uint64_t)timeStamp +{ + OWSAssert(recipientId.length > 0); + OWSAssert(messages.count > 0); + OWSAssert(timeStamp > 0); + + NSString *path = [textSecureMessagesAPI stringByAppendingString:recipientId]; + NSMutableDictionary *parameters = [@{ + @"messages" : messages, + @"timestamp" : @(timeStamp), + } mutableCopy]; + + if (relay) { + parameters[@"relay"] = relay; + } + return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"PUT" parameters:parameters]; +} + ++ (TSRequest *)registerSignedPrekeyRequestWithSignedPreKeyRecord:(SignedPreKeyRecord *)signedPreKey +{ + OWSAssert(signedPreKey); + + NSString *path = textSecureSignedKeysAPI; + return [TSRequest requestWithUrl:[NSURL URLWithString:path] + method:@"PUT" + parameters:[self dictionaryFromSignedPreKey:signedPreKey]]; +} + ++ (TSRequest *)registerPrekeysRequestWithPrekeyArray:(NSArray *)prekeys + identityKey:(NSData *)identityKeyPublic + signedPreKey:(SignedPreKeyRecord *)signedPreKey + preKeyLastResort:(PreKeyRecord *)preKeyLastResort +{ + OWSAssert(prekeys.count > 0); + OWSAssert(identityKeyPublic.length > 0); + OWSAssert(signedPreKey); + OWSAssert(preKeyLastResort); + + NSString *path = textSecureKeysAPI; + NSString *publicIdentityKey = [[identityKeyPublic prependKeyType] base64EncodedStringWithOptions:0]; + NSMutableArray *serializedPrekeyList = [NSMutableArray array]; + for (PreKeyRecord *preKey in prekeys) { + [serializedPrekeyList addObject:[self dictionaryFromPreKey:preKey]]; + } + return [TSRequest requestWithUrl:[NSURL URLWithString:path] + method:@"PUT" + parameters:@{ + @"preKeys" : serializedPrekeyList, + @"lastResortKey" : [self dictionaryFromPreKey:preKeyLastResort], + @"signedPreKey" : [self dictionaryFromSignedPreKey:signedPreKey], + @"identityKey" : publicIdentityKey + }]; +} + ++ (NSDictionary *)dictionaryFromPreKey:(PreKeyRecord *)preKey +{ + return @{ + @"keyId" : @(preKey.Id), + @"publicKey" : [[preKey.keyPair.publicKey prependKeyType] base64EncodedStringWithOptions:0], + }; +} + ++ (NSDictionary *)dictionaryFromSignedPreKey:(SignedPreKeyRecord *)preKey +{ + return @{ + @"keyId" : @(preKey.Id), + @"publicKey" : [[preKey.keyPair.publicKey prependKeyType] base64EncodedStringWithOptions:0], + @"signature" : [preKey.signature base64EncodedStringWithOptions:0] + }; +} + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/TSRegisterPrekeysRequest.h b/SignalServiceKit/src/Network/API/Requests/TSRegisterPrekeysRequest.h deleted file mode 100644 index 960798f96..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSRegisterPrekeysRequest.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// TSRegisterPrekeys.h -// TextSecureiOS -// -// Created by Christine Corbett Moran on 10/17/13. -// Copyright (c) 2013 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" -@class TSECKeyPair; -@class SignedPreKeyRecord; -@class PreKeyRecord; - -@interface TSRegisterPrekeysRequest : TSRequest - -- (id)initWithPrekeyArray:(NSArray *)prekeys - identityKey:(NSData *)identityKeyPublic - signedPreKeyRecord:(SignedPreKeyRecord *)signedRecord - preKeyLastResort:(PreKeyRecord *)lastResort; - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSRegisterPrekeysRequest.m b/SignalServiceKit/src/Network/API/Requests/TSRegisterPrekeysRequest.m deleted file mode 100644 index fec0bb937..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSRegisterPrekeysRequest.m +++ /dev/null @@ -1,60 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import "TSRegisterPrekeysRequest.h" -#import "TSConstants.h" -#import -#import -#import -#import - -@implementation TSRegisterPrekeysRequest - -- (id)initWithPrekeyArray:(NSArray *)prekeys - identityKey:(NSData *)identityKeyPublic - signedPreKeyRecord:(SignedPreKeyRecord *)signedRecord - preKeyLastResort:(PreKeyRecord *)lastResort { - self = [super initWithURL:[NSURL URLWithString:textSecureKeysAPI]]; - if (!self) { - return nil; - } - - self.HTTPMethod = @"PUT"; - - NSString *publicIdentityKey = [[identityKeyPublic prependKeyType] base64EncodedStringWithOptions:0]; - NSMutableArray *serializedPrekeyList = [NSMutableArray array]; - - for (PreKeyRecord *preKey in prekeys) { - [serializedPrekeyList addObject:[self dictionaryFromPreKey:preKey]]; - } - - NSDictionary *serializedKeyRegistrationParameters = @{ - @"preKeys" : serializedPrekeyList, - @"lastResortKey" : [self dictionaryFromPreKey:lastResort], - @"signedPreKey" : [self dictionaryFromSignedPreKey:signedRecord], - @"identityKey" : publicIdentityKey - }; - - self.parameters = [serializedKeyRegistrationParameters mutableCopy]; - - return self; -} - - -- (NSDictionary *)dictionaryFromPreKey:(PreKeyRecord *)preKey { - return @{ - @"keyId" : [NSNumber numberWithInt:preKey.Id], - @"publicKey" : [[preKey.keyPair.publicKey prependKeyType] base64EncodedStringWithOptions:0], - }; -} - -- (NSDictionary *)dictionaryFromSignedPreKey:(SignedPreKeyRecord *)preKey { - return @{ - @"keyId" : [NSNumber numberWithInt:preKey.Id], - @"publicKey" : [[preKey.keyPair.publicKey prependKeyType] base64EncodedStringWithOptions:0], - @"signature" : [preKey.signature base64EncodedStringWithOptions:0] - }; -} - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSRegisterSignedPrekeyRequest.h b/SignalServiceKit/src/Network/API/Requests/TSRegisterSignedPrekeyRequest.h deleted file mode 100644 index 75ee7d44f..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSRegisterSignedPrekeyRequest.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" - -@class SignedPreKeyRecord; -@class PreKeyRecord; - -@interface TSRegisterSignedPrekeyRequest : TSRequest - -- (id)initWithSignedPreKeyRecord:(SignedPreKeyRecord *)signedRecord; - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSRegisterSignedPrekeyRequest.m b/SignalServiceKit/src/Network/API/Requests/TSRegisterSignedPrekeyRequest.m deleted file mode 100644 index caa41437a..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSRegisterSignedPrekeyRequest.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import "TSRegisterSignedPrekeyRequest.h" -#import "TSConstants.h" -#import -#import -#import -#import - -@implementation TSRegisterSignedPrekeyRequest - -- (id)initWithSignedPreKeyRecord:(SignedPreKeyRecord *)signedRecord -{ - self = [super initWithURL:[NSURL URLWithString:textSecureSignedKeysAPI]]; - if (!self) { - return nil; - } - - self.HTTPMethod = @"PUT"; - - NSDictionary *serializedKeyRegistrationParameters = [self dictionaryFromSignedPreKey:signedRecord]; - - self.parameters = [serializedKeyRegistrationParameters mutableCopy]; - - return self; -} - -- (NSDictionary *)dictionaryFromSignedPreKey:(SignedPreKeyRecord *)preKey -{ - return @{ - @"keyId" : [NSNumber numberWithInt:preKey.Id], - @"publicKey" : [[preKey.keyPair.publicKey prependKeyType] base64EncodedStringWithOptions:0], - @"signature" : [preKey.signature base64EncodedStringWithOptions:0] - }; -} - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSSubmitMessageRequest.h b/SignalServiceKit/src/Network/API/Requests/TSSubmitMessageRequest.h deleted file mode 100644 index 5c76afec5..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSSubmitMessageRequest.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// TSSubmitMessageRequest.h -// TextSecureiOS -// -// Created by Christine Corbett Moran on 11/30/13. -// Copyright (c) 2013 Open Whisper Systems. All rights reserved. -// - -#import "TSConstants.h" -#import "TSRequest.h" - -@interface TSSubmitMessageRequest : TSRequest - -- (TSRequest *)initWithRecipient:(NSString *)contactRegisteredID - messages:(NSArray *)messages - relay:(NSString *)relay - timeStamp:(uint64_t)timeStamp; - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSSubmitMessageRequest.m b/SignalServiceKit/src/Network/API/Requests/TSSubmitMessageRequest.m deleted file mode 100644 index 4fa5119ad..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSSubmitMessageRequest.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import "TSSubmitMessageRequest.h" -#import "TSConstants.h" - -@implementation TSSubmitMessageRequest - -- (TSRequest *)initWithRecipient:(NSString *)contactRegisteredID - messages:(NSArray *)messages - relay:(NSString *)relay - timeStamp:(uint64_t)timeStamp { - self = - [super initWithURL:[NSURL URLWithString:[textSecureMessagesAPI stringByAppendingString:contactRegisteredID]]]; - if (!self) { - return nil; - } - - NSMutableDictionary *parameters = [@{ - @"messages" : messages, - @"timestamp" : @(timeStamp), - } mutableCopy]; - - if (relay) { - parameters[@"relay"] = relay; - } - - [self setHTTPMethod:@"PUT"]; - self.parameters = parameters; - return self; -} - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.h b/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.h index 4eb9b2678..60857cf00 100644 --- a/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.h +++ b/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.h @@ -8,14 +8,16 @@ NS_ASSUME_NONNULL_BEGIN @interface TSVerifyCodeRequest : TSRequest +@property (nonatomic, readonly) NSString *numberToValidate; + +- (instancetype)init NS_UNAVAILABLE; + - (TSRequest *)initWithVerificationCode:(NSString *)verificationCode forNumber:(NSString *)phoneNumber pin:(nullable NSString *)pin signalingKey:(NSString *)signalingKey authKey:(NSString *)authKey; -@property (nonatomic, readonly) NSString *numberToValidate; - @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.m b/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.m index cb1c53adc..5875faa19 100644 --- a/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.m +++ b/SignalServiceKit/src/Network/API/Requests/TSVerifyCodeRequest.m @@ -17,6 +17,11 @@ NS_ASSUME_NONNULL_BEGIN signalingKey:(NSString *)signalingKey authKey:(NSString *)authKey { + OWSAssert(verificationCode.length > 0); + OWSAssert(phoneNumber.length > 0); + OWSAssert(signalingKey.length > 0); + OWSAssert(authKey.length > 0); + self = [super initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/code/%@", textSecureAccountsAPI, verificationCode]]]; diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.h b/SignalServiceKit/src/Network/API/TSNetworkManager.h index 4343f1ff3..9ed207a5e 100644 --- a/SignalServiceKit/src/Network/API/TSNetworkManager.h +++ b/SignalServiceKit/src/Network/API/TSNetworkManager.h @@ -2,13 +2,6 @@ // Copyright (c) 2018 Open Whisper Systems. All rights reserved. // -/** - * TSNetworkManager imports all TSRequests to prevent massive imports - in classes that call TSNetworkManager - */ -#import "TSRegisterPrekeysRequest.h" -#import "TSSubmitMessageRequest.h" -#import "TSVerifyCodeRequest.h" #import NS_ASSUME_NONNULL_BEGIN @@ -20,6 +13,8 @@ BOOL IsNSErrorNetworkFailure(NSError *_Nullable error); typedef void (^TSNetworkManagerSuccess)(NSURLSessionDataTask *task, id responseObject); typedef void (^TSNetworkManagerFailure)(NSURLSessionDataTask *task, NSError *error); +@class TSRequest; + @interface TSNetworkManager : NSObject - (instancetype)init NS_UNAVAILABLE; diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.m b/SignalServiceKit/src/Network/API/TSNetworkManager.m index 6c318fde9..eadde3175 100644 --- a/SignalServiceKit/src/Network/API/TSNetworkManager.m +++ b/SignalServiceKit/src/Network/API/TSNetworkManager.m @@ -7,7 +7,6 @@ #import "NSURLSessionDataTask+StatusCode.h" #import "OWSSignalService.h" #import "TSAccountManager.h" -#import "TSSubmitMessageRequest.h" #import "TSVerifyCodeRequest.h" #import