CocoaShare/Classes/Dropbox/DropboxSDK/MPOAuth/MPOAuthURLRequest.m
2011-02-01 10:19:26 -06:00

120 lines
3.5 KiB
Objective-C

//
// MPOAuthURLRequest.m
// MPOAuthConnection
//
// Created by Karl Adam on 08.12.05.
// Copyright 2008 matrixPointer. All rights reserved.
//
#import "MPOAuthURLRequest.h"
#import "MPURLRequestParameter.h"
#import "MPOAuthSignatureParameter.h"
#import "MPDebug.h"
#import "NSURL+MPURLParameterAdditions.h"
#import "NSString+URLEscapingAdditions.h"
@implementation MPOAuthURLRequest
- (id)initWithURL:(NSURL *)inURL andParameters:(NSArray *)inParameters {
if (self = [super init]) {
url = [inURL retain];
parameters = inParameters ? [inParameters mutableCopy] : [[NSMutableArray alloc] initWithCapacity:10];
[self setHTTPMethod:@"GET"];
}
return self;
}
- (id)initWithURLRequest:(NSURLRequest *)inRequest {
if (self = [super init]) {
url = [[[inRequest URL] urlByRemovingQuery] retain];
parameters = [[MPURLRequestParameter parametersFromString:[[inRequest URL] query]] mutableCopy];
[self setHTTPMethod:[inRequest HTTPMethod]];
}
return self;
}
- (oneway void)dealloc {
[url release];
[HTTPMethod release];
[urlRequest release];
[parameters release];
[super dealloc];
}
- (void)setURL:(NSURL *)theURL {
[url release];
url = [theURL retain];
}
- (NSURL *)url {
return url;
}
- (void)setHTTPMethod:(NSString *)theMethod {
[HTTPMethod release];
HTTPMethod = [theMethod retain];
}
- (NSString *)HTTPMethod {
return HTTPMethod;
}
- (void)setURLRequest:(NSURLRequest *)theRequest {
[urlRequest release];
urlRequest = [theRequest retain];
}
- (NSURLRequest *)urlRequest {
return urlRequest;
}
- (void)setParameters:(NSMutableArray *)theParameters {
[parameters release];
parameters = [theParameters retain];
}
- (NSMutableArray *)parameters {
return parameters;
}
#pragma mark -
- (NSMutableURLRequest*)urlRequestSignedWithSecret:(NSString *)inSecret usingMethod:(NSString *)inScheme {
[parameters sortUsingSelector:@selector(compare:)];
NSMutableURLRequest *aRequest = [[NSMutableURLRequest alloc] init];
NSMutableString *parameterString = [[NSMutableString alloc] initWithString:[MPURLRequestParameter parameterStringForParameters:parameters]];
MPOAuthSignatureParameter *signatureParameter = [[MPOAuthSignatureParameter alloc] initWithText:parameterString andSecret:inSecret forRequest:self usingMethod:inScheme];
[parameterString appendFormat:@"&%@", [signatureParameter URLEncodedParameterString]];
[aRequest setHTTPMethod:HTTPMethod];
if ([[self HTTPMethod] isEqualToString:@"GET"] && [parameters count]) {
NSString *urlString = [NSString stringWithFormat:@"%@?%@", [url absoluteString], parameterString];
MPLog( @"urlString - %@", urlString);
[aRequest setURL:[NSURL URLWithString:urlString]];
} else if ([[self HTTPMethod] isEqualToString:@"POST"]) {
NSData *postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding];
MPLog(@"urlString - %@", url);
MPLog(@"postDataString - %@", parameterString);
[aRequest setURL:url];
[aRequest setValue:[NSString stringWithFormat:@"%d", [postData length]] forHTTPHeaderField:@"Content-Length"];
[aRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[aRequest setHTTPBody:postData];
} else {
[NSException raise:@"UnhandledHTTPMethodException" format:@"The requested HTTP method, %@, is not supported", HTTPMethod];
}
[parameterString release];
[signatureParameter release];
urlRequest = [aRequest retain];
[aRequest release];
return aRequest;
}
#pragma mark -
- (void)addParameters:(NSArray *)inParameters {
[parameters addObjectsFromArray:inParameters];
}
@end