removed unnecessary files and finally got complete OAuth in JS working

This commit is contained in:
Jeena Paradies 2011-09-19 23:37:25 +02:00
parent 65ca64c505
commit 82e9c1a369
10 changed files with 23 additions and 272 deletions

View file

@ -65,5 +65,13 @@
return [d objectForKey:@"screenName"];
}
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector {
return NO;
}
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name {
return NO;
}
@end

View file

@ -14,4 +14,8 @@ OAUTH_REQUEST_TOKEN_URL = "http://twitter.com/oauth/request_token"
OAUTH_USER_AUTHORIZATION_URL = "http://twitter.com/oauth/authorize"
OAUTH_ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token"
OAUTH_SERVICE_NAME = "twitter.com"
APP_NAME = "Twittia";
API_PATH = "http://api.twitter.com/1/";
WEBSITE_PATH = "http://twitter.com/";

View file

@ -49,8 +49,8 @@
accessToken = [[AccessToken alloc] init];
NSLog(@"%@", accessToken.accessToken);
accessToken.accessToken = nil;
//accessToken.accessToken = nil;
if (!accessToken.accessToken) {
[self initOauth];
} else {

View file

@ -1,15 +0,0 @@
//
// OAToken+WebView.h
// Twittia 2
//
// Created by Jeena on 02.05.10.
// Licence: BSD (see attached LICENCE.txt file).
//
#import <Foundation/Foundation.h>
#import <OAuthConsumer/OAToken.h>
@interface OAToken(WebView)
@end

View file

@ -1,23 +0,0 @@
//
// OAToken+WebView.m
// Twittia 2
//
// Created by Jeena on 02.05.10.
// Licence: BSD (see attached LICENCE.txt file).
//
#import "OAToken+WebView.h"
// this is just so the JavaScript can get the tokens.
@implementation OAToken(WebView)
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector {
return NO;
}
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name {
return NO;
}
@end

31
OAuth.h
View file

@ -1,31 +0,0 @@
//
// OAuth.h
// Twittia 2
//
// Created by Jeena on 01.05.10.
// Licence: BSD (see attached LICENCE.txt file).
//
#import <Foundation/Foundation.h>
#import <OAuthConsumer/OAToken.h>
#import <OAuthConsumer/OAConsumer.h>
#import "OAToken+WebView.h"
@interface OAuth : NSObject {
OAToken *requestToken;
OAToken *accessToken;
OAToken *consumerToken;
OAConsumer *consumer;
}
@property (nonatomic, retain) OAToken *accessToken;
@property (nonatomic, retain) OAToken *consumerToken;
- (id)init;
- (void)requestAToken;
- (void)requestAccessToken;
- (void)updateTweet:(NSString *)tweet inReplaToStatus:(NSString *)statusId;
@end

176
OAuth.m
View file

@ -1,176 +0,0 @@
//
// OAuth.m
// Twittia 2
//
// Created by Jeena on 01.05.10.
// Licence: BSD (see attached LICENCE.txt file).
//
#import "OAuth.h"
#import "Constants.h"
#import <OAuthConsumer/OAConsumer.h>
#import <OAuthConsumer/OAMutableURLRequest.h>
#import <OAuthConsumer/OADataFetcher.h>
#import <OAuthConsumer/OAToken.h>
@implementation OAuth
@synthesize accessToken, consumerToken;
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector {
return NO;
}
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name {
return NO;
}
-(id)init {
if (self = [super init]) {
self.consumerToken = [[OAToken alloc] initWithKey:OAUTH_CONSUMER_KEY secret:OAUTH_CONSUMER_SECRET];
self.accessToken = [[OAToken alloc] initWithUserDefaultsUsingServiceProviderName:OAUTH_SERVICE_NAME prefix:APP_NAME];
consumer = [[OAConsumer alloc] initWithKey:OAUTH_CONSUMER_KEY secret:OAUTH_CONSUMER_SECRET];
}
return self;
}
- (void)dealloc {
[consumerToken release];
[accessToken release];
[consumer release];
[super dealloc];
}
- (void)awakeFromNib {
if (!self.accessToken) {
[self requestAToken];
}
}
-(void)requestAToken {
NSURL *url = [NSURL URLWithString:OAUTH_REQUEST_TOKEN_URL];
OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url
consumer:consumer
token:nil // we don't have a Token yet
realm:nil // our service provider doesn't specify a realm
signatureProvider:nil]; // use the default method, HMAC-SHA1
[request setHTTPMethod:@"POST"];
OADataFetcher *fetcher = [[OADataFetcher alloc] init];
[fetcher fetchDataWithRequest:request
delegate:self
didFinishSelector:@selector(requestTokenTicket:didFinishWithData:)
didFailSelector:@selector(requestTokenTicket:didFailWithError:)];
}
- (void)requestTokenTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
if (ticket.didSucceed) {
NSString *responseBody = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
requestToken = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@?oauth_token=%@", OAUTH_USER_AUTHORIZATION_URL, requestToken.key]];
[[NSWorkspace sharedWorkspace] openURL:url];
}
}
- (void)requestTokenTicket:(OAServiceTicket *)ticket didFailWithError:(NSError *)error {
NSLog(@"ERROR: %@", error);
}
- (void)requestAccessToken {
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@", OAUTH_ACCESS_TOKEN_URL]];
OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url
consumer:consumer
token:requestToken // we don't have a Token yet
realm:nil // our service provider doesn't specify a realm
signatureProvider:nil]; // use the default method, HMAC-SHA1
[request setHTTPMethod:@"POST"];
OADataFetcher *fetcher = [[OADataFetcher alloc] init];
[fetcher fetchDataWithRequest:request
delegate:self
didFinishSelector:@selector(accessTokenTicket:didFinishWithData:)
didFailSelector:@selector(accessTokenTicket:didFailWithError:)];
}
- (void)accessTokenTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
NSLog(@"%@", ticket);
if (ticket.didSucceed) {
NSString *responseBody = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
self.accessToken = [[OAToken alloc] initWithHTTPResponseBody:responseBody];
[accessToken storeInUserDefaultsWithServiceProviderName:OAUTH_SERVICE_NAME prefix:APP_NAME];
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"authentificationSucceded" object:self];
}
}
- (void)accessTokenTicket:(OAServiceTicket *)ticket didFailWithError:(NSError *)error {
NSLog(@"ERROR a: %@", error);
// [self requestAccessToken];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@?oauth_token=%@", OAUTH_USER_AUTHORIZATION_URL, requestToken.key]];
[[NSWorkspace sharedWorkspace] openURL:url];
}
- (void)updateTweet:(NSString *)tweet inReplaToStatus:(NSString *)statusId {
NSLog(@"%@ %@", tweet, statusId);
NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"];
OAMutableURLRequest *request = [[OAMutableURLRequest alloc] initWithURL:url
consumer:consumer
token:accessToken
realm:nil
signatureProvider:nil];
OARequestParameter *source = [[OARequestParameter alloc] initWithName:@"source" value:@"twittia"];
OARequestParameter *status = [[OARequestParameter alloc] initWithName:@"status" value:tweet];
NSMutableArray *params = [NSMutableArray arrayWithObjects:source, status, nil];
if (statusId) {
OARequestParameter *reply = [[OARequestParameter alloc] initWithName:@"in_reply_to_status_id" value:[NSString stringWithString:statusId]];
[params addObject:reply];
}
[request setHTTPMethod:@"POST"];
[request setParameters:params];
OADataFetcher *fetcher = [[OADataFetcher alloc] init];
[fetcher fetchDataWithRequest:request
delegate:self
didFinishSelector:@selector(updateTweetTicket:didFinishWithData:)
didFailSelector:@selector(updateTweetTokenTicket:didFailWithError:)];
}
- (void)updateTweetTicket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
if (ticket.didSucceed) {
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"getTweetUpdates" object:self];
}
}
- (void)updateTweetTokenTicket:(OAServiceTicket *)ticket didFailWithError:(NSError *)error {
NSLog(@"ERROR update tweet: %@", error);
}
@end

