Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion MCAWSS3Client.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,11 @@ typedef enum {
- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;
- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType metadata:(NSDictionary *)metadata progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType permission:(MCAWSS3ObjectPermission)permission success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;
- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType permission:(MCAWSS3ObjectPermission)permission progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;
- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType permission:(MCAWSS3ObjectPermission)permission metadata:(NSDictionary *)metadata progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;


- (void)getObjectToFileAtPath:(NSString*)path key:(NSString*)key success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure;

Expand Down
34 changes: 28 additions & 6 deletions MCAWSS3Client.m
Original file line number Diff line number Diff line change
Expand Up @@ -56,20 +56,25 @@ - (instancetype)initWithBaseURL:(NSURL*)url

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure
{
[self putObjectWithData:data key:key mimeType:mimeType permission:MCAWSS3ObjectPermissionsPrivate progress:NULL success:success failure:failure];
[self putObjectWithData:data key:key mimeType:mimeType permission:MCAWSS3ObjectPermissionsPrivate metadata:nil progress:NULL success:success failure:failure];
}

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure
{
[self putObjectWithData:data key:key mimeType:mimeType permission:MCAWSS3ObjectPermissionsPrivate progress:progress success:success failure:failure];
[self putObjectWithData:data key:key mimeType:mimeType permission:MCAWSS3ObjectPermissionsPrivate metadata:nil progress:progress success:success failure:failure];
}

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType metadata:(NSDictionary *)metadata progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure
{
[self putObjectWithData:data key:key mimeType:mimeType permission:MCAWSS3ObjectPermissionsPrivate metadata:metadata progress:progress success:success failure:failure];
}

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType permission:(MCAWSS3ObjectPermission)permission success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure
{
[self putObjectWithData:data key:key mimeType:mimeType permission:permission progress:NULL success:success failure:failure];
[self putObjectWithData:data key:key mimeType:mimeType permission:permission metadata:nil progress:NULL success:success failure:failure];
}

- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType permission:(MCAWSS3ObjectPermission)permission progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure
- (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)mimeType permission:(MCAWSS3ObjectPermission)permission metadata:(NSDictionary *)metadata progress:(void (^)(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite))progress success:(void (^)(AFHTTPRequestOperation* operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation* operation, NSError* error))failure
{
[self clearAuthorizationHeader];

Expand Down Expand Up @@ -104,8 +109,15 @@ - (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)m
[self setDefaultHeader:@"x-amz-acl" value:@"bucket-owner-full-control"];
break;
}
NSMutableDictionary *metadataHeaders = [NSMutableDictionary dictionary];
if (metadata) {
for (NSString *key in [metadata allKeys]) {
NSString *headerName = [NSString stringWithFormat:@"x-amz-meta-%@", key];
[xAmzHeaders addObject:headerName];
metadataHeaders[headerName] = metadata[key];
}
}
[xAmzHeaders addObject:@"x-amz-acl"];

if (_sessionToken) {
[self setDefaultHeader:@"x-amz-security-token" value:_sessionToken];
[xAmzHeaders addObject:@"x-amz-security-token"];
Expand All @@ -115,12 +127,15 @@ - (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)m
NSString* canonicalizedAmzHeaders = @"";
for (NSString* xAmzHeader in xAmzHeaders) {
NSString* headerValue = [self defaultValueForHeader:xAmzHeader];
if (!headerValue && metadataHeaders && [metadataHeaders objectForKey:xAmzHeader]) {
headerValue = [metadataHeaders objectForKey:xAmzHeader];
}
canonicalizedAmzHeaders = [canonicalizedAmzHeaders
stringByAppendingFormat:@"%@:%@\n",
xAmzHeader,
headerValue];
}

NSString* requestMethod = @"PUT";
NSString* canonicalizedResource = [self canonicalizedResourceWithKey:key];
NSString* stringToSign = [self stringToSignForRequestMethod:requestMethod contentMD5:contentMD5 mimeType:mimeType dateString:dateString headers:canonicalizedAmzHeaders resource:canonicalizedResource];
Expand All @@ -133,6 +148,13 @@ - (void)putObjectWithData:(NSData*)data key:(NSString*)key mimeType:(NSString*)m
[request addValue:[NSString stringWithFormat:@"%ld", (long)[data length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:data];

if (metadataHeaders) {
for (NSString *key in [metadataHeaders allKeys]) {
NSString *headerValue = metadataHeaders[key];
[request setValue:headerValue forHTTPHeaderField:key];
}
}

AFHTTPRequestOperation* operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation* operation, id responseObject) {
if (success) success(operation, responseObject);
} failure:^(AFHTTPRequestOperation* operation, NSError* error) {
Expand Down