Last active
May 19, 2017 15:10
-
-
Save YarGnawh/10a4ee306578d9aceb28 to your computer and use it in GitHub Desktop.
Twitter Reverse Auth API Request
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- (void)reserveAuth | |
{ | |
NSString * http_method = @"POST"; | |
NSString * request_url = @"https://api.twitter.com/oauth/request_token"; | |
NSString * oauth_consumer_key = @"bcn3PUKI0PZoxfPTqEDkMru9A"; | |
NSString * oauth_consumer_secret = @"YiVeSteQBplk8xzAtuoulA7i2vLkVF5kIwc5x1A6ZaxmugdmXg"; | |
NSString * oauth_nonce = [[NSUUID UUID] UUIDString]; | |
NSString * oauth_signature = @""; | |
NSString * oauth_signature_method = @"HMAC-SHA1"; | |
NSString * oauth_timestamp = [NSString stringWithFormat:@"%.0f", [[NSDate date] timeIntervalSince1970]]; | |
NSString * oauth_version = @"1.0"; | |
NSString * x_auth_mode = @"reverse_auth"; | |
NSMutableString *parameter_string = [NSMutableString string]; | |
[parameter_string appendFormat:@"oauth_consumer_key=%@&", oauth_consumer_key]; | |
[parameter_string appendFormat:@"oauth_nonce=%@&", oauth_nonce]; | |
[parameter_string appendFormat:@"oauth_signature_method=%@&", oauth_signature_method]; | |
[parameter_string appendFormat:@"oauth_timestamp=%@&", oauth_timestamp]; | |
[parameter_string appendFormat:@"oauth_token=&"]; | |
[parameter_string appendFormat:@"oauth_version=%@&", oauth_version]; | |
[parameter_string appendFormat:@"x_auth_mode=%@", x_auth_mode]; | |
NSMutableString * signature_base_string = [NSMutableString string]; | |
[signature_base_string appendFormat:@"%@", http_method]; | |
[signature_base_string appendString:@"&"]; | |
[signature_base_string appendFormat:@"%@", [self percentEncodeString:request_url]]; | |
[signature_base_string appendString:@"&"]; | |
[signature_base_string appendFormat:@"%@", [self percentEncodeString:parameter_string]]; | |
NSString * signing_key = [NSString stringWithFormat:@"%@&", [self percentEncodeString:oauth_consumer_secret]]; | |
const char *cKey = [signing_key cStringUsingEncoding:NSASCIIStringEncoding]; | |
const char *cData = [signature_base_string cStringUsingEncoding:NSASCIIStringEncoding]; | |
unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH]; | |
CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC); | |
oauth_signature = [[[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)] base64EncodedStringWithOptions:0]; | |
NSMutableString *header = [NSMutableString stringWithString:@"OAuth "]; | |
[header appendFormat:@"oauth_consumer_key=\"%@\", ", oauth_consumer_key]; | |
[header appendFormat:@"oauth_nonce=\"%@\", ", oauth_nonce]; | |
[header appendFormat:@"oauth_signature=\"%@\", ", [self percentEncodeString:oauth_signature]]; | |
[header appendFormat:@"oauth_signature_method=\"%@\", ", oauth_signature_method]; | |
[header appendFormat:@"oauth_timestamp=\"%@\", ", oauth_timestamp]; | |
[header appendFormat:@"oauth_token=\"%@\", ", @""]; | |
[header appendFormat:@"oauth_version=\"%@\"", oauth_version]; | |
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; | |
[manager setRequestSerializer:[[AFHTTPRequestSerializer alloc] init]]; | |
[manager setResponseSerializer:[[AFHTTPResponseSerializer alloc] init]]; | |
[[manager requestSerializer] setValue:header forHTTPHeaderField:@"Authorization"]; | |
[[manager responseSerializer] setAcceptableContentTypes:[NSSet setWithObject:@"text/html"]]; | |
[manager POST:request_url parameters:@{@"x_auth_mode": @"reverse_auth"} success:^(NSURLSessionDataTask *task, id responseObject) | |
{ | |
NSString *string_value = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; | |
NSDictionary *step2Params = [[NSMutableDictionary alloc] init]; | |
[step2Params setValue:oauth_consumer_key forKey:@"x_reverse_auth_target"]; | |
[step2Params setValue:string_value forKey:@"x_reverse_auth_parameters"]; | |
NSURL *url2 = [NSURL URLWithString:@"https://api.twitter.com/oauth/access_token"]; | |
SLRequest *stepTwoRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter | |
requestMethod:SLRequestMethodPOST | |
URL:url2 | |
parameters:step2Params]; | |
ACAccountStore *accountStore = [[AccountManager sharedManager] accountStore]; | |
ACAccount *twitterAccount = [[accountStore accounts] firstObject]; | |
[stepTwoRequest setAccount:twitterAccount]; | |
[stepTwoRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { | |
NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; | |
[[AFHTTPSessionManager manager] POST:@"http://localhost:3000/user/connect/twitter" | |
parameters:@{@"device": [[[UIDevice currentDevice] identifierForVendor] UUIDString], | |
@"account": @"twitter", | |
@"info": responseStr} | |
success:^(NSURLSessionDataTask *task, id responseObject) { | |
NSLog(@"%@", responseObject); | |
} failure:^(NSURLSessionDataTask *task, NSError *error) { | |
NSLog(@"%@", error); | |
}]; | |
}]; | |
} failure:^(NSURLSessionDataTask *task, NSError *error) { | |
NSLog(@"%@", error); | |
}]; | |
} | |
- (NSString *)percentEncodeString:(NSString *)string | |
{ | |
CFStringRef charactersToLeaveUnescaped = CFSTR(" "); | |
CFStringRef legalURLCharactersToBeEscaped = CFSTR("!$&'()+,/:;=?@~"); | |
NSString *result = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes( | |
kCFAllocatorDefault, | |
(__bridge CFStringRef)string, | |
charactersToLeaveUnescaped, | |
legalURLCharactersToBeEscaped, | |
kCFStringEncodingUTF8)); | |
return [result stringByReplacingOccurrencesOfString:@" " withString:@"+"]; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I don't know how to make request token.
Please help me.