View file

@ -68,11 +68,7 @@
1F1990E1117BD2650049BEA7 /* ReleaseNotes.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = ReleaseNotes.html; sourceTree = "<group>"; };
1F3642ED118C8C35008198EF /* oauth.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = oauth.js; sourceTree = "<group>"; };
1F3642EE118C8C35008198EF /* sha1.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = sha1.js; sourceTree = "<group>"; };
1F364396118CBC77008198EF /* OAuth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OAuth.h; sourceTree = "<group>"; };
1F364397118CBC77008198EF /* OAuth.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OAuth.m; sourceTree = "<group>"; };
1F36440E118CC173008198EF /* OAuthConsumer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OAuthConsumer.framework; sourceTree = "<group>"; };
1F36465C118DA5A7008198EF /* OAToken+WebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OAToken+WebView.h"; sourceTree = "<group>"; };
1F36465D118DA5A7008198EF /* OAToken+WebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "OAToken+WebView.m"; sourceTree = "<group>"; };
1F4673E21180F519006CC37C /* jQuery.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = jQuery.js; sourceTree = "<group>"; };
1F4673E41180F590006CC37C /* jQuery-Plugins.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = "jQuery-Plugins.js"; sourceTree = "<group>"; };
1F4673E61180F654006CC37C /* TwittiaCore.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = TwittiaCore.js; sourceTree = "<group>"; };
@ -199,12 +195,8 @@
1FFA36D51177D879006C8562 /* ViewDelegate.m */,
2A37F4AEFDCFA73011CA2CEA /* MyDocument.h */,
2A37F4ACFDCFA73011CA2CEA /* MyDocument.m */,
1F364396118CBC77008198EF /* OAuth.h */,
1F364397118CBC77008198EF /* OAuth.m */,
1F77DB45118C5F1C007C7F1E /* Constants.h */,
1F77DB46118C5F1C007C7F1E /* Constants.m */,
1F36465C118DA5A7008198EF /* OAToken+WebView.h */,
1F36465D118DA5A7008198EF /* OAToken+WebView.m */,
1F618EC812DB5E6100E500D9 /* TweetModel.h */,
1F618EC912DB5E6100E500D9 /* TweetModel.m */,
1FC2549A1427D9930035D84B /* AccessToken.h */,

