From f7413aee22c53d8f79e1b597501e7c5a37e7e229 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Fri, 16 Nov 2018 10:03:33 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9ignore=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index e1027189..7f02a9b7 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,6 @@ Products/ # big Resource for test Example/AliyunOSSSDK-iOS-Example/Resources/ + +# script generated files +Scripts/*.pyc From a0b3e6aded0396340f149f8161fb66b7dbc54f66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Fri, 16 Nov 2018 13:50:48 +0800 Subject: [PATCH 2/9] putBucketACL --- AliyunOSSSDK.xcodeproj/project.pbxproj | 24 ++++++++++ AliyunOSSSDK/OSSAllRequestNeededMessage.m | 55 ++++++++++++++--------- AliyunOSSSDK/OSSClient.h | 3 ++ AliyunOSSSDK/OSSClient.m | 51 +++++++++++++++++++++ AliyunOSSSDK/OSSConstants.h | 1 + AliyunOSSSDK/OSSHttpResponseParser.m | 12 +++++ AliyunOSSSDK/OSSPutBucketACLRequest.h | 33 ++++++++++++++ AliyunOSSSDK/OSSPutBucketACLRequest.m | 22 +++++++++ AliyunOSSSDK/OSSPutBucketACLResult.h | 17 +++++++ AliyunOSSSDK/OSSPutBucketACLResult.m | 13 ++++++ AliyunOSSSDK/OSSService.h | 2 + AliyunOSSiOSTests/OSSBucketTests.m | 20 +++++++++ 12 files changed, 233 insertions(+), 20 deletions(-) create mode 100644 AliyunOSSSDK/OSSPutBucketACLRequest.h create mode 100644 AliyunOSSSDK/OSSPutBucketACLRequest.m create mode 100644 AliyunOSSSDK/OSSPutBucketACLResult.h create mode 100644 AliyunOSSSDK/OSSPutBucketACLResult.m diff --git a/AliyunOSSSDK.xcodeproj/project.pbxproj b/AliyunOSSSDK.xcodeproj/project.pbxproj index 4ffccc9d..e8ca0372 100644 --- a/AliyunOSSSDK.xcodeproj/project.pbxproj +++ b/AliyunOSSSDK.xcodeproj/project.pbxproj @@ -97,6 +97,14 @@ D842D5A81FFCBA2800220913 /* AliyunOSSiOS.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; D842D5A91FFCBA2800220913 /* AliyunOSSiOS.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; D842D5AC1FFCC48000220913 /* AliyunOSSSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D59E1FFCB97900220913 /* AliyunOSSSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8433268219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8433269219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D843326A219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */; }; + D843326B219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */; }; + D843326E219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D843326F219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D8433270219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */; }; + D8433271219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */; }; D85277EB2015BBAD00D7B1DE /* OSSRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D85277E92015BBAD00D7B1DE /* OSSRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; D85277EC2015BBAD00D7B1DE /* OSSRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D85277E92015BBAD00D7B1DE /* OSSRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; D85277ED2015BBAD00D7B1DE /* OSSRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D85277EA2015BBAD00D7B1DE /* OSSRequest.m */; }; @@ -266,6 +274,10 @@ D842D5A01FFCB97A00220913 /* AliyunOSSSwift-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AliyunOSSSwift-Info.plist"; sourceTree = ""; }; D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliyunOSSiOS.h; sourceTree = ""; }; D842D5AB1FFCC29500220913 /* AliyunOSSSDK.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = AliyunOSSSDK.modulemap; sourceTree = ""; }; + D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSPutBucketACLRequest.h; sourceTree = ""; }; + D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSPutBucketACLRequest.m; sourceTree = ""; }; + D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSPutBucketACLResult.h; sourceTree = ""; }; + D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSPutBucketACLResult.m; sourceTree = ""; }; D85277E92015BBAD00D7B1DE /* OSSRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSRequest.h; sourceTree = ""; }; D85277EA2015BBAD00D7B1DE /* OSSRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSRequest.m; sourceTree = ""; }; D85277EF2015BD5A00D7B1DE /* OSSNetworkingRequestDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSNetworkingRequestDelegate.h; sourceTree = ""; }; @@ -486,6 +498,10 @@ D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */, D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */, D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */, + D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */, + D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */, + D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */, + D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */, ); path = AliyunOSSSDK; sourceTree = ""; @@ -593,7 +609,9 @@ D8C2951820F46A95008A08AA /* OSSGetBucketInfoResult.h in Headers */, D827B40B21107169003A24F6 /* NSDate+OSS.h in Headers */, D8C41B411FCC2FD20091699B /* OSSFileLogger.h in Headers */, + D8433268219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */, D827B41121114E4B003A24F6 /* NSMutableDictionary+OSS.h in Headers */, + D843326E219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */, D8C5E54D1FCEB57600613BA5 /* NSMutableData+OSS_CRC.h in Headers */, D8C41B441FCC2FD20091699B /* OSSDDLog.h in Headers */, D8C41B451FCC2FD20091699B /* OSSCocoaLumberjack.h in Headers */, @@ -653,6 +671,8 @@ D827B40C21107169003A24F6 /* NSDate+OSS.h in Headers */, D842D5A91FFCBA2800220913 /* AliyunOSSiOS.h in Headers */, D827B41221114E4B003A24F6 /* NSMutableDictionary+OSS.h in Headers */, + D8433269219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */, + D843326F219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */, D8C5E54E1FCEB57600613BA5 /* NSMutableData+OSS_CRC.h in Headers */, D80C81FD1FC82549008E3900 /* OSSUtil.h in Headers */, D8C5E5421FCE915000613BA5 /* aos_crc64.h in Headers */, @@ -811,6 +831,7 @@ D827B40D21107169003A24F6 /* NSDate+OSS.m in Sources */, D8C41AEC1FCC2F920091699B /* OSSLog.m in Sources */, D827B4252111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */, + D843326A219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */, D8C41AF01FCC2F920091699B /* OSSModel.m in Sources */, D8C41AF51FCC2F920091699B /* OSSIPv6PrefixResolver.m in Sources */, D85278062015D58400D7B1DE /* OSSHttpResponseParser.m in Sources */, @@ -844,6 +865,7 @@ D8C41B111FCC2F920091699B /* OSSNSLogger.m in Sources */, D85277FA2015CB3500D7B1DE /* OSSAllRequestNeededMessage.m in Sources */, D829F3AB1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */, + D8433270219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */, D8C41B141FCC2F920091699B /* OSSFileLogger.m in Sources */, D8C41B161FCC2F920091699B /* OSSUtil.m in Sources */, ); @@ -864,6 +886,7 @@ D827B40E21107169003A24F6 /* NSDate+OSS.m in Sources */, D8C41AAD1FCC284F0091699B /* OSSLog.m in Sources */, D827B4262111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */, + D843326B219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */, D8C41AB11FCC284F0091699B /* OSSModel.m in Sources */, D8C41AB61FCC284F0091699B /* OSSIPv6PrefixResolver.m in Sources */, D85278072015D58400D7B1DE /* OSSHttpResponseParser.m in Sources */, @@ -897,6 +920,7 @@ D8C41AD21FCC28500091699B /* OSSNSLogger.m in Sources */, D85277FB2015CB3500D7B1DE /* OSSAllRequestNeededMessage.m in Sources */, D829F3AC1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */, + D8433271219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */, D8C41AD51FCC28500091699B /* OSSFileLogger.m in Sources */, D8C41AD71FCC28500091699B /* OSSUtil.m in Sources */, ); diff --git a/AliyunOSSSDK/OSSAllRequestNeededMessage.m b/AliyunOSSSDK/OSSAllRequestNeededMessage.m index b114e261..a34a8b25 100644 --- a/AliyunOSSSDK/OSSAllRequestNeededMessage.m +++ b/AliyunOSSSDK/OSSAllRequestNeededMessage.m @@ -11,6 +11,10 @@ #import "OSSDefine.h" #import "OSSUtil.h" +static NSString * const kOSSInvalidBucketNameMessage = @"The bucket name is invalid. \nA bucket name must: \n1) be comprised of lower-case characters, numbers or dash(-); \n2) start with lower case or numbers; \n3) be between 3-63 characters long."; + +static NSString * const kOSSInvalidObjectNameMessage = @"The object key is invalid. \nAn object name should be: \n1) between 1 - 1023 bytes long when encoded as UTF-8 \n2) cannot contain LF or CR or unsupported chars in XML1.0, \n3) cannot begin with \'/\' or \'\\\'."; + @implementation OSSAllRequestNeededMessage - (instancetype)init @@ -33,31 +37,23 @@ - (void)setHeaderParams:(NSMutableDictionary *)headerParams { - (OSSTask *)validateRequestParamsInOperationType:(OSSOperationType)operType { NSString * errorMessage = nil; + // 1.check for endpoint if (!self.endpoint) { errorMessage = @"Endpoint should not be nil"; } - if (!self.bucketName && operType != OSSOperationTypeGetService) { - errorMessage = @"Bucket name should not be nil"; - } - - if (self.bucketName && ![OSSUtil validateBucketName:self.bucketName]) { - errorMessage = @"Bucket name invalid"; - } - - if (!self.objectKey && - (operType != OSSOperationTypeGetBucket && operType != OSSOperationTypeCreateBucket - && operType != OSSOperationTypeDeleteBucket && operType != OSSOperationTypeGetService - && operType != OSSOperationTypeGetBucketACL&& operType != OSSOperationTypeDeleteMultipleObjects - && operType != OSSOperationTypeListMultipartUploads - && operType != OSSOperationTypeGetBucketInfo)) { - errorMessage = @"Object key should not be nil"; + // 2.check for bucket and object + if (operType != OSSOperationTypeGetService) { + if (![_bucketName oss_isNotEmpty] + || ![OSSUtil validateBucketName:_bucketName]) { + errorMessage = kOSSInvalidBucketNameMessage; + } + if (![self operationBelongsToBucket:operType]) { + if (![_objectKey oss_isNotEmpty] + || ![OSSUtil validateObjectKey:_objectKey]) { + errorMessage = kOSSInvalidObjectNameMessage; + } } - - - - if (self.objectKey && ![OSSUtil validateObjectKey:self.objectKey]) { - errorMessage = @"Object key invalid"; } if (errorMessage) { @@ -69,4 +65,23 @@ - (OSSTask *)validateRequestParamsInOperationType:(OSSOperationType)operType { } } +- (BOOL)operationBelongsToBucket:(OSSOperationType)type { + BOOL belongsToBucket = NO; + switch (type) { + case OSSOperationTypeGetService: + case OSSOperationTypeCreateBucket: + case OSSOperationTypeDeleteBucket: + case OSSOperationTypeGetBucket: + case OSSOperationTypeGetBucketInfo: + case OSSOperationTypeGetBucketACL: + case OSSOperationTypePutBucketACL: + belongsToBucket = YES; + break; + default: + break; + } + + return belongsToBucket; +} + @end diff --git a/AliyunOSSSDK/OSSClient.h b/AliyunOSSSDK/OSSClient.h index ac9a8534..07638165 100644 --- a/AliyunOSSSDK/OSSClient.h +++ b/AliyunOSSSDK/OSSClient.h @@ -12,6 +12,7 @@ @class OSSDeleteBucketRequest; @class OSSHeadObjectRequest; @class OSSGetBucketRequest; +@class OSSPutBucketACLRequest; @class OSSGetBucketACLRequest; @class OSSGetObjectRequest; @class OSSGetObjectACLRequest; @@ -139,6 +140,8 @@ NS_ASSUME_NONNULL_BEGIN */ - (OSSTask *)getBucketInfo:(OSSGetBucketInfoRequest *)request; +- (OSSTask *)putBucketACL:(OSSPutBucketACLRequest *)request; + /** The corresponding RESTFul API: GetBucketACL Gets the bucket ACL. diff --git a/AliyunOSSSDK/OSSClient.m b/AliyunOSSSDK/OSSClient.m index 6fd4f73f..a29b725f 100644 --- a/AliyunOSSSDK/OSSClient.m +++ b/AliyunOSSSDK/OSSClient.m @@ -27,6 +27,7 @@ #import "OSSPutSymlinkRequest.h" #import "OSSGetSymlinkRequest.h" #import "OSSRestoreObjectRequest.h" +#import "OSSPutBucketACLRequest.h" static NSString * const oss_partInfos_storage_name = @"oss_partInfos_storage_name"; static NSString * const oss_record_info_suffix_with_crc = @"-crc64"; @@ -42,6 +43,38 @@ @interface OSSRequest () @end + +@interface OSSPutBucketACLRequest () + +@property (nonatomic, copy, readonly) NSString *acl; + +@end + + +@implementation OSSPutBucketACLRequest + +- (NSString *)acl { + NSString *rAcl = nil; + switch (self.aclType) { + case OSSBucketACLPublicRead: + rAcl = @"public-read"; + break; + case OSSBucketACLPublicReadAndWrite: + rAcl = @"public-read-write"; + break; + + default: + rAcl = @"private"; + break; + } + + return rAcl; +} + +@end + + + @interface OSSClient() - (void)enableCRC64WithFlag:(OSSRequestCRCFlag)flag requestDelegate:(OSSNetworkingRequestDelegate *)delegate; @@ -477,6 +510,24 @@ - (OSSTask *)getBucketInfo:(OSSGetBucketInfoRequest *)request { return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; } +- (OSSTask *)putBucketACL:(OSSPutBucketACLRequest *)request { + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypePutBucketACL]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodPUT; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + neededMsg.headerParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:request.acl, OSSHttpHeaderBucketACL, nil]; + requestDelegate.allNeededMessage = neededMsg; + + requestDelegate.operType = OSSOperationTypePutBucketACL; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + - (OSSTask *)getBucketACL:(OSSGetBucketACLRequest *)request { OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; diff --git a/AliyunOSSSDK/OSSConstants.h b/AliyunOSSSDK/OSSConstants.h index aa044c7b..3a42d457 100644 --- a/AliyunOSSSDK/OSSConstants.h +++ b/AliyunOSSSDK/OSSConstants.h @@ -48,6 +48,7 @@ typedef NS_ENUM(NSInteger, OSSOperationType) { OSSOperationTypeDeleteBucket, OSSOperationTypeGetBucket, OSSOperationTypeGetBucketInfo, + OSSOperationTypePutBucketACL, OSSOperationTypeGetBucketACL, OSSOperationTypeHeadObject, OSSOperationTypeGetObject, diff --git a/AliyunOSSSDK/OSSHttpResponseParser.m b/AliyunOSSSDK/OSSHttpResponseParser.m index 5dc4b6db..88a63de6 100644 --- a/AliyunOSSSDK/OSSHttpResponseParser.m +++ b/AliyunOSSSDK/OSSHttpResponseParser.m @@ -20,6 +20,7 @@ #import "OSSRestoreObjectResult.h" #import "OSSPutSymlinkResult.h" #import "OSSGetSymlinkResult.h" +#import "OSSPutBucketACLResult.h" @implementation OSSHttpResponseParser { @@ -225,6 +226,17 @@ - (nullable id)constructResultObject return createBucketResult; } + case OSSOperationTypePutBucketACL: + { + OSSPutBucketACLResult * putBucketACLResult = [OSSPutBucketACLResult new]; + if (_response) + { + [self parseResponseHeader:_response toResultObject:putBucketACLResult]; + } + + return putBucketACLResult; + } + case OSSOperationTypeGetBucketACL: { OSSGetBucketACLResult * getBucketACLResult = [OSSGetBucketACLResult new]; diff --git a/AliyunOSSSDK/OSSPutBucketACLRequest.h b/AliyunOSSSDK/OSSPutBucketACLRequest.h new file mode 100644 index 00000000..16f84111 --- /dev/null +++ b/AliyunOSSSDK/OSSPutBucketACLRequest.h @@ -0,0 +1,33 @@ +// +// OSSPutBucketACLRequest.h +// AliyunOSSSDK +// +// Created by huaixu on 2018/11/16. +// Copyright © 2018 aliyun. All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, OSSBucketACLType){ + OSSBucketACLPrivate, // private + OSSBucketACLPublicRead, // public-read + OSSBucketACLPublicReadAndWrite // public-read-write +}; + +NS_ASSUME_NONNULL_BEGIN + +@interface OSSPutBucketACLRequest : OSSRequest + +/** + Bucket name + */ +@property (nonatomic, copy) NSString * bucketName; + +/** + acl type of bucket,default value is OSSBucketACLPrivate + */ +@property (nonatomic, assign) OSSBucketACLType aclType; + +@end + +NS_ASSUME_NONNULL_END diff --git a/AliyunOSSSDK/OSSPutBucketACLRequest.m b/AliyunOSSSDK/OSSPutBucketACLRequest.m new file mode 100644 index 00000000..870be27f --- /dev/null +++ b/AliyunOSSSDK/OSSPutBucketACLRequest.m @@ -0,0 +1,22 @@ +// +// OSSPutBucketACLRequest.m +// AliyunOSSSDK +// +// Created by huaixu on 2018/11/16. +// Copyright © 2018 aliyun. All rights reserved. +// + +#import "OSSPutBucketACLRequest.h" + +@implementation OSSPutBucketACLRequest + +- (instancetype)init +{ + self = [super init]; + if (self) { + _aclType = OSSBucketACLPrivate; + } + return self; +} + +@end diff --git a/AliyunOSSSDK/OSSPutBucketACLResult.h b/AliyunOSSSDK/OSSPutBucketACLResult.h new file mode 100644 index 00000000..2dd87a65 --- /dev/null +++ b/AliyunOSSSDK/OSSPutBucketACLResult.h @@ -0,0 +1,17 @@ +// +// OSSPutBucketACLResult.h +// AliyunOSSSDK +// +// Created by huaixu on 2018/11/16. +// Copyright © 2018 aliyun. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface OSSPutBucketACLResult : OSSResult + +@end + +NS_ASSUME_NONNULL_END diff --git a/AliyunOSSSDK/OSSPutBucketACLResult.m b/AliyunOSSSDK/OSSPutBucketACLResult.m new file mode 100644 index 00000000..b58a8b67 --- /dev/null +++ b/AliyunOSSSDK/OSSPutBucketACLResult.m @@ -0,0 +1,13 @@ +// +// OSSPutBucketACLResult.m +// AliyunOSSSDK +// +// Created by huaixu on 2018/11/16. +// Copyright © 2018 aliyun. All rights reserved. +// + +#import "OSSPutBucketACLResult.h" + +@implementation OSSPutBucketACLResult + +@end diff --git a/AliyunOSSSDK/OSSService.h b/AliyunOSSSDK/OSSService.h index b275e736..413ccb01 100644 --- a/AliyunOSSSDK/OSSService.h +++ b/AliyunOSSSDK/OSSService.h @@ -31,6 +31,8 @@ #import "OSSGetSymlinkResult.h" #import "OSSRestoreObjectRequest.h" #import "OSSRestoreObjectResult.h" +#import "OSSPutBucketACLRequest.h" +#import "OSSPutBucketACLResult.h" #import "OSSClient.h" #import "OSSModel.h" diff --git a/AliyunOSSiOSTests/OSSBucketTests.m b/AliyunOSSiOSTests/OSSBucketTests.m index 9a35d7b8..969cfcb2 100644 --- a/AliyunOSSiOSTests/OSSBucketTests.m +++ b/AliyunOSSiOSTests/OSSBucketTests.m @@ -148,4 +148,24 @@ - (void)testListMultipartUploads [OSSTestUtils cleanBucket:@"oss-ios-bucket-list-multipart-uploads-test" with:_client]; } +- (void)testPutBucketACL +{ + OSSCreateBucketRequest *req = [OSSCreateBucketRequest new]; + req.bucketName = @"oss-ios-bucket-put-bucket-acl"; + [[_client createBucket:req] waitUntilFinished]; + + OSSPutBucketACLRequest *putBucketACLReq = [OSSPutBucketACLRequest new]; + putBucketACLReq.bucketName = @"oss-ios-bucket-put-bucket-acl"; + putBucketACLReq.aclType = 100; + + OSSTask *putBucketACLTask = [_client putBucketACL:putBucketACLReq]; + + [[putBucketACLTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + return nil; + }] waitUntilFinished]; + + [OSSTestUtils cleanBucket:@"oss-ios-bucket-put-bucket-acl" with:_client]; +} + @end From b43eea203fb954d35aeeb0eb7e0a6f8e2ad449d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Fri, 16 Nov 2018 15:18:08 +0800 Subject: [PATCH 3/9] put bucket acl --- AliyunOSSSDK.xcodeproj/project.pbxproj | 24 ------------------- AliyunOSSSDK/OSSClient.m | 10 ++++---- AliyunOSSSDK/OSSConstants.h | 12 ++++++++++ AliyunOSSSDK/OSSHttpResponseParser.m | 1 - AliyunOSSSDK/OSSModel.h | 25 +++++++++++++++++++ AliyunOSSSDK/OSSModel.m | 12 ++++++++++ AliyunOSSSDK/OSSPutBucketACLRequest.h | 33 -------------------------- AliyunOSSSDK/OSSPutBucketACLRequest.m | 22 ----------------- AliyunOSSSDK/OSSPutBucketACLResult.h | 17 ------------- AliyunOSSSDK/OSSPutBucketACLResult.m | 13 ---------- AliyunOSSSDK/OSSService.h | 2 -- AliyunOSSiOSTests/OSSBucketTests.m | 4 ++-- 12 files changed, 55 insertions(+), 120 deletions(-) delete mode 100644 AliyunOSSSDK/OSSPutBucketACLRequest.h delete mode 100644 AliyunOSSSDK/OSSPutBucketACLRequest.m delete mode 100644 AliyunOSSSDK/OSSPutBucketACLResult.h delete mode 100644 AliyunOSSSDK/OSSPutBucketACLResult.m diff --git a/AliyunOSSSDK.xcodeproj/project.pbxproj b/AliyunOSSSDK.xcodeproj/project.pbxproj index e8ca0372..4ffccc9d 100644 --- a/AliyunOSSSDK.xcodeproj/project.pbxproj +++ b/AliyunOSSSDK.xcodeproj/project.pbxproj @@ -97,14 +97,6 @@ D842D5A81FFCBA2800220913 /* AliyunOSSiOS.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; D842D5A91FFCBA2800220913 /* AliyunOSSiOS.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; D842D5AC1FFCC48000220913 /* AliyunOSSSwift.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D59E1FFCB97900220913 /* AliyunOSSSwift.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8433268219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8433269219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D843326A219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */; }; - D843326B219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */; }; - D843326E219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D843326F219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */ = {isa = PBXBuildFile; fileRef = D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8433270219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */; }; - D8433271219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */; }; D85277EB2015BBAD00D7B1DE /* OSSRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D85277E92015BBAD00D7B1DE /* OSSRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; D85277EC2015BBAD00D7B1DE /* OSSRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = D85277E92015BBAD00D7B1DE /* OSSRequest.h */; settings = {ATTRIBUTES = (Public, ); }; }; D85277ED2015BBAD00D7B1DE /* OSSRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D85277EA2015BBAD00D7B1DE /* OSSRequest.m */; }; @@ -274,10 +266,6 @@ D842D5A01FFCB97A00220913 /* AliyunOSSSwift-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "AliyunOSSSwift-Info.plist"; sourceTree = ""; }; D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliyunOSSiOS.h; sourceTree = ""; }; D842D5AB1FFCC29500220913 /* AliyunOSSSDK.modulemap */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = "sourcecode.module-map"; path = AliyunOSSSDK.modulemap; sourceTree = ""; }; - D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSPutBucketACLRequest.h; sourceTree = ""; }; - D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSPutBucketACLRequest.m; sourceTree = ""; }; - D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSPutBucketACLResult.h; sourceTree = ""; }; - D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSPutBucketACLResult.m; sourceTree = ""; }; D85277E92015BBAD00D7B1DE /* OSSRequest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSRequest.h; sourceTree = ""; }; D85277EA2015BBAD00D7B1DE /* OSSRequest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSRequest.m; sourceTree = ""; }; D85277EF2015BD5A00D7B1DE /* OSSNetworkingRequestDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSNetworkingRequestDelegate.h; sourceTree = ""; }; @@ -498,10 +486,6 @@ D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */, D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */, D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */, - D8433266219E5ED300F34A9F /* OSSPutBucketACLRequest.h */, - D8433267219E5ED300F34A9F /* OSSPutBucketACLRequest.m */, - D843326C219E755600F34A9F /* OSSPutBucketACLResult.h */, - D843326D219E755600F34A9F /* OSSPutBucketACLResult.m */, ); path = AliyunOSSSDK; sourceTree = ""; @@ -609,9 +593,7 @@ D8C2951820F46A95008A08AA /* OSSGetBucketInfoResult.h in Headers */, D827B40B21107169003A24F6 /* NSDate+OSS.h in Headers */, D8C41B411FCC2FD20091699B /* OSSFileLogger.h in Headers */, - D8433268219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */, D827B41121114E4B003A24F6 /* NSMutableDictionary+OSS.h in Headers */, - D843326E219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */, D8C5E54D1FCEB57600613BA5 /* NSMutableData+OSS_CRC.h in Headers */, D8C41B441FCC2FD20091699B /* OSSDDLog.h in Headers */, D8C41B451FCC2FD20091699B /* OSSCocoaLumberjack.h in Headers */, @@ -671,8 +653,6 @@ D827B40C21107169003A24F6 /* NSDate+OSS.h in Headers */, D842D5A91FFCBA2800220913 /* AliyunOSSiOS.h in Headers */, D827B41221114E4B003A24F6 /* NSMutableDictionary+OSS.h in Headers */, - D8433269219E5ED300F34A9F /* OSSPutBucketACLRequest.h in Headers */, - D843326F219E755600F34A9F /* OSSPutBucketACLResult.h in Headers */, D8C5E54E1FCEB57600613BA5 /* NSMutableData+OSS_CRC.h in Headers */, D80C81FD1FC82549008E3900 /* OSSUtil.h in Headers */, D8C5E5421FCE915000613BA5 /* aos_crc64.h in Headers */, @@ -831,7 +811,6 @@ D827B40D21107169003A24F6 /* NSDate+OSS.m in Sources */, D8C41AEC1FCC2F920091699B /* OSSLog.m in Sources */, D827B4252111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */, - D843326A219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */, D8C41AF01FCC2F920091699B /* OSSModel.m in Sources */, D8C41AF51FCC2F920091699B /* OSSIPv6PrefixResolver.m in Sources */, D85278062015D58400D7B1DE /* OSSHttpResponseParser.m in Sources */, @@ -865,7 +844,6 @@ D8C41B111FCC2F920091699B /* OSSNSLogger.m in Sources */, D85277FA2015CB3500D7B1DE /* OSSAllRequestNeededMessage.m in Sources */, D829F3AB1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */, - D8433270219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */, D8C41B141FCC2F920091699B /* OSSFileLogger.m in Sources */, D8C41B161FCC2F920091699B /* OSSUtil.m in Sources */, ); @@ -886,7 +864,6 @@ D827B40E21107169003A24F6 /* NSDate+OSS.m in Sources */, D8C41AAD1FCC284F0091699B /* OSSLog.m in Sources */, D827B4262111A71B003A24F6 /* OSSRestoreObjectRequest.m in Sources */, - D843326B219E5ED300F34A9F /* OSSPutBucketACLRequest.m in Sources */, D8C41AB11FCC284F0091699B /* OSSModel.m in Sources */, D8C41AB61FCC284F0091699B /* OSSIPv6PrefixResolver.m in Sources */, D85278072015D58400D7B1DE /* OSSHttpResponseParser.m in Sources */, @@ -920,7 +897,6 @@ D8C41AD21FCC28500091699B /* OSSNSLogger.m in Sources */, D85277FB2015CB3500D7B1DE /* OSSAllRequestNeededMessage.m in Sources */, D829F3AC1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */, - D8433271219E755600F34A9F /* OSSPutBucketACLResult.m in Sources */, D8C41AD51FCC28500091699B /* OSSFileLogger.m in Sources */, D8C41AD71FCC28500091699B /* OSSUtil.m in Sources */, ); diff --git a/AliyunOSSSDK/OSSClient.m b/AliyunOSSSDK/OSSClient.m index a29b725f..ef9e27f1 100644 --- a/AliyunOSSSDK/OSSClient.m +++ b/AliyunOSSSDK/OSSClient.m @@ -27,7 +27,6 @@ #import "OSSPutSymlinkRequest.h" #import "OSSGetSymlinkRequest.h" #import "OSSRestoreObjectRequest.h" -#import "OSSPutBucketACLRequest.h" static NSString * const oss_partInfos_storage_name = @"oss_partInfos_storage_name"; static NSString * const oss_record_info_suffix_with_crc = @"-crc64"; @@ -44,22 +43,22 @@ @interface OSSRequest () @end -@interface OSSPutBucketACLRequest () +@interface OSSPutBucketACLRequest (ACL) @property (nonatomic, copy, readonly) NSString *acl; @end -@implementation OSSPutBucketACLRequest +@implementation OSSPutBucketACLRequest (ACL) - (NSString *)acl { NSString *rAcl = nil; switch (self.aclType) { - case OSSBucketACLPublicRead: + case OSSACLPublicRead: rAcl = @"public-read"; break; - case OSSBucketACLPublicReadAndWrite: + case OSSACLPublicReadAndWrite: rAcl = @"public-read-write"; break; @@ -74,7 +73,6 @@ - (NSString *)acl { @end - @interface OSSClient() - (void)enableCRC64WithFlag:(OSSRequestCRCFlag)flag requestDelegate:(OSSNetworkingRequestDelegate *)delegate; diff --git a/AliyunOSSSDK/OSSConstants.h b/AliyunOSSSDK/OSSConstants.h index 3a42d457..697f83d9 100644 --- a/AliyunOSSSDK/OSSConstants.h +++ b/AliyunOSSSDK/OSSConstants.h @@ -97,6 +97,18 @@ typedef NS_ENUM(NSInteger, OSSXMLDictionaryAttributesMode) OSSXMLDictionaryAttributesModeDiscard }; +/** + the acl type of OSS resource + + - OSSACLPrivate: private + - OSSACLPublicRead: public-reads + - OSSACLPublicReadAndWrite: public-read-write + */ +typedef NS_ENUM(NSInteger, OSSACLType){ + OSSACLPrivate, // private + OSSACLPublicRead, // public-read + OSSACLPublicReadAndWrite // public-read-write +}; typedef NS_ENUM(NSInteger, OSSXMLDictionaryNodeNameMode) { diff --git a/AliyunOSSSDK/OSSHttpResponseParser.m b/AliyunOSSSDK/OSSHttpResponseParser.m index 88a63de6..3410fc32 100644 --- a/AliyunOSSSDK/OSSHttpResponseParser.m +++ b/AliyunOSSSDK/OSSHttpResponseParser.m @@ -20,7 +20,6 @@ #import "OSSRestoreObjectResult.h" #import "OSSPutSymlinkResult.h" #import "OSSGetSymlinkResult.h" -#import "OSSPutBucketACLResult.h" @implementation OSSHttpResponseParser { diff --git a/AliyunOSSSDK/OSSModel.h b/AliyunOSSSDK/OSSModel.h index a1b7ffdf..a5e9e983 100644 --- a/AliyunOSSSDK/OSSModel.h +++ b/AliyunOSSSDK/OSSModel.h @@ -461,6 +461,31 @@ Sets the session Id for background file transmission @property (nonatomic, strong) NSArray * commentPrefixes; @end +/** + The request class to get the bucket ACL. + */ +@interface OSSPutBucketACLRequest : OSSRequest + +/** + Bucket name + */ +@property (nonatomic, copy) NSString * bucketName; + +/** + acl type + */ +@property (nonatomic, assign) OSSACLType aclType; + +@end + + +/** + The result class to put the bucket's ACL. + */ +@interface OSSPutBucketACLResult : OSSResult + +@end + /** The request class to get the bucket ACL. */ diff --git a/AliyunOSSSDK/OSSModel.m b/AliyunOSSSDK/OSSModel.m index ca09c0d9..b1f131fa 100644 --- a/AliyunOSSSDK/OSSModel.m +++ b/AliyunOSSSDK/OSSModel.m @@ -629,6 +629,18 @@ @implementation OSSListMultipartUploadsResult @implementation OSSGetBucketResult @end +@implementation OSSPutBucketACLRequest + +- (NSDictionary *)requestParams { + return @{@"acl": @""}; +} + +@end + +@implementation OSSPutBucketACLResult + +@end + @implementation OSSGetBucketACLRequest - (NSDictionary *)requestParams { diff --git a/AliyunOSSSDK/OSSPutBucketACLRequest.h b/AliyunOSSSDK/OSSPutBucketACLRequest.h deleted file mode 100644 index 16f84111..00000000 --- a/AliyunOSSSDK/OSSPutBucketACLRequest.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// OSSPutBucketACLRequest.h -// AliyunOSSSDK -// -// Created by huaixu on 2018/11/16. -// Copyright © 2018 aliyun. All rights reserved. -// - -#import - -typedef NS_ENUM(NSUInteger, OSSBucketACLType){ - OSSBucketACLPrivate, // private - OSSBucketACLPublicRead, // public-read - OSSBucketACLPublicReadAndWrite // public-read-write -}; - -NS_ASSUME_NONNULL_BEGIN - -@interface OSSPutBucketACLRequest : OSSRequest - -/** - Bucket name - */ -@property (nonatomic, copy) NSString * bucketName; - -/** - acl type of bucket,default value is OSSBucketACLPrivate - */ -@property (nonatomic, assign) OSSBucketACLType aclType; - -@end - -NS_ASSUME_NONNULL_END diff --git a/AliyunOSSSDK/OSSPutBucketACLRequest.m b/AliyunOSSSDK/OSSPutBucketACLRequest.m deleted file mode 100644 index 870be27f..00000000 --- a/AliyunOSSSDK/OSSPutBucketACLRequest.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// OSSPutBucketACLRequest.m -// AliyunOSSSDK -// -// Created by huaixu on 2018/11/16. -// Copyright © 2018 aliyun. All rights reserved. -// - -#import "OSSPutBucketACLRequest.h" - -@implementation OSSPutBucketACLRequest - -- (instancetype)init -{ - self = [super init]; - if (self) { - _aclType = OSSBucketACLPrivate; - } - return self; -} - -@end diff --git a/AliyunOSSSDK/OSSPutBucketACLResult.h b/AliyunOSSSDK/OSSPutBucketACLResult.h deleted file mode 100644 index 2dd87a65..00000000 --- a/AliyunOSSSDK/OSSPutBucketACLResult.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// OSSPutBucketACLResult.h -// AliyunOSSSDK -// -// Created by huaixu on 2018/11/16. -// Copyright © 2018 aliyun. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface OSSPutBucketACLResult : OSSResult - -@end - -NS_ASSUME_NONNULL_END diff --git a/AliyunOSSSDK/OSSPutBucketACLResult.m b/AliyunOSSSDK/OSSPutBucketACLResult.m deleted file mode 100644 index b58a8b67..00000000 --- a/AliyunOSSSDK/OSSPutBucketACLResult.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// OSSPutBucketACLResult.m -// AliyunOSSSDK -// -// Created by huaixu on 2018/11/16. -// Copyright © 2018 aliyun. All rights reserved. -// - -#import "OSSPutBucketACLResult.h" - -@implementation OSSPutBucketACLResult - -@end diff --git a/AliyunOSSSDK/OSSService.h b/AliyunOSSSDK/OSSService.h index 413ccb01..b275e736 100644 --- a/AliyunOSSSDK/OSSService.h +++ b/AliyunOSSSDK/OSSService.h @@ -31,8 +31,6 @@ #import "OSSGetSymlinkResult.h" #import "OSSRestoreObjectRequest.h" #import "OSSRestoreObjectResult.h" -#import "OSSPutBucketACLRequest.h" -#import "OSSPutBucketACLResult.h" #import "OSSClient.h" #import "OSSModel.h" diff --git a/AliyunOSSiOSTests/OSSBucketTests.m b/AliyunOSSiOSTests/OSSBucketTests.m index 969cfcb2..0d547e6c 100644 --- a/AliyunOSSiOSTests/OSSBucketTests.m +++ b/AliyunOSSiOSTests/OSSBucketTests.m @@ -154,9 +154,9 @@ - (void)testPutBucketACL req.bucketName = @"oss-ios-bucket-put-bucket-acl"; [[_client createBucket:req] waitUntilFinished]; - OSSPutBucketACLRequest *putBucketACLReq = [OSSPutBucketACLRequest new]; + OSSPutBucketACLRequest *putBucketACLReq = [[OSSPutBucketACLRequest alloc] init]; putBucketACLReq.bucketName = @"oss-ios-bucket-put-bucket-acl"; - putBucketACLReq.aclType = 100; + putBucketACLReq.aclType = OSSACLPublicRead; OSSTask *putBucketACLTask = [_client putBucketACL:putBucketACLReq]; From 20a61bdb497e77568f8fe325960492fdef05115b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Mon, 19 Nov 2018 10:25:01 +0800 Subject: [PATCH 4/9] bucket logging operations --- AliyunOSSSDK/OSSAllRequestNeededMessage.m | 3 + AliyunOSSSDK/OSSClient.h | 34 +++++++++- AliyunOSSSDK/OSSClient.m | 75 +++++++++++++++++++++++ AliyunOSSSDK/OSSConstants.h | 3 + AliyunOSSSDK/OSSModel.h | 51 +++++++++++++++ AliyunOSSSDK/OSSModel.m | 39 ++++++++++++ 6 files changed, 202 insertions(+), 3 deletions(-) diff --git a/AliyunOSSSDK/OSSAllRequestNeededMessage.m b/AliyunOSSSDK/OSSAllRequestNeededMessage.m index a34a8b25..e1648f72 100644 --- a/AliyunOSSSDK/OSSAllRequestNeededMessage.m +++ b/AliyunOSSSDK/OSSAllRequestNeededMessage.m @@ -75,6 +75,9 @@ - (BOOL)operationBelongsToBucket:(OSSOperationType)type { case OSSOperationTypeGetBucketInfo: case OSSOperationTypeGetBucketACL: case OSSOperationTypePutBucketACL: + case OSSOperationTypePutBucketLogging: + case OSSOperationTypeGetBucketLogging: + case OSSOperationTypeDeleteBucketLogging: belongsToBucket = YES; break; default: diff --git a/AliyunOSSSDK/OSSClient.h b/AliyunOSSSDK/OSSClient.h index 07638165..7b54a806 100644 --- a/AliyunOSSSDK/OSSClient.h +++ b/AliyunOSSSDK/OSSClient.h @@ -10,10 +10,15 @@ @class OSSGetServiceRequest; @class OSSCreateBucketRequest; @class OSSDeleteBucketRequest; -@class OSSHeadObjectRequest; -@class OSSGetBucketRequest; @class OSSPutBucketACLRequest; @class OSSGetBucketACLRequest; +@class OSSGetBucketInfoRequest; +@class OSSPutBucketLoggingRequest; +@class OSSGetBucketLoggingRequest; +@class OSSDeleteBucketLoggingRequest; + +@class OSSGetBucketRequest; +@class OSSHeadObjectRequest; @class OSSGetObjectRequest; @class OSSGetObjectACLRequest; @class OSSPutObjectRequest; @@ -32,7 +37,6 @@ @class OSSMultipartUploadRequest; @class OSSCallBackRequest; @class OSSImagePersistRequest; -@class OSSGetBucketInfoRequest; @class OSSPutSymlinkRequest; @class OSSGetSymlinkRequest; @class OSSRestoreObjectRequest; @@ -148,6 +152,30 @@ NS_ASSUME_NONNULL_BEGIN */ - (OSSTask *)getBucketACL:(OSSGetBucketACLRequest *)request; +/** + Update the bucket logging settings. Log file will create every one hour and name format: -YYYY-mm-DD-HH-MM-SS-UniqueString + + @param request an instance of OSSPutBucketLoggingRequest + @return an instance of OSSTask + */ +- (OSSTask *)putBucketLogging:(OSSPutBucketLoggingRequest *)request; + +/** + Get the bucket logging settings. + + @param request an instance of OSSGetBucketLoggingRequest + @return an instance of OSSTask + */ +- (OSSTask *)getBucketLogging:(OSSGetBucketLoggingRequest *)request; + +/** + Delete the bucket logging settings. + + @param request an instance of OSSDeleteBucketLoggingRequest + @return an instance of OSSTask + */ +- (OSSTask *)deleteBucketLogging:(OSSDeleteBucketLoggingRequest *)request; + @end diff --git a/AliyunOSSSDK/OSSClient.m b/AliyunOSSSDK/OSSClient.m index ef9e27f1..95c53071 100644 --- a/AliyunOSSSDK/OSSClient.m +++ b/AliyunOSSSDK/OSSClient.m @@ -33,6 +33,8 @@ static NSString * const oss_record_info_suffix_with_sequential = @"-sequential"; static NSUInteger const oss_multipart_max_part_number = 5000; //max part number +#pragma mark - OSSRequest and its subClasses's category + /** * extend OSSRequest to include the ref to networking request object */ @@ -72,6 +74,24 @@ - (NSString *)acl { @end +@interface OSSPutBucketLoggingRequest (Logging) + +@property (nonatomic, copy, readonly) NSData *xmlBody; + +@end + +@implementation OSSPutBucketLoggingRequest (Logging) + +- (NSData *)xmlBody +{ + NSMutableString *sRetBody = [NSMutableString string]; + [sRetBody appendFormat:@"\n\n\n%@\n%@\n\n", self.targetBucketName, self.targetPrefix]; + return [sRetBody dataUsingEncoding:NSUTF8StringEncoding]; +} + +@end + +#pragma mark - OSSClient @interface OSSClient() @@ -543,6 +563,61 @@ - (OSSTask *)getBucketACL:(OSSGetBucketACLRequest *)request { return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; } +- (OSSTask *)putBucketLogging:(OSSPutBucketLoggingRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypePutBucketLogging]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodPUT; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + requestDelegate.uploadingData = request.xmlBody; + + requestDelegate.operType = OSSOperationTypePutBucketLogging; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + +- (OSSTask *)getBucketLogging:(OSSGetBucketLoggingRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeGetBucketLogging]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodGET; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + + requestDelegate.operType = OSSOperationTypeGetBucketLogging; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + +- (OSSTask *)deleteBucketLogging:(OSSDeleteBucketLoggingRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeDeleteBucketLogging]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodDELETE; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + + requestDelegate.operType = OSSOperationTypeDeleteBucketLogging; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + @end @implementation OSSClient (Object) diff --git a/AliyunOSSSDK/OSSConstants.h b/AliyunOSSSDK/OSSConstants.h index 697f83d9..fe7cae6b 100644 --- a/AliyunOSSSDK/OSSConstants.h +++ b/AliyunOSSSDK/OSSConstants.h @@ -50,6 +50,9 @@ typedef NS_ENUM(NSInteger, OSSOperationType) { OSSOperationTypeGetBucketInfo, OSSOperationTypePutBucketACL, OSSOperationTypeGetBucketACL, + OSSOperationTypePutBucketLogging, + OSSOperationTypeGetBucketLogging, + OSSOperationTypeDeleteBucketLogging, OSSOperationTypeHeadObject, OSSOperationTypeGetObject, OSSOperationTypeGetObjectACL, diff --git a/AliyunOSSSDK/OSSModel.h b/AliyunOSSSDK/OSSModel.h index a5e9e983..33566d3d 100644 --- a/AliyunOSSSDK/OSSModel.h +++ b/AliyunOSSSDK/OSSModel.h @@ -508,6 +508,57 @@ Sets the session Id for background file transmission @property (nonatomic, copy) NSString * aclGranted; @end +@interface OSSPutBucketLoggingRequest : OSSRequest + +/** + bucket's name + */ +@property (nonatomic, copy) NSString *bucketName; + +/** + target bucket's name + */ +@property (nonatomic, copy) NSString *targetBucketName; + +/** + prefix path name to store the log files + */ +@property (nonatomic, copy) NSString *targetPrefix; + +@end + +@interface OSSPutBucketLoggingResult : OSSResult + +@end + + +@interface OSSGetBucketLoggingRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +@end + +@interface OSSGetBucketLoggingResult : OSSResult + +@end + + +@interface OSSDeleteBucketLoggingRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +@end + +@interface OSSDeleteBucketLoggingResult : OSSResult + +@end + /** The request class to get object metadata */ diff --git a/AliyunOSSSDK/OSSModel.m b/AliyunOSSSDK/OSSModel.m index b1f131fa..4fa76369 100644 --- a/AliyunOSSSDK/OSSModel.m +++ b/AliyunOSSSDK/OSSModel.m @@ -652,6 +652,45 @@ - (NSDictionary *)requestParams { @implementation OSSGetBucketACLResult @end +@implementation OSSPutBucketLoggingRequest + +- (NSDictionary *)requestParams +{ + return @{@"logging": @""}; +} + +@end + +@implementation OSSPutBucketLoggingResult + +@end + +@implementation OSSGetBucketLoggingRequest + +- (NSDictionary *)requestParams +{ + return @{@"logging": @""}; +} + +@end + +@implementation OSSGetBucketLoggingResult + +@end + +@implementation OSSDeleteBucketLoggingRequest + +- (NSDictionary *)requestParams +{ + return @{@"logging": @""}; +} + +@end + +@implementation OSSDeleteBucketLoggingResult + +@end + @implementation OSSHeadObjectRequest @end From 454ddd653f4b80e8849e06c3e123407fae184ab9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Mon, 19 Nov 2018 10:25:37 +0800 Subject: [PATCH 5/9] bucket logging test cases --- AliyunOSSiOSTests/OSSBucketTests.m | 46 ++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/AliyunOSSiOSTests/OSSBucketTests.m b/AliyunOSSiOSTests/OSSBucketTests.m index 0d547e6c..5621c4e2 100644 --- a/AliyunOSSiOSTests/OSSBucketTests.m +++ b/AliyunOSSiOSTests/OSSBucketTests.m @@ -168,4 +168,50 @@ - (void)testPutBucketACL [OSSTestUtils cleanBucket:@"oss-ios-bucket-put-bucket-acl" with:_client]; } +- (void)testBucketLogging +{ + OSSCreateBucketRequest *createBucketSrcReq = [OSSCreateBucketRequest new]; + createBucketSrcReq.bucketName = @"oss-ios-bucket-logging-source"; + [[_client createBucket:createBucketSrcReq] waitUntilFinished]; + + OSSCreateBucketRequest *createBucketTargetReq = [OSSCreateBucketRequest new]; + createBucketTargetReq.bucketName = @"oss-ios-bucket-logging-target"; + [[_client createBucket:createBucketTargetReq] waitUntilFinished]; + + OSSPutBucketLoggingRequest *putBucketLoggingReq = [[OSSPutBucketLoggingRequest alloc] init]; + putBucketLoggingReq.bucketName = @"oss-ios-bucket-logging-source"; + putBucketLoggingReq.targetBucketName = @"oss-ios-bucket-logging-target"; + putBucketLoggingReq.targetPrefix = @"oss-ios-bucket-target-prefix"; + + OSSTask *putBucketLoggingTask = [_client putBucketLogging:putBucketLoggingReq]; + + [[putBucketLoggingTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + return nil; + }] waitUntilFinished]; + + OSSGetBucketLoggingRequest *getBucketLoggingReq = [[OSSGetBucketLoggingRequest alloc] init]; + getBucketLoggingReq.bucketName = @"oss-ios-bucket-logging-source"; + + OSSTask *getBucketLoggingTask = [_client getBucketLogging:getBucketLoggingReq]; + + [[getBucketLoggingTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + return nil; + }] waitUntilFinished]; + + OSSDeleteBucketLoggingRequest *delBucketLoggingReq = [[OSSDeleteBucketLoggingRequest alloc] init]; + delBucketLoggingReq.bucketName = @"oss-ios-bucket-logging-source"; + + OSSTask *delBucketLoggingTask = [_client deleteBucketLogging:delBucketLoggingReq]; + + [[delBucketLoggingTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + return nil; + }] waitUntilFinished]; + + [OSSTestUtils cleanBucket:@"oss-ios-bucket-logging-target" with:_client]; + [OSSTestUtils cleanBucket:@"oss-ios-bucket-logging-source" with:_client]; +} + @end From b2fcde1af4c82264910a55b479e03896476d8c00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Mon, 19 Nov 2018 14:47:02 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0bucket=20referer=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AliyunOSSSDK.xcodeproj/project.pbxproj | 12 +++ AliyunOSSSDK/OSSAllRequestNeededMessage.m | 2 + AliyunOSSSDK/OSSClient.h | 18 +++++ AliyunOSSSDK/OSSClient.m | 95 +++++++++-------------- AliyunOSSSDK/OSSConstants.h | 2 + AliyunOSSSDK/OSSHttpResponseParser.m | 79 +++++++++++++++++++ AliyunOSSSDK/OSSModel.h | 73 +++++++++++++++++ AliyunOSSSDK/OSSModel.m | 35 +++++++++ AliyunOSSSDK/OSSRequest+Utils.h | 46 +++++++++++ AliyunOSSSDK/OSSRequest+Utils.m | 65 ++++++++++++++++ 10 files changed, 370 insertions(+), 57 deletions(-) create mode 100644 AliyunOSSSDK/OSSRequest+Utils.h create mode 100644 AliyunOSSSDK/OSSRequest+Utils.m diff --git a/AliyunOSSSDK.xcodeproj/project.pbxproj b/AliyunOSSSDK.xcodeproj/project.pbxproj index 4ffccc9d..0ae4f4cb 100644 --- a/AliyunOSSSDK.xcodeproj/project.pbxproj +++ b/AliyunOSSSDK.xcodeproj/project.pbxproj @@ -92,6 +92,10 @@ D829F3AA1FD8CFBE00A8C2DC /* OSSInputStreamHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = D829F3A71FD8CFBE00A8C2DC /* OSSInputStreamHelper.h */; }; D829F3AB1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D829F3A81FD8CFBE00A8C2DC /* OSSInputStreamHelper.m */; }; D829F3AC1FD8CFBE00A8C2DC /* OSSInputStreamHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = D829F3A81FD8CFBE00A8C2DC /* OSSInputStreamHelper.m */; }; + D833051F21A25E40001F42D9 /* OSSRequest+Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = D833051D21A25E40001F42D9 /* OSSRequest+Utils.h */; }; + D833052021A25E40001F42D9 /* OSSRequest+Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = D833051D21A25E40001F42D9 /* OSSRequest+Utils.h */; }; + D833052121A25E40001F42D9 /* OSSRequest+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = D833051E21A25E40001F42D9 /* OSSRequest+Utils.m */; }; + D833052221A25E40001F42D9 /* OSSRequest+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = D833051E21A25E40001F42D9 /* OSSRequest+Utils.m */; }; D842D59B1FFCAAD600220913 /* AliyunOSSiOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21028BBC1BA9ABF500C2A6BA /* AliyunOSSiOS.framework */; }; D842D59C1FFCAAF300220913 /* OSSLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = D842D5891FFC8C0500220913 /* OSSLog.swift */; }; D842D5A81FFCBA2800220913 /* AliyunOSSiOS.h in Headers */ = {isa = PBXBuildFile; fileRef = D842D5A71FFCBA2800220913 /* AliyunOSSiOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -259,6 +263,8 @@ D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSGetSymlinkResult.m; sourceTree = ""; }; D829F3A71FD8CFBE00A8C2DC /* OSSInputStreamHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OSSInputStreamHelper.h; sourceTree = ""; }; D829F3A81FD8CFBE00A8C2DC /* OSSInputStreamHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = OSSInputStreamHelper.m; sourceTree = ""; }; + D833051D21A25E40001F42D9 /* OSSRequest+Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "OSSRequest+Utils.h"; sourceTree = ""; }; + D833051E21A25E40001F42D9 /* OSSRequest+Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "OSSRequest+Utils.m"; sourceTree = ""; }; D842D5891FFC8C0500220913 /* OSSLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OSSLog.swift; sourceTree = ""; }; D842D5911FFCA8F300220913 /* AliyunOSSSwiftSDK.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AliyunOSSSwiftSDK.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D842D59E1FFCB97900220913 /* AliyunOSSSwift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AliyunOSSSwift.h; sourceTree = ""; }; @@ -486,6 +492,8 @@ D827B42E2111ADE9003A24F6 /* OSSPutSymlinkResult.m */, D827B4332111ADF7003A24F6 /* OSSGetSymlinkResult.h */, D827B4342111ADF7003A24F6 /* OSSGetSymlinkResult.m */, + D833051D21A25E40001F42D9 /* OSSRequest+Utils.h */, + D833051E21A25E40001F42D9 /* OSSRequest+Utils.m */, ); path = AliyunOSSSDK; sourceTree = ""; @@ -550,6 +558,7 @@ files = ( D8C41B1A1FCC2FD20091699B /* OSSModel.h in Headers */, D8C41B1D1FCC2FD20091699B /* OSSCompat.h in Headers */, + D833051F21A25E40001F42D9 /* OSSRequest+Utils.h in Headers */, D8C41B1F1FCC2FD20091699B /* OSSUtil.h in Headers */, D8C41B201FCC2FD20091699B /* OSSXMLDictionary.h in Headers */, D8C41B211FCC2FD20091699B /* OSSClient.h in Headers */, @@ -608,6 +617,7 @@ files = ( D80C81FB1FC82541008E3900 /* OSSModel.h in Headers */, D80C81FE1FC8254D008E3900 /* OSSXMLDictionary.h in Headers */, + D833052021A25E40001F42D9 /* OSSRequest+Utils.h in Headers */, D80C81FF1FC82554008E3900 /* OSSClient.h in Headers */, D80C82021FC8255B008E3900 /* OSSNetworking.h in Headers */, D80C82131FC82596008E3900 /* OSSIPv6Adapter.h in Headers */, @@ -838,6 +848,7 @@ D827B41321114E4B003A24F6 /* NSMutableDictionary+OSS.m in Sources */, D85278122015DF4900D7B1DE /* OSSConstants.m in Sources */, D80C88CB201AC1B400F379D8 /* OSSGetObjectACLRequest.m in Sources */, + D833052121A25E40001F42D9 /* OSSRequest+Utils.m in Sources */, D8C41B0E1FCC2F920091699B /* OSSDDLog.m in Sources */, D8C2951A20F46A95008A08AA /* OSSGetBucketInfoResult.m in Sources */, D8C41B101FCC2F920091699B /* OSSReachability.m in Sources */, @@ -891,6 +902,7 @@ D827B41421114E4B003A24F6 /* NSMutableDictionary+OSS.m in Sources */, D85278132015DF4900D7B1DE /* OSSConstants.m in Sources */, D80C88CC201AC1B400F379D8 /* OSSGetObjectACLRequest.m in Sources */, + D833052221A25E40001F42D9 /* OSSRequest+Utils.m in Sources */, D8C41ACF1FCC28500091699B /* OSSDDLog.m in Sources */, D8C2951B20F46A95008A08AA /* OSSGetBucketInfoResult.m in Sources */, D8C41AD11FCC28500091699B /* OSSReachability.m in Sources */, diff --git a/AliyunOSSSDK/OSSAllRequestNeededMessage.m b/AliyunOSSSDK/OSSAllRequestNeededMessage.m index e1648f72..bac315a2 100644 --- a/AliyunOSSSDK/OSSAllRequestNeededMessage.m +++ b/AliyunOSSSDK/OSSAllRequestNeededMessage.m @@ -78,6 +78,8 @@ - (BOOL)operationBelongsToBucket:(OSSOperationType)type { case OSSOperationTypePutBucketLogging: case OSSOperationTypeGetBucketLogging: case OSSOperationTypeDeleteBucketLogging: + case OSSOperationTypePutBucketReferer: + case OSSOperationTypeGetBucketReferer: belongsToBucket = YES; break; default: diff --git a/AliyunOSSSDK/OSSClient.h b/AliyunOSSSDK/OSSClient.h index 7b54a806..1a15e363 100644 --- a/AliyunOSSSDK/OSSClient.h +++ b/AliyunOSSSDK/OSSClient.h @@ -16,6 +16,8 @@ @class OSSPutBucketLoggingRequest; @class OSSGetBucketLoggingRequest; @class OSSDeleteBucketLoggingRequest; +@class OSSPutBucketRefererRequest; +@class OSSGetBucketRefererRequest; @class OSSGetBucketRequest; @class OSSHeadObjectRequest; @@ -176,6 +178,22 @@ NS_ASSUME_NONNULL_BEGIN */ - (OSSTask *)deleteBucketLogging:(OSSDeleteBucketLoggingRequest *)request; +/** + Set the bucket request Referer white list. + + @param request an OSSPutBucketRefererRequest instance. + @return an OSSTask instance. + */ +- (OSSTask *)putBucketReferer:(OSSPutBucketRefererRequest *)request; + +/** + Get the bucket request Referer white list. + + @param request an OSSGetBucketRefererRequest instance. + @return an OSSTask instance. + */ +- (OSSTask *)getBucketReferer:(OSSGetBucketRefererRequest *)request; + @end diff --git a/AliyunOSSSDK/OSSClient.m b/AliyunOSSSDK/OSSClient.m index 95c53071..639289c9 100644 --- a/AliyunOSSSDK/OSSClient.m +++ b/AliyunOSSSDK/OSSClient.m @@ -16,8 +16,8 @@ #import "OSSXMLDictionary.h" #import "OSSReachabilityManager.h" #import "OSSIPv6Adapter.h" +#import "OSSRequest+Utils.h" -#import "OSSNetworkingRequestDelegate.h" #import "OSSAllRequestNeededMessage.h" #import "OSSURLRequestRetryHandler.h" #import "OSSHttpResponseParser.h" @@ -33,63 +33,7 @@ static NSString * const oss_record_info_suffix_with_sequential = @"-sequential"; static NSUInteger const oss_multipart_max_part_number = 5000; //max part number -#pragma mark - OSSRequest and its subClasses's category -/** - * extend OSSRequest to include the ref to networking request object - */ -@interface OSSRequest () - -@property (nonatomic, strong) OSSNetworkingRequestDelegate * requestDelegate; - -@end - - -@interface OSSPutBucketACLRequest (ACL) - -@property (nonatomic, copy, readonly) NSString *acl; - -@end - - -@implementation OSSPutBucketACLRequest (ACL) - -- (NSString *)acl { - NSString *rAcl = nil; - switch (self.aclType) { - case OSSACLPublicRead: - rAcl = @"public-read"; - break; - case OSSACLPublicReadAndWrite: - rAcl = @"public-read-write"; - break; - - default: - rAcl = @"private"; - break; - } - - return rAcl; -} - -@end - -@interface OSSPutBucketLoggingRequest (Logging) - -@property (nonatomic, copy, readonly) NSData *xmlBody; - -@end - -@implementation OSSPutBucketLoggingRequest (Logging) - -- (NSData *)xmlBody -{ - NSMutableString *sRetBody = [NSMutableString string]; - [sRetBody appendFormat:@"\n\n\n%@\n%@\n\n", self.targetBucketName, self.targetPrefix]; - return [sRetBody dataUsingEncoding:NSUTF8StringEncoding]; -} - -@end #pragma mark - OSSClient @@ -618,6 +562,43 @@ - (OSSTask *)deleteBucketLogging:(OSSDeleteBucketLoggingRequest *)request return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; } +- (OSSTask *)putBucketReferer:(OSSPutBucketRefererRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypePutBucketReferer]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodPUT; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + requestDelegate.uploadingData = request.xmlBody; + + requestDelegate.operType = OSSOperationTypePutBucketReferer; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + +- (OSSTask *)getBucketReferer:(OSSGetBucketRefererRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeGetBucketReferer]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodGET; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + + requestDelegate.operType = OSSOperationTypeGetBucketReferer; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + @end @implementation OSSClient (Object) diff --git a/AliyunOSSSDK/OSSConstants.h b/AliyunOSSSDK/OSSConstants.h index fe7cae6b..35ce6abc 100644 --- a/AliyunOSSSDK/OSSConstants.h +++ b/AliyunOSSSDK/OSSConstants.h @@ -53,6 +53,8 @@ typedef NS_ENUM(NSInteger, OSSOperationType) { OSSOperationTypePutBucketLogging, OSSOperationTypeGetBucketLogging, OSSOperationTypeDeleteBucketLogging, + OSSOperationTypePutBucketReferer, + OSSOperationTypeGetBucketReferer, OSSOperationTypeHeadObject, OSSOperationTypeGetObject, OSSOperationTypeGetObjectACL, diff --git a/AliyunOSSSDK/OSSHttpResponseParser.m b/AliyunOSSSDK/OSSHttpResponseParser.m index 3410fc32..3add9a67 100644 --- a/AliyunOSSSDK/OSSHttpResponseParser.m +++ b/AliyunOSSSDK/OSSHttpResponseParser.m @@ -264,6 +264,85 @@ - (nullable id)constructResultObject return deleteBucketResult; } + case OSSOperationTypePutBucketLogging: + { + OSSPutBucketLoggingResult * putBucketLogging = [OSSPutBucketLoggingResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:putBucketLogging]; + } + return putBucketLogging; + } + + case OSSOperationTypeGetBucketLogging: + { + OSSGetBucketLoggingResult * getBucketLogging = [OSSGetBucketLoggingResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:getBucketLogging]; + } + + if (_collectingData) { + NSDictionary * parsedDict = [NSDictionary oss_dictionaryWithXMLData:_collectingData]; + OSSLogVerbose(@"Get bucket logging dict: %@", parsedDict); + + NSDictionary *loggingInfo = [parsedDict valueForKey:@"LoggingEnabled"]; + if (loggingInfo) { + getBucketLogging.loggingEnabled = YES; + getBucketLogging.targetBucketName = [loggingInfo objectForKey:@"TargetBucket"]; + getBucketLogging.targetPrefix = [loggingInfo objectForKey:@"TargetPrefix"]; + } else { + getBucketLogging.loggingEnabled = NO; + } + } + + return getBucketLogging; + } + + case OSSOperationTypeDeleteBucketLogging: + { + OSSDeleteBucketLoggingResult * deleteBucketLogging = [OSSDeleteBucketLoggingResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:deleteBucketLogging]; + } + + return deleteBucketLogging; + } + + case OSSOperationTypePutBucketReferer: + { + OSSPutBucketRefererResult * putBucketReferer = [OSSPutBucketRefererResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:putBucketReferer]; + } + + return putBucketReferer; + } + + case OSSOperationTypeGetBucketReferer: + { + OSSGetBucketRefererResult * getBucketReferer = [OSSGetBucketRefererResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:getBucketReferer]; + } + + if (_collectingData) { + NSDictionary * parsedDict = [NSDictionary oss_dictionaryWithXMLData:_collectingData]; + OSSLogVerbose(@"Get bucket logging dict: %@", parsedDict); + + if (parsedDict) { + NSString *sAllowEmpty = [parsedDict objectForKey:@"AllowEmptyReferer"]; + if ([sAllowEmpty isEqual:@"true"]) { + getBucketReferer.allowEmpty = YES; + } else { + getBucketReferer.allowEmpty = NO; + } + + getBucketReferer.referers = [[parsedDict objectForKey:@"RefererList"] objectForKey:@"Referer"]; + } + } + + return getBucketReferer; + } + case OSSOperationTypeGetBucket: { OSSGetBucketResult * getBucketResult = [OSSGetBucketResult new]; diff --git a/AliyunOSSSDK/OSSModel.h b/AliyunOSSSDK/OSSModel.h index 33566d3d..99d6166b 100644 --- a/AliyunOSSSDK/OSSModel.h +++ b/AliyunOSSSDK/OSSModel.h @@ -543,6 +543,21 @@ Sets the session Id for background file transmission @interface OSSGetBucketLoggingResult : OSSResult +/** + enable logging or not. + */ +@property (nonatomic, assign) BOOL loggingEnabled; + +/** + target bucket's name + */ +@property (nonatomic, copy) NSString *targetBucketName; + +/** + prefix path name to store the log files + */ +@property (nonatomic, copy) NSString *targetPrefix; + @end @@ -559,6 +574,64 @@ Sets the session Id for background file transmission @end +/** + the request of putting bucket referer operation + */ +@interface OSSPutBucketRefererRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +/** + allow empty request referer or not.default value is YES. + */ +@property (nonatomic, assign) BOOL allowEmpty; + +/** + Referer white list, e.g.:['https://npm.taobao.org','http://cnpmjs.org'] + */ +@property (nonatomic, copy) NSArray *referers; + +@end + +/** + the result of putting bucket referer operation + */ +@interface OSSPutBucketRefererResult : OSSResult + +@end + +/** + the request for getting the bucket request Referer white list. + */ +@interface OSSGetBucketRefererRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +@end + +/** + the result of getting bucket referer operation + */ +@interface OSSGetBucketRefererResult : OSSResult + +/** + allow empty request referer or not. + */ +@property (nonatomic, assign) BOOL allowEmpty; + +/** + Referer white list + */ +@property (nonatomic, copy) NSArray *referers; + +@end + /** The request class to get object metadata */ diff --git a/AliyunOSSSDK/OSSModel.m b/AliyunOSSSDK/OSSModel.m index 4fa76369..ed30ae45 100644 --- a/AliyunOSSSDK/OSSModel.m +++ b/AliyunOSSSDK/OSSModel.m @@ -691,6 +691,41 @@ @implementation OSSDeleteBucketLoggingResult @end +@implementation OSSPutBucketRefererRequest + +- (instancetype)init +{ + self = [super init]; + if (self) { + _allowEmpty = YES; + } + return self; +} + +- (NSDictionary *)requestParams +{ + return @{@"referer" : @""}; +} + +@end + +@implementation OSSPutBucketRefererResult + +@end + +@implementation OSSGetBucketRefererRequest + +- (NSDictionary *)requestParams +{ + return @{@"referer" : @""}; +} + +@end + +@implementation OSSGetBucketRefererResult + +@end + @implementation OSSHeadObjectRequest @end diff --git a/AliyunOSSSDK/OSSRequest+Utils.h b/AliyunOSSSDK/OSSRequest+Utils.h new file mode 100644 index 00000000..c55a1b03 --- /dev/null +++ b/AliyunOSSSDK/OSSRequest+Utils.h @@ -0,0 +1,46 @@ +// +// OSSRequest+Utils.h +// AliyunOSSSDK +// +// Created by huaixu on 2018/11/19. +// Copyright © 2018 aliyun. All rights reserved. +// + +#import "OSSModel.h" +#import "OSSNetworkingRequestDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +#pragma mark - OSSRequest and its subClasses's category + +/** + * extend OSSRequest to include the ref to networking request object + */ +@interface OSSRequest () + +@property (nonatomic, strong) OSSNetworkingRequestDelegate * requestDelegate; + +@end + + +@interface OSSPutBucketACLRequest (ACL) + +@property (nonatomic, copy, readonly) NSString *acl; + +@end + + +@interface OSSPutBucketLoggingRequest (Logging) + +@property (nonatomic, copy, readonly) NSData *xmlBody; + +@end + +@interface OSSPutBucketRefererRequest (Referer) + +@property (nonatomic, copy, readonly) NSData *xmlBody; + +@end + + +NS_ASSUME_NONNULL_END diff --git a/AliyunOSSSDK/OSSRequest+Utils.m b/AliyunOSSSDK/OSSRequest+Utils.m new file mode 100644 index 00000000..cf0da51d --- /dev/null +++ b/AliyunOSSSDK/OSSRequest+Utils.m @@ -0,0 +1,65 @@ +// +// OSSRequest+Utils.m +// AliyunOSSSDK +// +// Created by huaixu on 2018/11/19. +// Copyright © 2018 aliyun. All rights reserved. +// + +#import "OSSRequest+Utils.h" + +@implementation OSSPutBucketACLRequest (ACL) + +- (NSString *)acl { + NSString *rAcl = nil; + switch (self.aclType) { + case OSSACLPublicRead: + rAcl = @"public-read"; + break; + case OSSACLPublicReadAndWrite: + rAcl = @"public-read-write"; + break; + + default: + rAcl = @"private"; + break; + } + + return rAcl; +} + +@end + +@implementation OSSPutBucketLoggingRequest (Logging) + +- (NSData *)xmlBody +{ + NSMutableString *sRetBody = [NSMutableString string]; + [sRetBody appendFormat:@"\n\n\n%@\n%@\n\n", self.targetBucketName, self.targetPrefix]; + return [sRetBody dataUsingEncoding:NSUTF8StringEncoding]; +} + +@end + + +@implementation OSSPutBucketRefererRequest (Referer) + +- (NSData *)xmlBody +{ + NSString *s_allowEmpty = self.allowEmpty ? @"true" : @"false"; + NSMutableString *sRetBody = [NSMutableString string]; + [sRetBody appendFormat:@"\n\n%@", s_allowEmpty]; + + if (self.referers.count > 0) { + [sRetBody appendFormat:@"\n"]; + for (NSString *referer in self.referers) { + [sRetBody appendFormat:@"\n%@", referer]; + } + [sRetBody appendFormat:@"\n"]; + } + [sRetBody appendFormat:@"\n"]; + + return [sRetBody dataUsingEncoding:NSUTF8StringEncoding]; +} + +@end From c9795ce26daec43e5354dff97b7dd91344c2331c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Mon, 19 Nov 2018 14:50:21 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E6=B7=BB=E5=8A=A0bucket=20referer=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AliyunOSSiOSTests/OSSBucketTests.m | 51 +++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/AliyunOSSiOSTests/OSSBucketTests.m b/AliyunOSSiOSTests/OSSBucketTests.m index 5621c4e2..2cbf186f 100644 --- a/AliyunOSSiOSTests/OSSBucketTests.m +++ b/AliyunOSSiOSTests/OSSBucketTests.m @@ -175,13 +175,13 @@ - (void)testBucketLogging [[_client createBucket:createBucketSrcReq] waitUntilFinished]; OSSCreateBucketRequest *createBucketTargetReq = [OSSCreateBucketRequest new]; - createBucketTargetReq.bucketName = @"oss-ios-bucket-logging-target"; + createBucketTargetReq.bucketName = @"oss-ios-bucket-logging-bucket"; [[_client createBucket:createBucketTargetReq] waitUntilFinished]; OSSPutBucketLoggingRequest *putBucketLoggingReq = [[OSSPutBucketLoggingRequest alloc] init]; putBucketLoggingReq.bucketName = @"oss-ios-bucket-logging-source"; - putBucketLoggingReq.targetBucketName = @"oss-ios-bucket-logging-target"; - putBucketLoggingReq.targetPrefix = @"oss-ios-bucket-target-prefix"; + putBucketLoggingReq.targetBucketName = @"oss-ios-bucket-logging-bucket"; + putBucketLoggingReq.targetPrefix = @"oss-ios-bucket-logging-prefix"; OSSTask *putBucketLoggingTask = [_client putBucketLogging:putBucketLoggingReq]; @@ -197,6 +197,12 @@ - (void)testBucketLogging [[getBucketLoggingTask continueWithBlock:^id(OSSTask *task) { XCTAssertNil(task.error); + XCTAssertNotNil(task.result); + OSSGetBucketLoggingResult *result = (OSSGetBucketLoggingResult *)task.result; + XCTAssertTrue(result.loggingEnabled); + XCTAssertTrue([result.targetPrefix isEqualToString:@"oss-ios-bucket-logging-prefix"]); + XCTAssertTrue([result.targetBucketName isEqualToString:@"oss-ios-bucket-logging-bucket"]); + return nil; }] waitUntilFinished]; @@ -210,8 +216,45 @@ - (void)testBucketLogging return nil; }] waitUntilFinished]; - [OSSTestUtils cleanBucket:@"oss-ios-bucket-logging-target" with:_client]; + [OSSTestUtils cleanBucket:@"oss-ios-bucket-logging-bucket" with:_client]; [OSSTestUtils cleanBucket:@"oss-ios-bucket-logging-source" with:_client]; } +- (void)testBucketReferer +{ + OSSCreateBucketRequest *createBucketSrcReq = [OSSCreateBucketRequest new]; + createBucketSrcReq.bucketName = @"oss-ios-sdk-test-bucket-referer"; + [[_client createBucket:createBucketSrcReq] waitUntilFinished]; + + OSSPutBucketRefererRequest *putBucketRefererReq = [[OSSPutBucketRefererRequest alloc] init]; + putBucketRefererReq.bucketName = @"oss-ios-sdk-test-bucket-referer"; + putBucketRefererReq.allowEmpty = YES; + putBucketRefererReq.referers = @[@"http://www.aliyun.com", @"http://www.taobao.com"]; + + OSSTask *putBucketRefererTask = [_client putBucketReferer:putBucketRefererReq]; + + [[putBucketRefererTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + return nil; + }] waitUntilFinished]; + + OSSGetBucketRefererRequest *getBucketRefererReq = [[OSSGetBucketRefererRequest alloc] init]; + getBucketRefererReq.bucketName = @"oss-ios-sdk-test-bucket-referer"; + + OSSTask *getBucketRefererTask = [_client getBucketReferer:getBucketRefererReq]; + + [[getBucketRefererTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + XCTAssertNotNil(task.result); + OSSGetBucketRefererResult *result = (OSSGetBucketRefererResult *)task.result; + XCTAssertTrue(result.allowEmpty); + XCTAssertTrue([result.referers containsObject:@"http://www.aliyun.com"]); + XCTAssertTrue([result.referers containsObject:@"http://www.taobao.com"]); + + return nil; + }] waitUntilFinished]; + + [OSSTestUtils cleanBucket:@"oss-ios-sdk-test-bucket-referer" with:_client]; +} + @end From b3341162c0ed61f24ef656466e4c943a0e8f8208 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Tue, 20 Nov 2018 19:37:07 +0800 Subject: [PATCH 8/9] bucket lifecycle api --- AliyunOSSSDK/OSSAllRequestNeededMessage.m | 3 + AliyunOSSSDK/OSSClient.h | 27 ++++++ AliyunOSSSDK/OSSClient.m | 55 +++++++++++ AliyunOSSSDK/OSSConstants.h | 3 + AliyunOSSSDK/OSSHttpResponseParser.m | 74 ++++++++++++++ AliyunOSSSDK/OSSModel.h | 112 ++++++++++++++++++++++ AliyunOSSSDK/OSSModel.m | 63 ++++++++++++ AliyunOSSSDK/OSSRequest+Utils.h | 6 ++ AliyunOSSSDK/OSSRequest+Utils.m | 39 ++++++++ 9 files changed, 382 insertions(+) diff --git a/AliyunOSSSDK/OSSAllRequestNeededMessage.m b/AliyunOSSSDK/OSSAllRequestNeededMessage.m index bac315a2..64b615f2 100644 --- a/AliyunOSSSDK/OSSAllRequestNeededMessage.m +++ b/AliyunOSSSDK/OSSAllRequestNeededMessage.m @@ -80,6 +80,9 @@ - (BOOL)operationBelongsToBucket:(OSSOperationType)type { case OSSOperationTypeDeleteBucketLogging: case OSSOperationTypePutBucketReferer: case OSSOperationTypeGetBucketReferer: + case OSSOperationTypePutBucketLifecycle: + case OSSOperationTypeGetBucketLifecycle: + case OSSOperationTypeDeleteBucketLifecycle: belongsToBucket = YES; break; default: diff --git a/AliyunOSSSDK/OSSClient.h b/AliyunOSSSDK/OSSClient.h index 1a15e363..8f113fbe 100644 --- a/AliyunOSSSDK/OSSClient.h +++ b/AliyunOSSSDK/OSSClient.h @@ -18,6 +18,9 @@ @class OSSDeleteBucketLoggingRequest; @class OSSPutBucketRefererRequest; @class OSSGetBucketRefererRequest; +@class OSSPutBucketLifecycleRequest; +@class OSSGetBucketLifecycleRequest; +@class OSSDeleteBucketLifecycleRequest; @class OSSGetBucketRequest; @class OSSHeadObjectRequest; @@ -194,6 +197,30 @@ NS_ASSUME_NONNULL_BEGIN */ - (OSSTask *)getBucketReferer:(OSSGetBucketRefererRequest *)request; +/** + The bucket owner can set the lifecycle of a bucket with the PutBucketLifecycle request. After Lifecycle is enabled, OSS automatically deletes the objects or transitions the objects (to another storage class) corresponding the lifecycle rules on a regular basis.for more information,please refer to https://www.alibabacloud.com/help/doc-detail/31964.htm + + @param request an OSSPutBucketLifecycleRequest instance. + @return an OSSTask instance. + */ +- (OSSTask *)putBucketLifecycle:(OSSPutBucketLifecycleRequest *)request; + +/** + GetBucketLifecycle is used to view the lifecycle configuration of a bucket.for more information,please refer to https://www.alibabacloud.com/help/doc-detail/31972.htm + + @param request an OSSGetBucketLifecycleRequest instance. + @return an OSSTask instance. + */ +- (OSSTask *)getBucketLifecycle:(OSSGetBucketLifecycleRequest *)request; + +/** + The DeleteBucketLifecycle interface is used to delete the lifecycle configuration of a specified bucket.for more information,please refer to https://www.alibabacloud.com/help/doc-detail/31976.htm + + @param request an OSSDeleteBucketLifecycleRequest instance + @return an OSSTask instance + */ +- (OSSTask *)deleteBucketLifecycle:(OSSDeleteBucketLifecycleRequest *)request; + @end diff --git a/AliyunOSSSDK/OSSClient.m b/AliyunOSSSDK/OSSClient.m index 639289c9..787de490 100644 --- a/AliyunOSSSDK/OSSClient.m +++ b/AliyunOSSSDK/OSSClient.m @@ -599,6 +599,61 @@ - (OSSTask *)getBucketReferer:(OSSGetBucketRefererRequest *)request return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; } +- (OSSTask *)putBucketLifecycle:(OSSPutBucketLifecycleRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypePutBucketLifecycle]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodPUT; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + requestDelegate.uploadingData = request.xmlBody; + + requestDelegate.operType = OSSOperationTypePutBucketLifecycle; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + +- (OSSTask *)getBucketLifecycle:(OSSGetBucketLifecycleRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeGetBucketLifecycle]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodGET; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + + requestDelegate.operType = OSSOperationTypeGetBucketLifecycle; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + +- (OSSTask *)deleteBucketLifecycle:(OSSDeleteBucketLifecycleRequest *)request +{ + OSSNetworkingRequestDelegate * requestDelegate = request.requestDelegate; + + requestDelegate.responseParser = [[OSSHttpResponseParser alloc] initForOperationType:OSSOperationTypeDeleteBucketLifecycle]; + + OSSAllRequestNeededMessage *neededMsg = [[OSSAllRequestNeededMessage alloc] init]; + neededMsg.endpoint = self.endpoint; + neededMsg.httpMethod = OSSHTTPMethodDELETE; + neededMsg.bucketName = request.bucketName; + neededMsg.params = request.requestParams; + requestDelegate.allNeededMessage = neededMsg; + + requestDelegate.operType = OSSOperationTypeDeleteBucketLifecycle; + + return [self invokeRequest:requestDelegate requireAuthentication:request.isAuthenticationRequired]; +} + @end @implementation OSSClient (Object) diff --git a/AliyunOSSSDK/OSSConstants.h b/AliyunOSSSDK/OSSConstants.h index 35ce6abc..60b121b6 100644 --- a/AliyunOSSSDK/OSSConstants.h +++ b/AliyunOSSSDK/OSSConstants.h @@ -55,6 +55,9 @@ typedef NS_ENUM(NSInteger, OSSOperationType) { OSSOperationTypeDeleteBucketLogging, OSSOperationTypePutBucketReferer, OSSOperationTypeGetBucketReferer, + OSSOperationTypePutBucketLifecycle, + OSSOperationTypeGetBucketLifecycle, + OSSOperationTypeDeleteBucketLifecycle, OSSOperationTypeHeadObject, OSSOperationTypeGetObject, OSSOperationTypeGetObjectACL, diff --git a/AliyunOSSSDK/OSSHttpResponseParser.m b/AliyunOSSSDK/OSSHttpResponseParser.m index 3add9a67..cdb72699 100644 --- a/AliyunOSSSDK/OSSHttpResponseParser.m +++ b/AliyunOSSSDK/OSSHttpResponseParser.m @@ -343,6 +343,80 @@ - (nullable id)constructResultObject return getBucketReferer; } + case OSSOperationTypePutBucketLifecycle: + { + OSSPutBucketLifecycleResult *putBucketLifecycleRes = [OSSPutBucketLifecycleResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:putBucketLifecycleRes]; + } + + return putBucketLifecycleRes; + } + + case OSSOperationTypeGetBucketLifecycle: + { + OSSGetBucketLifecycleResult *getBucketLifecycleRes = [OSSGetBucketLifecycleResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:getBucketLifecycleRes]; + } + + if (_collectingData) { + NSDictionary * parsedDict = [NSDictionary oss_dictionaryWithXMLData:_collectingData]; + OSSLogVerbose(@"Get bucket logging dict: %@", parsedDict); + + NSArray *rules = [parsedDict objectForKey:@"Rule"]; + if (rules.count > 0) { + NSMutableArray *ruleArray = [NSMutableArray array]; + for (NSDictionary *ruleInfo in rules) { + OSSBucketLifecycleRule *rule = [[OSSBucketLifecycleRule alloc] init]; + NSString *status = [ruleInfo objectForKey:@"Status"]; + if ([status isEqualToString:@"Enabled"]) { + rule.status = YES; + } else { + rule.status = NO; + } + + rule.identifier = [ruleInfo objectForKey:@"ID"]; + rule.prefix = [ruleInfo objectForKey:@"Prefix"]; + + NSDictionary *expirationInfo = [ruleInfo objectForKey:@"Expiration"]; + rule.days = [expirationInfo objectForKey:@"Days"]; + rule.expireDate = [expirationInfo objectForKey:@"Date"]; + + NSDictionary *multipartInfo = [ruleInfo objectForKey:@"AbortMultipartUpload"]; + rule.multipartDays = [multipartInfo objectForKey:@"Days"]; + rule.multipartExpireDate = [multipartInfo objectForKey:@"Date"]; + + NSDictionary *transitionInfo = [ruleInfo objectForKey:@"Transition"]; + NSString *storageClass = [transitionInfo objectForKey:@"StorageClass"]; + if ([storageClass isEqualToString:@"IA"]) { + rule.iaDays = [transitionInfo objectForKey:@"Days"]; + rule.iaExpireDate = [transitionInfo objectForKey:@"Date"]; + } else if ([storageClass isEqualToString:@"Archive"]) { + rule.archiveDays = [transitionInfo objectForKey:@"Days"]; + rule.archiveExpireDate = [transitionInfo objectForKey:@"Date"]; + } + + [ruleArray addObject:rule]; + } + + getBucketLifecycleRes.rules = [ruleArray copy]; + } + } + + return getBucketLifecycleRes; + } + + case OSSOperationTypeDeleteBucketLifecycle: + { + OSSDeleteBucketLifecycleResult *deleteBucketLifecycleRes = [OSSDeleteBucketLifecycleResult new]; + if (_response) { + [self parseResponseHeader:_response toResultObject:deleteBucketLifecycleRes]; + } + + return deleteBucketLifecycleRes; + } + case OSSOperationTypeGetBucket: { OSSGetBucketResult * getBucketResult = [OSSGetBucketResult new]; diff --git a/AliyunOSSSDK/OSSModel.h b/AliyunOSSSDK/OSSModel.h index 99d6166b..abead341 100644 --- a/AliyunOSSSDK/OSSModel.h +++ b/AliyunOSSSDK/OSSModel.h @@ -632,6 +632,118 @@ Sets the session Id for background file transmission @end + +@interface OSSBucketLifecycleRule : NSObject + +/** + rule id, if not set, OSS will auto create it with random string. + */ +@property (nonatomic, copy) NSString *identifier; + +/** + store prefix + */ +@property (nonatomic, copy) NSString *prefix; + +/** + rule status, whether use this rule.default value is YES. + */ +@property (nonatomic, assign) BOOL status; + +/** + expire after the days + */ +@property (nonatomic, copy) NSString *days; + +/** + expire date, e.g.: 2022-10-11T00:00:00.000Z date and days only set one. + */ +@property (nonatomic, copy) NSString *expireDate; + +/** + expire after the days for multipart + */ +@property (nonatomic, copy) NSString *multipartDays; + +/** + expire date for multipart, e.g.: 2022-10-11T00:00:00.000Z date and days only set one. + */ +@property (nonatomic, copy) NSString *multipartExpireDate; + +/** + expire after the days for bucket storage class IA + */ +@property (nonatomic, copy) NSString *iaDays; + +/** + expire date for bucket storage class IA, e.g.: 2022-10-11T00:00:00.000Z date and days only set one. + */ +@property (nonatomic, copy) NSString *iaExpireDate; + +/** + expire after the days for bucket storage class archive + */ +@property (nonatomic, copy) NSString *archiveDays; + +/** + expire date for bucket storage class archive, e.g.: 2022-10-11T00:00:00.000Z date and days only set one. + */ +@property (nonatomic, copy) NSString *archiveExpireDate; + +@end + + +@interface OSSPutBucketLifecycleRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +/** + rule config list, each Rule is an instance of OSSBucketLifecycleRule. + */ +@property (nonatomic, copy) NSArray *rules; + +@end + +@interface OSSPutBucketLifecycleResult : OSSResult + +@end + + +@interface OSSGetBucketLifecycleRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +@end + + +@interface OSSGetBucketLifecycleResult : OSSResult + +/** + rule config list, each Rule is an instance of OSSBucketLifecycleRule. + */ +@property (nonatomic, copy) NSArray *rules; + +@end + +@interface OSSDeleteBucketLifecycleRequest : OSSRequest + +/** + bucket name + */ +@property (nonatomic, copy) NSString *bucketName; + +@end + +@interface OSSDeleteBucketLifecycleResult : OSSResult + +@end + /** The request class to get object metadata */ diff --git a/AliyunOSSSDK/OSSModel.m b/AliyunOSSSDK/OSSModel.m index ed30ae45..1e4253a3 100644 --- a/AliyunOSSSDK/OSSModel.m +++ b/AliyunOSSSDK/OSSModel.m @@ -726,6 +726,69 @@ @implementation OSSGetBucketRefererResult @end +@implementation OSSBucketLifecycleRule + +- (instancetype)init +{ + self = [super init]; + if (self) { + _status = YES; + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + OSSBucketLifecycleRule *other = [[[self class] allocWithZone:zone] init]; + other.identifier = self.identifier; + other.expireDate = self.expireDate; + other.prefix = self.prefix; + other.status = self.status; + other.days = self.days; + + return other; +} + +@end + +@implementation OSSPutBucketLifecycleRequest + +- (NSDictionary *)requestParams +{ + return @{@"lifecycle" : @""}; +} + +@end + +@implementation OSSPutBucketLifecycleResult + +@end + +@implementation OSSGetBucketLifecycleRequest + +- (NSDictionary *)requestParams +{ + return @{@"lifecycle" : @""}; +} + +@end + +@implementation OSSGetBucketLifecycleResult + +@end + +@implementation OSSDeleteBucketLifecycleRequest + +- (NSDictionary *)requestParams +{ + return @{@"lifecycle" : @""}; +} + +@end + +@implementation OSSDeleteBucketLifecycleResult + +@end + @implementation OSSHeadObjectRequest @end diff --git a/AliyunOSSSDK/OSSRequest+Utils.h b/AliyunOSSSDK/OSSRequest+Utils.h index c55a1b03..f88b93b4 100644 --- a/AliyunOSSSDK/OSSRequest+Utils.h +++ b/AliyunOSSSDK/OSSRequest+Utils.h @@ -42,5 +42,11 @@ NS_ASSUME_NONNULL_BEGIN @end +@interface OSSPutBucketLifecycleRequest (Lifecycle) + +@property (nonatomic, copy, readonly) NSData *xmlBody; + +@end + NS_ASSUME_NONNULL_END diff --git a/AliyunOSSSDK/OSSRequest+Utils.m b/AliyunOSSSDK/OSSRequest+Utils.m index cf0da51d..72a5d793 100644 --- a/AliyunOSSSDK/OSSRequest+Utils.m +++ b/AliyunOSSSDK/OSSRequest+Utils.m @@ -63,3 +63,42 @@ - (NSData *)xmlBody } @end + + +@implementation OSSPutBucketLifecycleRequest (Lifecycle) + +- (NSData *)xmlBody +{ + NSMutableString *sRetBody = [NSMutableString string]; + [sRetBody appendFormat:@"\n"]; + + if (self.rules.count > 0) { + for (OSSBucketLifecycleRule *rule in self.rules) { + NSString *s_status = rule.status ? @"Enabled" : @"Disabled"; + NSString *s_expiration = rule.days ? [NSString stringWithFormat:@"%@", rule.days] : [NSString stringWithFormat:@"%@", rule.expireDate]; + + [sRetBody appendFormat:@"\n\n%@\n%@\n%@\n\n%@\n", rule.identifier, rule.prefix, s_status, s_expiration]; + + if (rule.multipartDays || rule.multipartExpireDate) { + NSString *s_expirationForMultipart = rule.multipartDays ? [NSString stringWithFormat:@"\n%@\n", rule.multipartDays] : [NSString stringWithFormat:@"\n%@\n", rule.multipartExpireDate]; + [sRetBody appendString:s_expirationForMultipart]; + } + + if (rule.iaDays || rule.iaExpireDate) { + NSString *s_expirationForMultipart = rule.iaDays ? [NSString stringWithFormat:@"\n\n%@\nIA\n", rule.iaDays] : [NSString stringWithFormat:@"\n%@\nIA\n", rule.iaExpireDate]; + [sRetBody appendString:s_expirationForMultipart]; + } else if (rule.archiveDays || rule.archiveExpireDate) { + NSString *s_expirationForMultipart = rule.archiveDays ? [NSString stringWithFormat:@"\n%@\nArchive\n", rule.archiveDays] : [NSString stringWithFormat:@"\n%@\nArchive\n", rule.archiveExpireDate]; + [sRetBody appendString:s_expirationForMultipart]; + } + + [sRetBody appendString:@"\n"]; + } + + } + [sRetBody appendFormat:@"\n"]; + + return [sRetBody dataUsingEncoding:NSUTF8StringEncoding]; +} + +@end From e259e3053a7d727d6f0042e81e11fba70a2d0a6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B6=A6=E7=94=9F?= Date: Tue, 20 Nov 2018 19:37:37 +0800 Subject: [PATCH 9/9] lifecycle api test cases --- AliyunOSSiOSTests/OSSBucketTests.m | 61 ++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/AliyunOSSiOSTests/OSSBucketTests.m b/AliyunOSSiOSTests/OSSBucketTests.m index 2cbf186f..72090c40 100644 --- a/AliyunOSSiOSTests/OSSBucketTests.m +++ b/AliyunOSSiOSTests/OSSBucketTests.m @@ -257,4 +257,65 @@ - (void)testBucketReferer [OSSTestUtils cleanBucket:@"oss-ios-sdk-test-bucket-referer" with:_client]; } +- (void)testBucketLifecycle +{ + NSString *lifecycle_bucket_name = @"oss-ios-sdk-test-bucket-lifecycle"; + OSSCreateBucketRequest *createBucketSrcReq = [OSSCreateBucketRequest new]; + createBucketSrcReq.bucketName = lifecycle_bucket_name; + [[_client createBucket:createBucketSrcReq] waitUntilFinished]; + + OSSPutBucketLifecycleRequest *putBucketLifecycleReq = [[OSSPutBucketLifecycleRequest alloc] init]; + putBucketLifecycleReq.bucketName = lifecycle_bucket_name; + + OSSBucketLifecycleRule *rule1 = [[OSSBucketLifecycleRule alloc] init]; + + rule1.identifier = @"1"; + rule1.status = YES; + rule1.prefix = @"rule1prefix"; + rule1.days = @"2"; + rule1.iaDays = @"1"; + rule1.multipartDays = @"1"; + + OSSBucketLifecycleRule *rule2 = [[OSSBucketLifecycleRule alloc] init]; + + rule2.identifier = @"2"; + rule2.status = YES; + rule2.prefix = @"rule2prefix"; + rule2.days = @"3"; + rule2.iaDays = @"2"; + rule2.multipartDays = @"2"; + + putBucketLifecycleReq.rules = @[rule1, rule2]; + + OSSTask *putBucketLifecycleTask = [_client putBucketLifecycle:putBucketLifecycleReq]; + + [[putBucketLifecycleTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + return nil; + }] waitUntilFinished]; + + OSSGetBucketLifecycleRequest *getBucketLifecycleReq = [[OSSGetBucketLifecycleRequest alloc] init]; + getBucketLifecycleReq.bucketName = lifecycle_bucket_name; + + OSSTask *getBucketLifecycleTask = [_client getBucketLifecycle:getBucketLifecycleReq]; + + [[getBucketLifecycleTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + + return nil; + }] waitUntilFinished]; + + OSSDeleteBucketLifecycleRequest *deleteBucketLifecycleReq = [[OSSDeleteBucketLifecycleRequest alloc] init]; + deleteBucketLifecycleReq.bucketName = lifecycle_bucket_name; + + OSSTask *deleteBucketLifecycleTask = [_client deleteBucketLifecycle:deleteBucketLifecycleReq]; + [[deleteBucketLifecycleTask continueWithBlock:^id(OSSTask *task) { + XCTAssertNil(task.error); + + return nil; + }] waitUntilFinished]; + + [OSSTestUtils cleanBucket:lifecycle_bucket_name with:_client]; +} + @end