Skip to content

Commit 80f27c2

Browse files
committed
Merge pull request #197 from ParsePlatform/nlutsenko.httpsfiles
Add https support for PFFiles.
2 parents 0022df1 + d6ee925 commit 80f27c2

File tree

6 files changed

+87
-14
lines changed

6 files changed

+87
-14
lines changed

Parse/Internal/File/Controller/PFFileController.m

+11-11
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ - (BFTask *)downloadFileAsyncWithState:(PFFileState *)fileState
9797

9898
BFTask *resultTask = [self _fileDownloadResultTaskForFileWithState:fileState];
9999
if (!resultTask) {
100-
NSURL *url = [NSURL URLWithString:fileState.urlString];
100+
NSURL *url = [NSURL URLWithString:fileState.secureURLString];
101101
NSString *temporaryPath = [self _temporaryFileDownloadPathForFileState:fileState];
102102

103103
PFProgressBlock unifyingProgressBlock = [self _fileDownloadUnifyingProgressBlockForFileState:fileState];
@@ -116,13 +116,13 @@ - (BFTask *)downloadFileAsyncWithState:(PFFileState *)fileState
116116
}];
117117
}] continueWithBlock:^id(BFTask *task) {
118118
dispatch_barrier_async(_downloadDataAccessQueue, ^{
119-
[_downloadTasks removeObjectForKey:fileState.urlString];
120-
[_downloadProgressBlocks removeObjectForKey:fileState.urlString];
119+
[_downloadTasks removeObjectForKey:fileState.secureURLString];
120+
[_downloadProgressBlocks removeObjectForKey:fileState.secureURLString];
121121
});
122122
return task;
123123
}];
124124
dispatch_barrier_async(_downloadDataAccessQueue, ^{
125-
_downloadTasks[fileState.urlString] = resultTask;
125+
_downloadTasks[fileState.secureURLString] = resultTask;
126126
});
127127
}
128128
return resultTask;
@@ -152,7 +152,7 @@ - (BFTask *)downloadFileStreamAsyncWithState:(PFFileState *)fileState
152152
- (BFTask *)_fileDownloadResultTaskForFileWithState:(PFFileState *)state {
153153
__block BFTask *resultTask = nil;
154154
dispatch_sync(_downloadDataAccessQueue, ^{
155-
resultTask = _downloadTasks[state.urlString];
155+
resultTask = _downloadTasks[state.secureURLString];
156156
});
157157
return resultTask;
158158
}
@@ -162,7 +162,7 @@ - (PFProgressBlock)_fileDownloadUnifyingProgressBlockForFileState:(PFFileState *
162162
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
163163
__block NSArray *blocks = nil;
164164
dispatch_sync(_downloadDataAccessQueue, ^{
165-
blocks = [_downloadProgressBlocks[fileState.urlString] copy];
165+
blocks = [_downloadProgressBlocks[fileState.secureURLString] copy];
166166
});
167167
if (blocks.count != 0) {
168168
dispatch_async(dispatch_get_main_queue(), ^{
@@ -181,18 +181,18 @@ - (void)_addFileDownloadProgressBlock:(PFProgressBlock)block forFileWithState:(P
181181
}
182182

183183
dispatch_barrier_async(_downloadDataAccessQueue, ^{
184-
NSMutableArray *progressBlocks = _downloadProgressBlocks[state.urlString];
184+
NSMutableArray *progressBlocks = _downloadProgressBlocks[state.secureURLString];
185185
if (!progressBlocks) {
186186
progressBlocks = [NSMutableArray arrayWithObject:block];
187-
_downloadProgressBlocks[state.urlString] = progressBlocks;
187+
_downloadProgressBlocks[state.secureURLString] = progressBlocks;
188188
} else {
189189
[progressBlocks addObject:block];
190190
}
191191
});
192192
}
193193

194194
- (NSString *)_temporaryFileDownloadPathForFileState:(PFFileState *)fileState {
195-
return [NSTemporaryDirectory() stringByAppendingPathComponent:PFMD5HashFromString(fileState.urlString)];
195+
return [NSTemporaryDirectory() stringByAppendingPathComponent:PFMD5HashFromString(fileState.secureURLString)];
196196
}
197197

198198
///--------------------------------------
@@ -242,11 +242,11 @@ - (BFTask *)uploadFileAsyncWithState:(PFFileState *)fileState
242242
///--------------------------------------
243243

244244
- (NSString *)cachedFilePathForFileState:(PFFileState *)fileState {
245-
if (!fileState.urlString) {
245+
if (!fileState.secureURLString) {
246246
return nil;
247247
}
248248

249-
NSString *filename = [fileState.urlString lastPathComponent];
249+
NSString *filename = [fileState.secureURLString lastPathComponent];
250250
NSString *path = [self.cacheFilesDirectoryPath stringByAppendingPathComponent:filename];
251251
return path;
252252
}

Parse/Internal/File/State/PFFileState.h

+2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111

1212
#import "PFBaseState.h"
1313

14+
//TODO: (nlutsenko) Add nullability annotations
1415
@interface PFFileState : PFBaseState <PFBaseStateSubclass, NSCopying, NSMutableCopying>
1516

1617
@property (nonatomic, copy, readonly) NSString *name;
1718
@property (nonatomic, copy, readonly) NSString *urlString;
19+
@property (nonatomic, copy, readonly) NSString *secureURLString;
1820

1921
@property (nonatomic, copy, readonly) NSString *mimeType;
2022

Parse/Internal/File/State/PFFileState.m

+45
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@
1313
#import "PFMutableFileState.h"
1414
#import "PFPropertyInfo.h"
1515

16+
static NSString *const _PFFileStateSecureDomain = @"files.parsetfss.com";
17+
18+
@interface PFFileState ()
19+
20+
@property (nonatomic, copy, readwrite) NSString *secureURLString;
21+
22+
@end
23+
1624
@implementation PFFileState
1725

1826
///--------------------------------------
@@ -46,6 +54,43 @@ - (instancetype)initWithName:(NSString *)name urlString:(NSString *)urlString mi
4654
return self;
4755
}
4856

57+
///--------------------------------------
58+
#pragma mark - Accessors
59+
///--------------------------------------
60+
61+
- (void)setUrlString:(NSString *)urlString {
62+
if (self.urlString != urlString) {
63+
_urlString = [urlString copy];
64+
_secureURLString = nil; // Invalidate variable cache
65+
}
66+
}
67+
68+
- (NSString *)secureURLString {
69+
if (_secureURLString) {
70+
return _secureURLString;
71+
}
72+
73+
if (!self.urlString) {
74+
return nil;
75+
}
76+
77+
NSURLComponents *components = [NSURLComponents componentsWithString:self.urlString];
78+
if (!components) {
79+
return self.urlString;
80+
}
81+
82+
NSString *scheme = [components scheme];
83+
if (![scheme isEqualToString:@"http"]) {
84+
return self.urlString;
85+
}
86+
87+
if ([[components host] isEqualToString:_PFFileStateSecureDomain]) {
88+
components.scheme = @"https";
89+
}
90+
_secureURLString = [[components URL] absoluteString];
91+
return _secureURLString;
92+
}
93+
4994
///--------------------------------------
5095
#pragma mark - Mutable Copying
5196
///--------------------------------------

Parse/Internal/PFEncoder.m

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#import "PFBase64Encoder.h"
1515
#import "PFDateFormatter.h"
1616
#import "PFFieldOperation.h"
17-
#import "PFFile.h"
17+
#import "PFFile_Private.h"
1818
#import "PFGeoPointPrivate.h"
1919
#import "PFObjectPrivate.h"
2020
#import "PFOfflineStore.h"
@@ -62,7 +62,7 @@ - (id)encodeObject:(id)object {
6262
}
6363
return @{
6464
@"__type" : @"File",
65-
@"url" : ((PFFile *)object).url,
65+
@"url" : ((PFFile *)object).state.urlString,
6666
@"name" : ((PFFile *)object).name
6767
};
6868

Parse/PFFile.m

+1-1
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ - (NSString *)name {
435435
- (NSString *)url {
436436
__block NSString *url = nil;
437437
[self _performDataAccessBlock:^{
438-
url = self.state.urlString;
438+
url = self.state.secureURLString;
439439
}];
440440
return url;
441441
}

Tests/Unit/FileStateTests.m

+26
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ - (void)assertFileState:(PFFileState *)state equalToState:(PFFileState *)differe
2929

3030
XCTAssertEqualObjects(state.name, differentState.name);
3131
XCTAssertEqualObjects(state.urlString, differentState.urlString);
32+
XCTAssertEqualObjects(state.secureURLString, differentState.secureURLString);
3233
XCTAssertEqualObjects(state.mimeType, differentState.mimeType);
3334
}
3435

@@ -40,11 +41,13 @@ - (void)testInit {
4041
PFFileState *state = [[PFFileState alloc] init];
4142
XCTAssertNil(state.name);
4243
XCTAssertNil(state.urlString);
44+
XCTAssertNil(state.secureURLString);
4345
XCTAssertNil(state.mimeType);
4446

4547
state = [[PFMutableFileState alloc] init];
4648
XCTAssertNil(state.name);
4749
XCTAssertNil(state.urlString);
50+
XCTAssertNil(state.secureURLString);
4851
XCTAssertNil(state.mimeType);
4952
}
5053

@@ -78,13 +81,15 @@ - (void)testWithEmptyProperties {
7881
mimeType:nil];
7982
XCTAssertEqualObjects(state.name, @"file");
8083
XCTAssertNil(state.urlString);
84+
XCTAssertNil(state.secureURLString);
8185
XCTAssertNil(state.mimeType);
8286

8387
state = [[PFMutableFileState alloc] initWithName:nil
8488
urlString:nil
8589
mimeType:nil];
8690
XCTAssertEqualObjects(state.name, @"file");
8791
XCTAssertNil(state.urlString);
92+
XCTAssertNil(state.secureURLString);
8893
XCTAssertNil(state.mimeType);
8994
}
9095

@@ -108,8 +113,29 @@ - (void)testMutableAccessors {
108113
XCTAssertEqualObjects(state.name, @"a");
109114
state.urlString = @"b";
110115
XCTAssertEqualObjects(state.urlString, @"b");
116+
XCTAssertEqualObjects(state.secureURLString, @"b");
111117
state.mimeType = @"c";
112118
XCTAssertEqualObjects(state.mimeType, @"c");
113119
}
114120

121+
- (void)testSecureURLString {
122+
PFMutableFileState *state = [[PFMutableFileState alloc] initWithName:@"a"
123+
urlString:@"http://files.parsetfss.com/yolo.txt"
124+
mimeType:nil];
125+
XCTAssertEqualObjects(state.urlString, @"http://files.parsetfss.com/yolo.txt");
126+
XCTAssertEqualObjects(state.secureURLString, @"https://files.parsetfss.com/yolo.txt");
127+
128+
state.urlString = @"https://files.parsetfss.com/yolo.txt";
129+
XCTAssertEqualObjects(state.urlString, @"https://files.parsetfss.com/yolo.txt");
130+
XCTAssertEqualObjects(state.secureURLString, @"https://files.parsetfss.com/yolo.txt");
131+
132+
state.urlString = @"http://files.parsetfss.com/yolo2.txt";
133+
XCTAssertEqualObjects(state.urlString, @"http://files.parsetfss.com/yolo2.txt");
134+
XCTAssertEqualObjects(state.secureURLString, @"https://files.parsetfss.com/yolo2.txt");
135+
136+
state.urlString = nil;
137+
XCTAssertNil(state.urlString);
138+
XCTAssertNil(state.secureURLString);
139+
}
140+
115141
@end

0 commit comments

Comments
 (0)