Elaborate request factory.

pull/1/head
Matthew Chen 7 years ago
parent 3acdd84398
commit c2f092018c

@ -14,6 +14,7 @@
#import "TSNetworkManager.h"
#import "TSPreKeyManager.h"
#import "TSStorageManager+SessionStore.h"
#import "TSVerifyCodeRequest.h"
#import "YapDatabaseConnection+OWS.h"
#import <YapDatabase/YapDatabase.h>

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

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

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

@ -7,6 +7,8 @@
#import "TSAttributes.h"
#import "TSConstants.h"
#import "TSRequest.h"
#import <AxolotlKit/NSData+keyVersionByte.h>
#import <AxolotlKit/SignedPreKeyRecord.h>
#import <SignalServiceKit/NSData+Base64.h>
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

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

@ -1,60 +0,0 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "TSRegisterPrekeysRequest.h"
#import "TSConstants.h"
#import <AxolotlKit/NSData+keyVersionByte.h>
#import <AxolotlKit/PreKeyRecord.h>
#import <AxolotlKit/SignedPreKeyStore.h>
#import <Curve25519Kit/Curve25519.h>
@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

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

@ -1,39 +0,0 @@
//
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//
#import "TSRegisterSignedPrekeyRequest.h"
#import "TSConstants.h"
#import <AxolotlKit/NSData+keyVersionByte.h>
#import <AxolotlKit/PreKeyRecord.h>
#import <AxolotlKit/SignedPreKeyStore.h>
#import <Curve25519Kit/Curve25519.h>
@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

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

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

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

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

@ -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 <AFNetworking/AFHTTPSessionManager.h>
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;

@ -7,7 +7,6 @@
#import "NSURLSessionDataTask+StatusCode.h"
#import "OWSSignalService.h"
#import "TSAccountManager.h"
#import "TSSubmitMessageRequest.h"
#import "TSVerifyCodeRequest.h"
#import <AFNetworking/AFNetworking.h>

Loading…
Cancel
Save