-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
ASICloudFilesCDNRequest.m
167 lines (135 loc) · 5.46 KB
/
ASICloudFilesCDNRequest.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
//
// 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