Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Loading…

getOAuthAccessToken could pass extra parameters #104

Open
wants to merge 1 commit into from

2 participants

@jspaper

hi ciaranj,
Access token of Yahoo will expired after 1 hours, and will need to refresh access token with oauth_token, oauth_secret and oauth_session_handle. oauth_session_handle is extra parameter and necessary for Yahoo API.

In step 5
ref: http://developer.yahoo.com/oauth/guide/oauth-auth-flow.html

@calekennedy

I'm having trouble with this too. Was it ever resolved?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jul 4, 2012
  1. @jspaper
This page is out of date. Refresh to see the latest.
Showing with 35 additions and 30 deletions.
  1. +35 −30 lib/oauth.js
View
65 lib/oauth.js
@@ -84,7 +84,7 @@ exports.OAuth.prototype._getSignature= function(method, url, parameters, tokenSe
exports.OAuth.prototype._normalizeUrl= function(url) {
var parsedUrl= URL.parse(url, true)
var port ="";
- if( parsedUrl.port ) {
+ if( parsedUrl.port ) {
if( (parsedUrl.protocol == "http:" && parsedUrl.port != "80" ) ||
(parsedUrl.protocol == "https:" && parsedUrl.port != "443") ) {
port= ":" + parsedUrl.port;
@@ -92,7 +92,7 @@ exports.OAuth.prototype._normalizeUrl= function(url) {
}
if( !parsedUrl.pathname || parsedUrl.pathname == "" ) parsedUrl.pathname ="/";
-
+
return parsedUrl.protocol + "//" + parsedUrl.hostname + port + parsedUrl.pathname;
}
@@ -141,17 +141,17 @@ exports.OAuth.prototype._makeArrayOfArgumentsHash= function(argumentsHash) {
argument_pairs[argument_pairs.length]= [key, value];
}
}
- return argument_pairs;
-}
+ return argument_pairs;
+}
// Sorts the encoded key value pairs by encoded name, then encoded value
exports.OAuth.prototype._sortRequestParams= function(argument_pairs) {
// Sort by name, then value.
argument_pairs.sort(function(a,b) {
if ( a[0]== b[0] ) {
- return a[1] < b[1] ? -1 : 1;
+ return a[1] < b[1] ? -1 : 1;
}
- else return a[0] < b[0] ? -1 : 1;
+ else return a[0] < b[0] ? -1 : 1;
});
return argument_pairs;
@@ -164,10 +164,10 @@ exports.OAuth.prototype._normaliseRequestParams= function(arguments) {
argument_pairs[i][0]= this._encodeData( argument_pairs[i][0] );
argument_pairs[i][1]= this._encodeData( argument_pairs[i][1] );
}
-
+
// Then sort them #3.4.1.3.2 .2
argument_pairs= this._sortRequestParams( argument_pairs );
-
+
// Then concatenate together #3.4.1.3.2 .3 & .4
var args= "";
for(var i=0;i<argument_pairs.length;i++) {
@@ -175,19 +175,19 @@ exports.OAuth.prototype._normaliseRequestParams= function(arguments) {
args+= "="
args+= argument_pairs[i][1];
if( i < argument_pairs.length-1 ) args+= "&";
- }
+ }
return args;
}
exports.OAuth.prototype._createSignatureBase= function(method, url, parameters) {
- url= this._encodeData( this._normalizeUrl(url) );
+ url= this._encodeData( this._normalizeUrl(url) );
parameters= this._encodeData( parameters );
return method.toUpperCase() + "&" + url + "&" + parameters;
}
exports.OAuth.prototype._createSignature= function(signatureBase, tokenSecret) {
if( tokenSecret === undefined ) var tokenSecret= "";
- else tokenSecret= this._encodeData( tokenSecret );
+ else tokenSecret= this._encodeData( tokenSecret );
// consumerSecret is already encoded
var key= this._consumerSecret + "&" + tokenSecret;
@@ -200,7 +200,7 @@ exports.OAuth.prototype._createSignature= function(signatureBase, tokenSecret) {
hash = crypto.createHmac("sha1", key).update(signatureBase).digest("base64");
}
else {
- hash= sha1.HMACSHA1(key, signatureBase);
+ hash= sha1.HMACSHA1(key, signatureBase);
}
}
return hash;
@@ -216,7 +216,7 @@ exports.OAuth.prototype._getNonce= function(nonceSize) {
var chars= this.NONCE_CHARS;
var char_pos;
var nonce_chars_length= chars.length;
-
+
for (var i = 0; i < nonceSize; i++) {
char_pos= Math.floor(Math.random() * nonce_chars_length);
result[i]= chars[char_pos];
@@ -238,7 +238,7 @@ exports.OAuth.prototype._createClient= function( port, hostname, method, path, h
} else {
httpModel= http;
}
- return httpModel.request(options);
+ return httpModel.request(options);
}
exports.OAuth.prototype._prepareParameters= function( oauth_token, oauth_token_secret, method, url, extra_params ) {
@@ -330,7 +330,7 @@ exports.OAuth.prototype._performSecureRequest= function( oauth_token, oauth_toke
headers["Content-length"]= post_body ? Buffer.byteLength(post_body) : 0;
headers["Content-Type"]= post_content_type;
-
+
var path;
if( !parsedUrl.pathname || parsedUrl.pathname == "" ) parsedUrl.pathname ="/";
if( parsedUrl.query ) path= parsedUrl.pathname + "?"+ parsedUrl.query ;
@@ -345,7 +345,7 @@ exports.OAuth.prototype._performSecureRequest= function( oauth_token, oauth_toke
}
if( callback ) {
- var data="";
+ var data="";
var self= this;
// Some hosts *cough* google appear to close the connection early / send no content-length header
@@ -383,12 +383,12 @@ exports.OAuth.prototype._performSecureRequest= function( oauth_token, oauth_toke
}
});
});
-
+
request.on("error", function(err) {
callbackCalled= true;
callback( err )
});
-
+
if( (method == "POST" || method =="PUT") && post_body != null && post_body != "" ) {
request.write(post_body);
}
@@ -400,7 +400,7 @@ exports.OAuth.prototype._performSecureRequest= function( oauth_token, oauth_toke
}
return request;
}
-
+
return;
}
@@ -420,14 +420,19 @@ exports.OAuth.prototype.setClientOptions= function(options) {
this._clientOptions= mergedOptions;
};
-exports.OAuth.prototype.getOAuthAccessToken= function(oauth_token, oauth_token_secret, oauth_verifier, callback) {
+exports.OAuth.prototype.getOAuthAccessToken= function(oauth_token, oauth_token_secret, extra, callback) {
var extraParams= {};
- if( typeof oauth_verifier == "function" ) {
- callback= oauth_verifier;
- } else {
- extraParams.oauth_verifier= oauth_verifier;
+ switch(typeof extra) {
+ case "function":
+ callback = extra;
+ break;
+ case "object":
+ extraParams = extra;
+ break;
+ default :
+ extraParams.oauth_verifier = extra;
}
-
+
this._performSecureRequest( oauth_token, oauth_token_secret, this._clientOptions.accessTokenHttpMethod, this._accessUrl, extraParams, null, null, function(error, data, response) {
if( error ) callback(error);
else {
@@ -467,7 +472,7 @@ exports.OAuth.prototype._putOrPost= function(method, url, oauth_token, oauth_tok
}
return this._performSecureRequest( oauth_token, oauth_token_secret, method, url, extra_params, post_body, post_content_type, callback );
}
-
+
exports.OAuth.prototype.put= function(url, oauth_token, oauth_token_secret, post_body, post_content_type, callback) {
return this._putOrPost("PUT", url, oauth_token, oauth_token_secret, post_body, post_content_type, callback);
@@ -483,7 +488,7 @@ exports.OAuth.prototype.post= function(url, oauth_token, oauth_token_secret, pos
*
* The callback should expect a function of the following form:
*
- * function(err, token, token_secret, parsedQueryString) {}
+ * function(err, token, token_secret, parsedQueryString) {}
*
* This method has optional parameters so can be called in the following 2 ways:
*
@@ -502,7 +507,7 @@ exports.OAuth.prototype.getOAuthRequestToken= function( extraParams, callback )
callback = extraParams;
extraParams = {};
}
- // Callbacks are 1.0A related
+ // Callbacks are 1.0A related
if( this._authorize_callback ) {
extraParams["oauth_callback"]= this._authorize_callback;
}
@@ -529,12 +534,12 @@ exports.OAuth.prototype.signUrl= function(url, oauth_token, oauth_token_secret,
var orderedParameters= this._prepareParameters(oauth_token, oauth_token_secret, method, url, {});
var parsedUrl= URL.parse( url, false );
- var query="";
+ var query="";
for( var i= 0 ; i < orderedParameters.length; i++) {
query+= orderedParameters[i][0]+"="+ this._encodeData(orderedParameters[i][1]) + "&";
}
query= query.substring(0, query.length-1);
-
+
return parsedUrl.protocol + "//"+ parsedUrl.host + parsedUrl.pathname + "?" + query;
};
Something went wrong with that request. Please try again.