Revision 8fb25a1b asi-http-request-with-pithos/Classes/Pithos/ASIPithosRequest.m
b/asi-http-request-with-pithos/Classes/Pithos/ASIPithosRequest.m | ||
---|---|---|
44 | 44 |
@synthesize currentElement, currentContent, currentAccount; |
45 | 45 |
|
46 | 46 |
#pragma mark - |
47 |
#pragma mark Constructors |
|
48 |
|
|
49 |
+ (id)authRequestWithMethod:(NSString *)method pithos:(ASIPithos *)pithos queryString:(NSString *)queryString useAuthToken:(BOOL)useAuthToken { |
|
50 |
NSString *urlString = [NSString stringWithString:pithos.authURL]; |
|
51 |
if (queryString) |
|
52 |
urlString = [urlString stringByAppendingString:queryString]; |
|
53 |
|
|
54 |
ASIPithosRequest *request = [self requestWithURL:[NSURL URLWithString:urlString]]; |
|
55 |
[request setRequestMethod:method]; |
|
56 |
if (useAuthToken) |
|
57 |
[request addRequestHeader:@"X-Auth-Token" value:pithos.authToken]; |
|
58 |
return request; |
|
59 |
} |
|
60 |
|
|
61 |
+ (id)authRequestWithMethod:(NSString *)method pithos:(ASIPithos *)pithos useAuthToken:(BOOL)useAuthToken { |
|
62 |
return [self authRequestWithMethod:method pithos:pithos queryString:nil useAuthToken:useAuthToken]; |
|
63 |
} |
|
64 |
|
|
65 |
#pragma mark - |
|
66 | 47 |
#pragma mark Memory Management |
67 | 48 |
|
68 | 49 |
- (void)dealloc { |
... | ... | |
74 | 55 |
} |
75 | 56 |
|
76 | 57 |
#pragma mark - |
77 |
#pragma mark Authentication
|
|
58 |
#pragma mark Service Catalog
|
|
78 | 59 |
|
79 |
+ (id)authenticationRequestWithPithos:(ASIPithos *)pithos { |
|
80 |
ASIPithosRequest *request = [self authRequestWithMethod:@"GET" pithos:pithos useAuthToken:NO]; |
|
81 |
[request addRequestHeader:@"X-Auth-User" value:pithos.authUser]; |
|
82 |
[request addRequestHeader:@"X-Auth-Key" value:pithos.authKey]; |
|
83 |
return request; |
|
60 |
// POST tokensURL |
|
61 |
+ (id)serviceCatalogRequestWithPithos:(ASIPithos *)pithos { |
|
62 |
ASIPithosRequest *request = [self requestWithURL:[NSURL URLWithString:pithos.tokensURL]]; |
|
63 |
[request setRequestMethod:@"POST"]; |
|
64 |
[request addRequestHeader:@"Content-Type" value:@"application/json"]; |
|
65 |
if (pithos.authToken.length) |
|
66 |
[request appendPostData:[[NSString stringWithFormat:@"{\"auth\":{\"token\":{\"id\":\"%@\"}}}", pithos.authToken] |
|
67 |
dataUsingEncoding:NSUTF8StringEncoding]]; |
|
68 |
request.validatesSecureCertificate = !pithos.ignoreSSLErrors; |
|
69 |
return request; |
|
84 | 70 |
} |
85 | 71 |
|
86 |
+ (ASIPithos *)authenticateWithPithos:(ASIPithos *)pithos error:(NSError **)error { |
|
87 |
ASIPithosRequest *request = [self authenticationRequestWithPithos:pithos]; |
|
88 |
[request startSynchronous]; |
|
89 |
// XXX start asynchronous with polling loop? |
|
90 |
|
|
91 |
if (error != NULL) { |
|
92 |
*error = [request error]; |
|
93 |
if (!*error) { |
|
94 |
NSDictionary *responseHeaders = [request responseHeaders]; |
|
95 |
pithos.authToken = [responseHeaders objectForKey:@"X-Auth-Token"]; |
|
96 |
pithos.storageURL = [responseHeaders objectForKey:@"X-Storage-Url"]; |
|
97 |
return pithos; |
|
98 |
} |
|
99 |
} |
|
100 |
return nil; |
|
72 |
- (NSDictionary *)access { |
|
73 |
SBJsonParser *parser = [[[SBJsonParser alloc] init] autorelease]; |
|
74 |
NSDictionary *access = [[parser objectWithString:[self responseString]] objectForKey:@"access"]; |
|
75 |
return access; |
|
76 |
} |
|
77 |
|
|
78 |
- (NSDictionary *)token { |
|
79 |
return [[self access] objectForKey:@"token"]; |
|
80 |
} |
|
81 |
|
|
82 |
- (NSArray *)serviceCatalog { |
|
83 |
return [[self access] objectForKey:@"serviceCatalog"]; |
|
84 |
} |
|
85 |
|
|
86 |
- (NSArray *)user { |
|
87 |
return [[self access] objectForKey:@"user"]; |
|
101 | 88 |
} |
102 | 89 |
|
103 | 90 |
#pragma mark - |
... | ... | |
105 | 92 |
|
106 | 93 |
// POST userCatalogURL |
107 | 94 |
+ (id)userCatalogRequestWithPithos:(ASIPithos *)pithos displaynames:(NSArray *)displaynames UUIDs:(NSArray *)UUIDs { |
108 |
NSString *urlString = [NSString stringWithString:pithos.userCatalogURL]; |
|
109 |
|
|
110 |
ASIPithosRequest *request = [self requestWithURL:[NSURL URLWithString:urlString]]; |
|
95 |
ASIPithosRequest *request = [self requestWithURL:[NSURL URLWithString:pithos.userCatalogURL]]; |
|
111 | 96 |
[request setRequestMethod:@"POST"]; |
112 | 97 |
[request addRequestHeader:@"X-Auth-Token" value:pithos.authToken]; |
113 | 98 |
[request addRequestHeader:@"Content-Type" value:@"application/json"]; |
... | ... | |
130 | 115 |
[dataString appendFormat:@"]}"]; |
131 | 116 |
[request appendPostData:[dataString dataUsingEncoding:NSUTF8StringEncoding]]; |
132 | 117 |
|
118 |
request.validatesSecureCertificate = !pithos.ignoreSSLErrors; |
|
133 | 119 |
return request; |
134 | 120 |
} |
135 | 121 |
|
... | ... | |
150 | 136 |
#pragma mark - |
151 | 137 |
#pragma mark GET |
152 | 138 |
|
153 |
// GET authURL
|
|
139 |
// GET storageURLPrefix
|
|
154 | 140 |
+ (id)listSharingAccountsRequestWithPithos:(ASIPithos *)pithos { |
155 |
return [self authRequestWithMethod:@"GET" pithos:pithos queryString:@"?format=xml" useAuthToken:YES];
|
|
141 |
return [self listSharingAccountsRequestWithPithos:pithos limit:0 marker:nil];
|
|
156 | 142 |
} |
157 | 143 |
|
158 |
// GET authURL?[limit=limit]&[marker=marker]
|
|
144 |
// GET storageURLPrefix?[limit=limit]&[marker=marker]
|
|
159 | 145 |
+ (id)listSharingAccountsRequestWithPithos:(ASIPithos *)pithos limit:(NSUInteger)limit marker:(NSString *)marker { |
160 |
NSString *queryString = @"?format=xml";
|
|
146 |
NSString *urlString = [NSString stringWithFormat:@"%@/?format=xml", pithos.storageURLPrefix];
|
|
161 | 147 |
if (limit && (limit > 0)) |
162 |
queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&limit=%lu", limit]];
|
|
148 |
urlString = [urlString stringByAppendingString:[NSString stringWithFormat:@"&limit=%lu", limit]];
|
|
163 | 149 |
if (marker) |
164 |
queryString = [queryString stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", [self encodeToPercentEscape:marker]]]; |
|
165 |
|
|
166 |
return [self authRequestWithMethod:@"GET" pithos:pithos queryString:queryString useAuthToken:YES]; |
|
150 |
urlString = [urlString stringByAppendingString:[NSString stringWithFormat:@"&marker=%@", [self encodeToPercentEscape:marker]]]; |
|
151 |
ASIPithosRequest *request = [self requestWithURL:[NSURL URLWithString:urlString]]; |
|
152 |
[request setRequestMethod:@"GET"]; |
|
153 |
[request addRequestHeader:@"X-Auth-Token" value:pithos.authToken]; |
|
154 |
request.validatesSecureCertificate = !pithos.ignoreSSLErrors; |
|
155 |
return request; |
|
167 | 156 |
} |
168 | 157 |
|
169 | 158 |
- (NSArray *)sharingAccounts { |
... | ... | |
301 | 290 |
|
302 | 291 |
- (void)setRequestUserFromDefaultTo:(NSString *)newAuthUser withPithos:(ASIPithos *)pithos { |
303 | 292 |
NSString *urlString = [self.url description]; |
304 |
NSRange storageURLRange = [urlString rangeOfString:pithos.storageURL];
|
|
293 |
NSRange storageURLRange = [urlString rangeOfString:[pithos.storageURL description]];
|
|
305 | 294 |
if (storageURLRange.length && (storageURLRange.location == 0)) |
306 |
self.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",
|
|
307 |
[pithos storageURLWithAuthUser:newAuthUser],
|
|
295 |
self.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", |
|
296 |
[pithos storageURLWithAuthUser:newAuthUser], |
|
308 | 297 |
[urlString substringFromIndex:storageURLRange.length]]]; |
309 | 298 |
} |
310 | 299 |
|
311 | 300 |
- (void)changeRequestUserFrom:(NSString *)oldAuthUser To:(NSString *)newAuthUser withPithos:(ASIPithos *)pithos { |
312 | 301 |
NSString *urlString = [self.url description]; |
313 |
NSRange storageURLRange = [urlString rangeOfString:[pithos storageURLWithAuthUser:oldAuthUser]];
|
|
302 |
NSRange storageURLRange = [urlString rangeOfString:[[pithos storageURLWithAuthUser:oldAuthUser] description]];
|
|
314 | 303 |
if (storageURLRange.length && (storageURLRange.location == 0)) |
315 |
self.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",
|
|
316 |
[pithos storageURLWithAuthUser:newAuthUser],
|
|
304 |
self.url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", |
|
305 |
[pithos storageURLWithAuthUser:newAuthUser], |
|
317 | 306 |
[urlString substringFromIndex:storageURLRange.length]]]; |
318 | 307 |
} |
319 | 308 |
|
Also available in: Unified diff