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