root/trunk/AtomApi.m @ 40

Revision 40, 5.8 kB (checked in by ngerakines, 3 years ago)

* Added growl notification on service connect
* Changed the language used in login and prefs
* On enter from password field a login is performed
* Made several adjustments throughout the app

Line 
1//
2//  AtomApi.m
3//  TypePad-Uploader
4//
5//  Created by Nicholas Gerakines on 5/1/06.
6//  Copyright 2006 __MyCompanyName__. All rights reserved.
7//
8
9#import "AtomApi.h"
10#import "AtomExtensions.h"
11#import "NSDataAdditions.h"
12
13#define APIURL @"http://www.typepad.com/t/atom/";
14
15@implementation AtomApi
16
17- (id) init {
18    if (self = [super init]) {
19                /* ... */
20                dataarg = [[NSString alloc] init];
21                atomdata = [[NSString alloc] init];
22                apiurl = [[NSString alloc] init];
23                resdata = [[NSString alloc] init];
24                authuser = [[NSString alloc] init];
25                authpass = [[NSString alloc] init];
26                [self setRequiresAuth:NO];
27                [self retain];
28    }
29    return self;
30}
31
32/* dataarg */
33- (NSString *) dataarg { return dataarg; }
34
35        /* -setDataarg: */
36- (void) setDataarg: (NSString *) Dataarg {
37    //NSLog(@"in -setDataarg:, old value of dataarg: %@, changed to: %@", dataarg, Dataarg);
38       
39    if (dataarg != Dataarg) {
40        [dataarg autorelease];
41        dataarg = [Dataarg retain];
42    }
43}
44
45/* atomdata */
46- (NSString *) atomdata { return atomdata; }
47
48        /* -setAtomdata: */
49- (void) setAtomdata: (NSString *) Atomdata {
50    //NSLog(@"in -setAtomdata:, old value of atomdata: %@, changed to: %@", atomdata, Atomdata);
51       
52    if (atomdata != Atomdata) {
53        [atomdata autorelease];
54        atomdata = [Atomdata retain];
55    }
56}
57
58/* apiurl */
59- (NSString *) apiurl { return apiurl; }
60
61        /* -setApiurl: */
62- (void) setApiurl: (NSString *) Apiurl {
63    //NSLog(@"in -setApiurl:, old value of apiurl: %@, changed to: %@", apiurl, Apiurl);
64       
65    if (apiurl != Apiurl) {
66        [apiurl autorelease];
67        apiurl = [Apiurl retain];
68    }
69}
70
71/* resdata */
72- (NSString *) resdata { return resdata; }
73
74        /* -setResdata: */
75- (void) setResdata: (NSString *) Resdata {
76    //NSLog(@"in -setResdata:, old value of resdata: %@, changed to: %@", resdata, Resdata);
77       
78    if (resdata != Resdata) {
79        [resdata autorelease];
80        resdata = [Resdata retain];
81    }
82}
83
84/* authuser */
85- (NSString *) authuser { return authuser; }
86
87/* -setAuthuser: */
88- (void) setAuthuser: (NSString *) Authuser {
89        //NSLog(@"in -setAuthuser:, old value of authuser: %@, changed to: %@", authuser, Authuser);
90        [self setRequiresAuth:YES];
91    if (authuser != Authuser) {
92        [authuser autorelease];
93        authuser = [Authuser retain];
94    }
95}
96
97/* authpass */
98- (NSString *) authpass { return authpass; }
99
100/* -setAuthpass: */
101- (void) setAuthpass: (NSString *) Authpass {
102        [self setRequiresAuth:YES];
103    //NSLog(@"in -setAuthpass:, old value of authpass: %@, changed to: %@", authpass, Authpass);
104    if (authpass != Authpass) {
105        [authpass autorelease];
106        authpass = [Authpass retain];
107    }
108}
109
110- (void) setAuth: (NSString *) user pass:(NSString *) pass {
111        [self setAuthuser:user];
112        [self setAuthpass:pass];
113        [self setRequiresAuth:YES];
114}
115
116/* requiresAuth */
117- (BOOL) requiresAuth { return requiresAuth; }
118
119/* -setRequiresAuth: */
120- (void) setRequiresAuth: (BOOL) flag {
121    //NSLog(@"in -setRequiresAuth, old value of requiresAuth: %@, changed to: %@", (requiresAuth ? @"YES": @"NO"), (flag ? @"YES": @"NO") );
122    requiresAuth = flag;
123}
124
125/* dealloc */
126- (void) dealloc {
127    [dataarg release];
128    [atomdata release];
129    [apiurl release];
130    [resdata release];
131        [authuser release];
132    [authpass release];
133       
134    dataarg = nil;
135    atomdata = nil;
136    apiurl = nil;
137    resdata = nil;
138        authuser = nil;
139    authpass = nil;
140    [super dealloc];
141}
142
143/* begin class methods */
144- (NSString *) makeNonce {
145        NSDate *timestamp = [NSDate date];
146        NSString *nonce = [[NSString stringWithFormat:@"%@:%@", [timestamp descriptionWithCalendarFormat:@"%Y-%m-%dT%H:%M:%SZ" timeZone:nil locale:nil], @"private"] stringUsingSHA1HexadecimalHash];
147        return [NSString stringWithFormat:@"%@ %@", [timestamp descriptionWithCalendarFormat:@"%Y-%m-%dT%H:%M:%SZ" timeZone:nil locale:nil], nonce];
148}
149
150- (void) makerequest:(NSString *) reqtype {
151// NSLog(@"Making request to url '%@'\n", apiurl);
152        NSURL *aURL = [NSURL URLWithString:apiurl];
153        [aURL URLHandleUsingCache:NO];
154        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:aURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
155        [request addValue:[aURL host] forHTTPHeaderField:@"Host"];
156        [request addValue:@"Fence/0.8" forHTTPHeaderField:@"User-Agent"];
157        // set auth if we need it.
158        if ([self requiresAuth]) {
159// NSLog(@" XXX Auth required\n");
160                NSString *login = [self authuser];
161                NSString *password = [self authpass];
162                NSString *nonce = [self makeNonce];
163                NSString *encodedNonce = [nonce stringUsingBase64Encoding];
164                NSString *created = [[NSDate date] descriptionWithCalendarFormat:@"%Y-%m-%dT%H:%M:%SZ" timeZone:nil locale:nil];
165                NSString *passwordDigest = [[[NSString stringWithFormat:@"%@%@%@", nonce, created, password] stringUsingSHA1RawHash] stringUsingBase64Encoding];
166                [request addValue:@"WSSE profile=\"UsernameToken\"" forHTTPHeaderField:@"Authorization"];
167                NSString *wsse = [NSString stringWithFormat:@"UsernameToken Username=\"%@\", PasswordDigest=\"%@\", Created=\"%@\", Nonce=\"%@\"", login, passwordDigest, created, encodedNonce];
168                [request addValue:wsse forHTTPHeaderField:@"X-WSSE"];
169        }
170        [request addValue:@"application/atom+xml" forHTTPHeaderField:@"Content-Type"];
171        [request addValue:[NSString stringWithFormat:@"%d", [atomdata length]] forHTTPHeaderField: @"Content-Length"];
172        [request setHTTPMethod:reqtype];
173        [request setHTTPBody:[atomdata dataUsingEncoding:NSUTF8StringEncoding]];
174        // [request addValue:@"close" forHTTPHeaderField:@"Connection"];
175        NSURLResponse* response;
176        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
177        NSString *blork = [[NSString alloc] initWithData:responseData  encoding:NSASCIIStringEncoding];
178        [self setResdata:blork];
179        // NSLog(@"Response: \n%@\n", blork);
180}
181
182- (NSString *) filename {
183        return [dataarg lastPathComponent];
184}
185
186@end
Note: See TracBrowser for help on using the browser.