120 lines
3.5 KiB
Objective-C
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
|