From 004479a2ce93a16bb24cdcfa4ad9cb01a8163799 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 1 Mar 2018 22:29:59 -0500 Subject: [PATCH] Elaborate request factory. --- SignalMessaging/profiles/OWSProfileManager.m | 3 +- .../src/Account/TSPreKeyManager.m | 5 ++- .../src/Contacts/ContactsUpdater.m | 6 +-- .../src/Messages/OWSMessageSender.m | 3 +- .../Network/API/Requests/OWSRequestFactory.h | 10 +++++ .../Network/API/Requests/OWSRequestFactory.m | 39 +++++++++++++++++++ .../Requests/TSAvailablePreKeysCountRequest.h | 13 ------- .../Requests/TSAvailablePreKeysCountRequest.m | 27 ------------- .../Requests/TSContactsIntersectionRequest.h | 15 ------- .../Requests/TSContactsIntersectionRequest.m | 27 ------------- .../Requests/TSCurrentSignedPreKeyRequest.h | 13 ------- .../Requests/TSCurrentSignedPreKeyRequest.m | 22 ----------- .../TSProfileAvatarUploadFormRequest.h | 15 ------- .../TSProfileAvatarUploadFormRequest.m | 23 ----------- .../API/Requests/TSRecipientPrekeyRequest.h | 15 ------- .../API/Requests/TSRecipientPrekeyRequest.m | 26 ------------- .../src/Network/API/TSNetworkManager.h | 9 +---- .../src/Network/API/TSNetworkManager.m | 1 - 18 files changed, 59 insertions(+), 213 deletions(-) delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.h delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.m delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.h delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.m delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.h delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.m delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.h delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.m delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.h delete mode 100644 SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.m diff --git a/SignalMessaging/profiles/OWSProfileManager.m b/SignalMessaging/profiles/OWSProfileManager.m index 90c280a52..8b8bfb815 100644 --- a/SignalMessaging/profiles/OWSProfileManager.m +++ b/SignalMessaging/profiles/OWSProfileManager.m @@ -25,7 +25,6 @@ #import #import #import -#import #import #import #import @@ -364,7 +363,7 @@ const NSUInteger kOWSProfileManager_MaxAvatarDiameter = 640; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // See: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html - TSProfileAvatarUploadFormRequest *formRequest = [TSProfileAvatarUploadFormRequest new]; + TSRequest *formRequest = [OWSRequestFactory profileAvatarUploadFormRequest]; // TODO: Since this form request causes the server to reset my avatar URL, if the update fails // at some point from here on out, we want the user to understand they probably no longer have diff --git a/SignalServiceKit/src/Account/TSPreKeyManager.m b/SignalServiceKit/src/Account/TSPreKeyManager.m index c76239637..11cdf7351 100644 --- a/SignalServiceKit/src/Account/TSPreKeyManager.m +++ b/SignalServiceKit/src/Account/TSPreKeyManager.m @@ -7,6 +7,7 @@ #import "NSDate+OWS.h" #import "NSURLSessionDataTask+StatusCode.h" #import "OWSIdentityManager.h" +#import "OWSRequestFactory.h" #import "TSNetworkManager.h" #import "TSRegisterSignedPrekeyRequest.h" #import "TSStorageHeaders.h" @@ -236,7 +237,7 @@ static const NSUInteger kMaxPrekeyUpdateFailureCount = 5; // one-time keys in this case. // // We do not need a "one-time only" mode. - TSAvailablePreKeysCountRequest *preKeyCountRequest = [[TSAvailablePreKeysCountRequest alloc] init]; + TSRequest *preKeyCountRequest = [OWSRequestFactory availablePreKeysCountRequest]; [[TSNetworkManager sharedManager] makeRequest:preKeyCountRequest success:^(NSURLSessionDataTask *task, NSDictionary *responseObject) { NSString *preKeyCountKey = @"count"; @@ -295,7 +296,7 @@ static const NSUInteger kMaxPrekeyUpdateFailureCount = 5; // If we didn't update the prekeys, our local "current signed key" state should // agree with the service's "current signed key" state. Let's verify that, // since it's closely related to the issues we saw with the 2.7.0.10 release. - TSRequest *currentSignedPreKey = [[TSCurrentSignedPreKeyRequest alloc] init]; + TSRequest *currentSignedPreKey = [OWSRequestFactory currentSignedPreKeyRequest]; [[TSNetworkManager sharedManager] makeRequest:currentSignedPreKey success:^(NSURLSessionDataTask *task, NSDictionary *responseObject) { NSString *keyIdDictKey = @"keyId"; diff --git a/SignalServiceKit/src/Contacts/ContactsUpdater.m b/SignalServiceKit/src/Contacts/ContactsUpdater.m index 5b5a080f4..24a400655 100644 --- a/SignalServiceKit/src/Contacts/ContactsUpdater.m +++ b/SignalServiceKit/src/Contacts/ContactsUpdater.m @@ -1,13 +1,13 @@ // -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. +// Copyright (c) 2018 Open Whisper Systems. All rights reserved. // #import "ContactsUpdater.h" #import "Contact.h" #import "Cryptography.h" #import "OWSError.h" +#import "OWSRequestFactory.h" #import "PhoneNumber.h" -#import "TSContactsIntersectionRequest.h" #import "TSNetworkManager.h" #import "TSStorageManager.h" #import @@ -163,7 +163,7 @@ NS_ASSUME_NONNULL_BEGIN } NSArray *hashes = [phoneNumbersByHashes allKeys]; - TSRequest *request = [[TSContactsIntersectionRequest alloc] initWithHashesArray:hashes]; + TSRequest *request = [OWSRequestFactory contactsIntersectionRequestWithHashesArray:hashes]; [[TSNetworkManager sharedManager] makeRequest:request success:^(NSURLSessionDataTask *tsTask, id responseDict) { NSMutableDictionary *attributesForIdentifier = [NSMutableDictionary dictionary]; diff --git a/SignalServiceKit/src/Messages/OWSMessageSender.m b/SignalServiceKit/src/Messages/OWSMessageSender.m index 498f59549..3cd4f8630 100644 --- a/SignalServiceKit/src/Messages/OWSMessageSender.m +++ b/SignalServiceKit/src/Messages/OWSMessageSender.m @@ -16,6 +16,7 @@ #import "OWSMessageServiceParams.h" #import "OWSOutgoingSentMessageTranscript.h" #import "OWSOutgoingSyncMessage.h" +#import "OWSRequestFactory.h" #import "OWSUploadingService.h" #import "PreKeyBundle+jsonDict.h" #import "SignalRecipient.h" @@ -1339,7 +1340,7 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException"; // are called _off_ the main thread. Otherwise we'll deadlock if the main // thread is blocked on opening a transaction. TSRequest *request = - [[TSRecipientPrekeyRequest alloc] initWithRecipient:identifier deviceId:[deviceNumber stringValue]]; + [OWSRequestFactory recipientPrekeyRequestWithRecipient:identifier deviceId:[deviceNumber stringValue]]; [self.networkManager makeRequest:request completionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) success:^(NSURLSessionDataTask *task, id responseObject) { diff --git a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h index 3c0bb34da..7ae7d6781 100644 --- a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h +++ b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.h @@ -35,6 +35,16 @@ NS_ASSUME_NONNULL_BEGIN + (TSRequest *)attachmentRequestWithAttachmentId:(UInt64)attachmentId relay:(nullable NSString *)relay; ++ (TSRequest *)availablePreKeysCountRequest; + ++ (TSRequest *)contactsIntersectionRequestWithHashesArray:(NSArray *)hashes; + ++ (TSRequest *)currentSignedPreKeyRequest; + ++ (TSRequest *)profileAvatarUploadFormRequest; + ++ (TSRequest *)recipientPrekeyRequestWithRecipient:(NSString *)recipientNumber deviceId:(NSString *)deviceId; + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m index 3f14194b3..c914e8ab5 100644 --- a/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m +++ b/SignalServiceKit/src/Network/API/Requests/OWSRequestFactory.m @@ -112,6 +112,45 @@ NS_ASSUME_NONNULL_BEGIN return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"GET" parameters:@{}]; } ++ (TSRequest *)availablePreKeysCountRequest +{ + NSString *path = [NSString stringWithFormat:@"%@", textSecureKeysAPI]; + return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"GET" parameters:@{}]; +} + ++ (TSRequest *)contactsIntersectionRequestWithHashesArray:(NSArray *)hashes +{ + OWSAssert(hashes.count > 0); + + NSString *path = [NSString stringWithFormat:@"%@/%@", textSecureDirectoryAPI, @"tokens"]; + return [TSRequest requestWithUrl:[NSURL URLWithString:path] + method:@"PUT" + parameters:@{ + @"contacts" : hashes, + }]; +} + ++ (TSRequest *)currentSignedPreKeyRequest +{ + NSString *path = textSecureSignedKeysAPI; + return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"GET" parameters:@{}]; +} + ++ (TSRequest *)profileAvatarUploadFormRequest +{ + NSString *path = textSecureProfileAvatarFormAPI; + return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"GET" parameters:@{}]; +} + ++ (TSRequest *)recipientPrekeyRequestWithRecipient:(NSString *)recipientNumber deviceId:(NSString *)deviceId +{ + OWSAssert(recipientNumber.length > 0); + OWSAssert(deviceId.length > 0); + + NSString *path = [NSString stringWithFormat:@"%@/%@/%@", textSecureKeysAPI, recipientNumber, deviceId]; + return [TSRequest requestWithUrl:[NSURL URLWithString:path] method:@"GET" parameters:@{}]; +} + @end NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.h b/SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.h deleted file mode 100644 index 64b2a2857..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// TSAvailablePreKeysCountRequest.h -// Signal -// -// Created by Frederic Jacobs on 27/01/15. -// Copyright (c) 2015 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" - -@interface TSAvailablePreKeysCountRequest : TSRequest - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.m b/SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.m deleted file mode 100644 index e10e308d8..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSAvailablePreKeysCountRequest.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// TSAvailablePreKeysCountRequest.m -// Signal -// -// Created by Frederic Jacobs on 27/01/15. -// Copyright (c) 2015 Open Whisper Systems. All rights reserved. -// - -#import "TSAvailablePreKeysCountRequest.h" - -#import "TSConstants.h" - -@implementation TSAvailablePreKeysCountRequest - -- (instancetype)init { - NSString *path = [NSString stringWithFormat:@"%@", textSecureKeysAPI]; - - self = [super initWithURL:[NSURL URLWithString:path]]; - - if (self) { - [self setHTTPMethod:@"GET"]; - } - - return self; -} - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.h b/SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.h deleted file mode 100644 index bc1c80484..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// TSContactsIntersection.h -// TextSecureiOS -// -// Created by Frederic Jacobs on 10/12/13. -// Copyright (c) 2013 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" - -@interface TSContactsIntersectionRequest : TSRequest - -- (id)initWithHashesArray:(NSArray *)hashes; - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.m b/SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.m deleted file mode 100644 index 13c728238..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSContactsIntersectionRequest.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import "TSContactsIntersectionRequest.h" -#import "TSConstants.h" - -@implementation TSContactsIntersectionRequest - -- (id)initWithHashesArray:(NSArray *)hashes { - self = [self - initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", textSecureDirectoryAPI, @"tokens"]]]; - - if (!self) { - return nil; - } - - self.HTTPMethod = @"PUT"; - - self.parameters = @{ - @"contacts" : hashes, - }; - - return self; -} - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.h b/SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.h deleted file mode 100644 index 982f3443d..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// TSCurrentSignedPreKeyRequest.h -// Signal -// -// Created by Frederic Jacobs on 27/01/15. -// Copyright (c) 2015 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" - -@interface TSCurrentSignedPreKeyRequest : TSRequest - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.m b/SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.m deleted file mode 100644 index a6a9b525b..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSCurrentSignedPreKeyRequest.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// TSCurrentSignedPreKeyRequest.m -// Signal -// -// Created by Frederic Jacobs on 27/01/15. -// Copyright (c) 2015 Open Whisper Systems. All rights reserved. -// - -#import "TSConstants.h" -#import "TSCurrentSignedPreKeyRequest.h" - -@implementation TSCurrentSignedPreKeyRequest - -- (instancetype)init { - self = [super initWithURL:[NSURL URLWithString:textSecureSignedKeysAPI]]; - - self.HTTPMethod = @"GET"; - - return self; -} - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.h b/SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.h deleted file mode 100644 index 8a32f12cd..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface TSProfileAvatarUploadFormRequest : TSRequest - -- (instancetype)init; - -@end - -NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.m b/SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.m deleted file mode 100644 index 0b0972a46..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSProfileAvatarUploadFormRequest.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// Copyright (c) 2017 Open Whisper Systems. All rights reserved. -// - -#import "TSProfileAvatarUploadFormRequest.h" -#import "TSConstants.h" - -NS_ASSUME_NONNULL_BEGIN - -@implementation TSProfileAvatarUploadFormRequest - -- (instancetype)init -{ - self = [super initWithURL:[NSURL URLWithString:textSecureProfileAvatarFormAPI]]; - - self.HTTPMethod = @"GET"; - - return self; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.h b/SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.h deleted file mode 100644 index 88d279ebc..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// TSGetRecipientPrekey.h -// TextSecureiOS -// -// Created by Christine Corbett Moran on 11/30/13. -// Copyright (c) 2013 Open Whisper Systems. All rights reserved. -// - -#import "TSRequest.h" -@class TSContact; -@interface TSRecipientPrekeyRequest : TSRequest - -- (TSRequest *)initWithRecipient:(NSString *)recipientNumber deviceId:(NSString *)deviceId; - -@end diff --git a/SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.m b/SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.m deleted file mode 100644 index 813956e14..000000000 --- a/SignalServiceKit/src/Network/API/Requests/TSRecipientPrekeyRequest.m +++ /dev/null @@ -1,26 +0,0 @@ -// -// Copyright (c) 2018 Open Whisper Systems. All rights reserved. -// - -#import "TSRecipientPrekeyRequest.h" -#import "TSConstants.h" - -@implementation TSRecipientPrekeyRequest - -- (TSRequest *)initWithRecipient:(NSString *)recipientNumber deviceId:(NSString *)deviceId { - self = [super - initWithURL:[NSURL - URLWithString:[NSString - stringWithFormat:@"%@/%@/%@", textSecureKeysAPI, recipientNumber, deviceId]]]; - - if (!self) { - return nil; - } - - self.HTTPMethod = @"GET"; - self.parameters = nil; - - return self; -} - -@end diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.h b/SignalServiceKit/src/Network/API/TSNetworkManager.h index 54329854e..f312b3227 100644 --- a/SignalServiceKit/src/Network/API/TSNetworkManager.h +++ b/SignalServiceKit/src/Network/API/TSNetworkManager.h @@ -6,10 +6,6 @@ * TSNetworkManager imports all TSRequests to prevent massive imports in classes that call TSNetworkManager */ -#import "TSAvailablePreKeysCountRequest.h" -#import "TSContactsIntersectionRequest.h" -#import "TSCurrentSignedPreKeyRequest.h" -#import "TSRecipientPrekeyRequest.h" #import "TSRegisterForPushRequest.h" #import "TSRegisterPrekeysRequest.h" #import "TSRequestVerificationCodeRequest.h" @@ -41,10 +37,7 @@ typedef void (^TSNetworkManagerFailure)(NSURLSessionDataTask *task, NSError *err - (void)makeRequest:(TSRequest *)request completionQueue:(dispatch_queue_t)completionQueue success:(TSNetworkManagerSuccess)success - failure:(TSNetworkManagerFailure)failure NS_SWIFT_NAME(makeRequest(_:shouldCompleteOnMainQueue -:success -:failure -:)); + failure:(TSNetworkManagerFailure)failure NS_SWIFT_NAME(makeRequest(_:shouldCompleteOnMainQueue:success:failure:)); @end diff --git a/SignalServiceKit/src/Network/API/TSNetworkManager.m b/SignalServiceKit/src/Network/API/TSNetworkManager.m index 048e0797b..684379c75 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 "TSRecipientPrekeyRequest.h" #import "TSSubmitMessageRequest.h" #import "TSVerifyCodeRequest.h" #import