New file |
| | |
| | | // |
| | | // ASICloudFilesCDNRequest.m |
| | | // |
| | | // Created by Michael Mayo on 1/6/10. |
| | | // |
| | | |
| | | #import "ASICloudFilesCDNRequest.h" |
| | | #import "ASICloudFilesContainerXMLParserDelegate.h" |
| | | |
| | | |
| | | @implementation ASICloudFilesCDNRequest |
| | | |
| | | @synthesize accountName, containerName, xmlParserDelegate; |
| | | |
| | | + (id)cdnRequestWithMethod:(NSString *)method query:(NSString *)query { |
| | | NSString *urlString = [NSString stringWithFormat:@"%@%@", [ASICloudFilesRequest cdnManagementURL], query]; |
| | | ASICloudFilesCDNRequest *request = [[[ASICloudFilesCDNRequest alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease]; |
| | | [request setRequestMethod:method]; |
| | | [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; |
| | | return request; |
| | | } |
| | | |
| | | + (id)cdnRequestWithMethod:(NSString *)method containerName:(NSString *)containerName { |
| | | NSString *urlString = [NSString stringWithFormat:@"%@/%@", [ASICloudFilesRequest cdnManagementURL], containerName]; |
| | | ASICloudFilesCDNRequest *request = [[[ASICloudFilesCDNRequest alloc] initWithURL:[NSURL URLWithString:urlString]] autorelease]; |
| | | [request setRequestMethod:method]; |
| | | [request addRequestHeader:@"X-Auth-Token" value:[ASICloudFilesRequest authToken]]; |
| | | request.containerName = containerName; |
| | | return request; |
| | | } |
| | | |
| | | #pragma mark - |
| | | #pragma mark HEAD - Container Info |
| | | |
| | | + (id)containerInfoRequest:(NSString *)containerName { |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"HEAD" containerName:containerName]; |
| | | return request; |
| | | } |
| | | |
| | | - (BOOL)cdnEnabled { |
| | | NSNumber *enabled = [[self responseHeaders] objectForKey:@"X-CDN-Enabled"]; |
| | | if (!enabled) { |
| | | enabled = [[self responseHeaders] objectForKey:@"X-Cdn-Enabled"]; |
| | | } |
| | | return [enabled boolValue]; |
| | | } |
| | | |
| | | - (NSString *)cdnURI { |
| | | NSString *uri = [[self responseHeaders] objectForKey:@"X-CDN-URI"]; |
| | | if (!uri) { |
| | | uri = [[self responseHeaders] objectForKey:@"X-Cdn-Uri"]; |
| | | } |
| | | return uri; |
| | | } |
| | | |
| | | - (NSString *)cdnSSLURI { |
| | | NSString *uri = [[self responseHeaders] objectForKey:@"X-CDN-SSL-URI"]; |
| | | if (!uri) { |
| | | uri = [[self responseHeaders] objectForKey:@"X-Cdn-Ssl-Uri"]; |
| | | } |
| | | return uri; |
| | | } |
| | | |
| | | - (NSUInteger)cdnTTL { |
| | | NSNumber *ttl = [[self responseHeaders] objectForKey:@"X-TTL"]; |
| | | if (!ttl) { |
| | | ttl = [[self responseHeaders] objectForKey:@"X-Ttl"]; |
| | | } |
| | | return [ttl intValue]; |
| | | } |
| | | |
| | | #pragma mark - |
| | | #pragma mark GET - CDN Container Lists |
| | | |
| | | + (id)listRequest { |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"GET" query:@"?format=xml"]; |
| | | return request; |
| | | } |
| | | |
| | | + (id)listRequestWithLimit:(NSUInteger)limit marker:(NSString *)marker enabledOnly:(BOOL)enabledOnly { |
| | | NSString *query = @"?format=xml"; |
| | | |
| | | if (limit > 0) { |
| | | query = [query stringByAppendingString:[NSString stringWithFormat:@"&limit=%i", limit]]; |
| | | } |
| | | |
| | | if (marker) { |
| | | query = [query stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", marker]]; |
| | | } |
| | | |
| | | if (limit > 0) { |
| | | query = [query stringByAppendingString:[NSString stringWithFormat:@"&limit=%i", limit]]; |
| | | } |
| | | |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"GET" query:query]; |
| | | return request; |
| | | } |
| | | |
| | | - (NSArray *)containers { |
| | | if (xmlParserDelegate.containerObjects) { |
| | | return xmlParserDelegate.containerObjects; |
| | | } |
| | | |
| | | NSXMLParser *parser = [[[NSXMLParser alloc] initWithData:[self responseData]] autorelease]; |
| | | if (xmlParserDelegate == nil) { |
| | | xmlParserDelegate = [[ASICloudFilesContainerXMLParserDelegate alloc] init]; |
| | | } |
| | | |
| | | [parser setDelegate:xmlParserDelegate]; |
| | | [parser setShouldProcessNamespaces:NO]; |
| | | [parser setShouldReportNamespacePrefixes:NO]; |
| | | [parser setShouldResolveExternalEntities:NO]; |
| | | [parser parse]; |
| | | |
| | | return xmlParserDelegate.containerObjects; |
| | | } |
| | | |
| | | #pragma mark - |
| | | #pragma mark PUT - CDN Enable Container |
| | | |
| | | // PUT /<api version>/<account>/<container> |
| | | // PUT operations against a Container are used to CDN-enable that Container. |
| | | // Include an HTTP header of X-TTL to specify a custom TTL. |
| | | + (id)putRequestWithContainer:(NSString *)containerName { |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"PUT" containerName:containerName]; |
| | | return request; |
| | | } |
| | | |
| | | + (id)putRequestWithContainer:(NSString *)containerName ttl:(NSUInteger)ttl { |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"PUT" containerName:containerName]; |
| | | [request addRequestHeader:@"X-Ttl" value:[NSString stringWithFormat:@"%i", ttl]]; |
| | | return request; |
| | | } |
| | | |
| | | #pragma mark - |
| | | #pragma mark POST - Adjust CDN Attributes |
| | | |
| | | // POST /<api version>/<account>/<container> |
| | | // POST operations against a CDN-enabled Container are used to adjust CDN attributes. |
| | | // The POST operation can be used to set a new TTL cache expiration or to enable/disable public sharing over the CDN. |
| | | // X-TTL: 86400 |
| | | // X-CDN-Enabled: True |
| | | + (id)postRequestWithContainer:(NSString *)containerName { |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"POST" containerName:containerName]; |
| | | return request; |
| | | } |
| | | |
| | | + (id)postRequestWithContainer:(NSString *)containerName cdnEnabled:(BOOL)cdnEnabled ttl:(NSUInteger)ttl { |
| | | ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest cdnRequestWithMethod:@"POST" containerName:containerName]; |
| | | if (ttl > 0) { |
| | | [request addRequestHeader:@"X-Ttl" value:[NSString stringWithFormat:@"%i", ttl]]; |
| | | } |
| | | [request addRequestHeader:@"X-CDN-Enabled" value:cdnEnabled ? @"True" : @"False"]; |
| | | return request; |
| | | } |
| | | |
| | | #pragma mark - |
| | | #pragma mark Memory Management |
| | | |
| | | -(void)dealloc { |
| | | [accountName release]; |
| | | [containerName release]; |
| | | [xmlParserDelegate release]; |
| | | [super dealloc]; |
| | | } |
| | | |
| | | @end |