5 // Created by Mike Mayo on 10/11/10.
6 // The OpenStack project is provided under the Apache 2.0 license.
9 #import "APILogEntry.h"
10 #import "OpenStackRequest.h"
13 @implementation APILogEntry
15 @synthesize requestMethod, requestBody, requestHeaders, responseStatusCode, responseHeaders,
16 responseBody, requestDate, responseStatusMessage, url;
18 - (id)initWithRequest:(OpenStackRequest *)request {
22 if ([request requestMethod] != nil) {
23 requestMethod = [[NSString alloc] initWithString:[request requestMethod]];
26 requestBody = [[NSString alloc] initWithData:request.postBody encoding:NSASCIIStringEncoding];
27 requestHeaders = [[NSDictionary alloc] initWithDictionary:request.requestHeaders];
28 responseStatusCode = [request responseStatusCode];
29 responseHeaders = [[NSDictionary alloc] initWithDictionary:request.responseHeaders];
31 if ([request responseString] != nil) {
32 responseBody = [[NSString alloc] initWithString:[request responseString]];
35 requestDate = [[NSDate alloc] init];
37 if ([request responseStatusMessage] != nil) {
38 responseStatusMessage = [[NSString alloc] initWithString:[request responseStatusMessage]];
41 url = [request.url retain];
47 #pragma mark Serialization
49 - (void)encodeWithCoder: (NSCoder *)coder {
50 [coder encodeObject:requestMethod forKey:@"requestMethod"];
51 [coder encodeObject:requestBody forKey:@"requestBody"];
52 [coder encodeObject:requestHeaders forKey:@"requestHeaders"];
53 [coder encodeInt:responseStatusCode forKey:@"responseStatusCode"];
54 [coder encodeObject:responseHeaders forKey:@"responseHeaders"];
55 [coder encodeObject:responseBody forKey:@"responseBody"];
56 [coder encodeObject:requestDate forKey:@"requestDate"];
57 [coder encodeObject:responseStatusMessage forKey:@"responseStatusMessage"];
58 [coder encodeObject:url forKey:@"url"];
61 - (id)initWithCoder:(NSCoder *)coder {
64 requestMethod = [[coder decodeObjectForKey:@"requestMethod"] retain];
65 requestBody = [[coder decodeObjectForKey:@"requestBody"] retain];
66 requestHeaders = [[coder decodeObjectForKey:@"requestHeaders"] retain];
67 responseStatusCode = [coder decodeIntForKey:@"responseStatusCode"];
68 responseHeaders = [[coder decodeObjectForKey:@"responseHeaders"] retain];
69 responseBody = [[coder decodeObjectForKey:@"responseBody"] retain];
70 requestDate = [[coder decodeObjectForKey:@"requestDate"] retain];
71 responseStatusMessage = [[coder decodeObjectForKey:@"responseStatusMessage"] retain];
72 url = [[coder decodeObjectForKey:@"url"] retain];
77 - (NSString *)requestDescription {
78 NSString *description = @"curl -verbose -X ";
80 description = [description stringByAppendingString:requestMethod];
82 NSArray *keys = [requestHeaders allKeys];
83 for (int i = 0; i < [keys count]; i++) {
84 NSString *key = [keys objectAtIndex:i];
85 NSString *value = [requestHeaders objectForKey:key];
87 // protect authentication info from being exposed
89 if ([key isEqualToString:@"X-Auth-Key"] || [key isEqualToString:@"X-Auth-Token"]) {
93 description = [description stringByAppendingString:[NSString stringWithFormat:@" -H \"%@: %@\"", key, value]];
96 if (requestBody && ![@"" isEqualToString:requestBody]) {
97 description = [description stringByAppendingString:[NSString stringWithFormat:@" -d \"%@\"", requestBody]];
100 description = [description stringByAppendingString:[NSString stringWithFormat:@" %@", url]];
105 - (NSString *)responseDescription {
106 NSString *description = [NSString stringWithFormat:@"%@\n", responseStatusMessage];
108 if (responseStatusCode == 0) {
109 description = @"No response";
111 NSArray *keys = [responseHeaders allKeys];
112 for (int i = 0; i < [keys count]; i++) {
113 NSString *key = [keys objectAtIndex:i];
114 NSString *value = [responseHeaders objectForKey:key];
116 // protect authentication info from being exposed
117 if ([key isEqualToString:@"X-Auth-Key"] || [key isEqualToString:@"X-Auth-Token"] || [key isEqualToString:@"X-Storage-Token"]) {
120 description = [description stringByAppendingString:[NSString stringWithFormat:@"%@: %@\n", key, value]];
123 if (responseBody && ![@"" isEqualToString:responseBody]) {
124 description = [description stringByAppendingString:[NSString stringWithFormat:@"\n%@", responseBody]];
132 #pragma mark Memory Management
135 [requestMethod release];
136 [requestBody release];
137 [requestHeaders release];
138 [responseHeaders release];
139 [responseBody release];
140 [requestDate release];
141 [responseStatusMessage release];