View file

@ -6,10 +6,6 @@
// Licence: BSD (see attached LICENCE.txt file).
//
API_PATH = "http://api.twitter.com/1/";
WEBSITE_PATH = "http://twitter.com/";
//API_PATH = "http://identi.ca/api/";
function Twittia(action) {
this.max_length = 100;
this.since_id;
@ -20,8 +16,6 @@ function Twittia(action) {
this.body = document.createElement("ol");
this.body.className = this.action;
this.requestAToken();
}
Twittia.prototype.newStatus = function(status, supress_new_with_timeout) {
@ -266,8 +260,8 @@ Twittia.prototype.getNewData = function(supress_new_with_timeout) {
OAuth.completeRequest(message,
{ consumerKey : OAUTH_CONSUMER_KEY
, consumerSecret: OAUTH_CONSUMER_SECRET
, token : controller.accessToken.accessToken
, tokenSecret : controller.accessToken.secret
, token : controller.accessToken.accessToken()
, tokenSecret : controller.accessToken.secret()
});
$.ajax(
@ -305,8 +299,8 @@ Twittia.prototype.sendNewTweet = function(tweet, in_reply_to_status_id) {
OAuth.completeRequest(message,
{ consumerKey : OAUTH_CONSUMER_KEY
, consumerSecret: OAUTH_CONSUMER_SECRET
, token : controller.accessToken.accessToken
, tokenSecret : controller.accessToken.secret
, token : controller.accessToken.accessToken()
, tokenSecret : controller.accessToken.secret()
});
$.ajax({
@ -337,8 +331,8 @@ Twittia.prototype.retweet = function(status_id, item) {
OAuth.completeRequest(message,
{ consumerKey : OAUTH_CONSUMER_KEY
, consumerSecret: OAUTH_CONSUMER_SECRET
, token : controller.accessToken.accessToken
, tokenSecret : controller.accessToken.secret
, token : controller.accessToken.accessToken()
, tokenSecret : controller.accessToken.secret()
});
$.ajax({

View file

@ -8,7 +8,6 @@
function TwittiaOauth() {
this.requestAToken();
alert(APP_NAME);
}
TwittiaOauth.prototype.requestAToken = function() {
@ -49,7 +48,6 @@ TwittiaOauth.prototype.requestTokenTicketFinished = function(data) {
TwittiaOauth.prototype.requestAccessToken = function(responseBody) {
// "twittia://oauth_token?oauth_token=jCcf7ClzJMbE4coZdONi467OAQxRGOBZJsuopG8C8&oauth_verifier=BK2ZkAIz51lqI4qta8MnKc280GyDLy0OQBpdsEmjT40"
alert(responseBody);
var urlVars = getUrlVars(responseBody);