forked from MobileOrg/mobileorg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MPOAuthURLRequest.m
106 lines (82 loc) · 3.26 KB
/
MPOAuthURLRequest.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//
// MPOAuthURLRequest.m
// MPOAuthConnection
//
// Created by Karl Adam on 08.12.05.
// Copyright 2008 matrixPointer. All rights reserved.
//
#ifndef __GNUC__
#define __asm__ asm
#endif
__asm__(".weak_reference _OBJC_CLASS_$_NSURL");
#import "MPOAuthURLRequest.h"
#import "MPURLRequestParameter.h"
#import "MPOAuthSignatureParameter.h"
#import "MPDebug.h"
#import "NSURL+MPURLParameterAdditions.h"
#import "NSString+URLEscapingAdditions.h"
@interface MPOAuthURLRequest ()
@property (nonatomic, readwrite, retain) NSURLRequest *urlRequest;
@end
@implementation MPOAuthURLRequest
- (id)initWithURL:(NSURL *)inURL andParameters:(NSArray *)inParameters {
if (self = [super init]) {
self.url = inURL;
_parameters = inParameters ? [inParameters mutableCopy] : [[NSMutableArray alloc] initWithCapacity:10];
self.HTTPMethod = @"GET";
}
return self;
}
- (id)initWithURLRequest:(NSURLRequest *)inRequest {
if (self = [super init]) {
self.url = [[inRequest URL] urlByRemovingQuery];
self.parameters = [[MPURLRequestParameter parametersFromString:[[inRequest URL] query]] mutableCopy];
self.HTTPMethod = [inRequest HTTPMethod];
}
return self;
}
- (oneway void)dealloc {
self.url = nil;
self.HTTPMethod = nil;
self.urlRequest = nil;
self.parameters = nil;
[super dealloc];
}
@synthesize url = _url;
@synthesize HTTPMethod = _httpMethod;
@synthesize urlRequest = _urlRequest;
@synthesize parameters = _parameters;
#pragma mark -
- (NSMutableURLRequest*)urlRequestSignedWithSecret:(NSString *)inSecret usingMethod:(NSString *)inScheme {
[self.parameters sortUsingSelector:@selector(compare:)];
NSMutableURLRequest *aRequest = [[NSMutableURLRequest alloc] init];
NSMutableString *parameterString = [[NSMutableString alloc] initWithString:[MPURLRequestParameter parameterStringForParameters:self.parameters]];
MPOAuthSignatureParameter *signatureParameter = [[MPOAuthSignatureParameter alloc] initWithText:parameterString andSecret:inSecret forRequest:self usingMethod:inScheme];
[parameterString appendFormat:@"&%@", [signatureParameter URLEncodedParameterString]];
[aRequest setHTTPMethod:self.HTTPMethod];
if ([[self HTTPMethod] isEqualToString:@"GET"] && [self.parameters count]) {
NSString *urlString = [NSString stringWithFormat:@"%@?%@", [self.url absoluteString], parameterString];
MPLog( @"urlString - %@", urlString);
[aRequest setURL:[NSURL URLWithString:urlString]];
} else if ([[self HTTPMethod] isEqualToString:@"POST"]) {
NSData *postData = [parameterString dataUsingEncoding:NSUTF8StringEncoding];
MPLog(@"urlString - %@", self.url);
MPLog(@"postDataString - %@", parameterString);
[aRequest setURL:self.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", self.HTTPMethod];
}
[parameterString release];
[signatureParameter release];
self.urlRequest = aRequest;
[aRequest release];
return aRequest;
}
#pragma mark -
- (void)addParameters:(NSArray *)inParameters {
[self.parameters addObjectsFromArray:inParameters];
}
@end