public
Last active

Introduces $.oauth() to make using OAuth from jQuery as easy as using $.ajax()

  • Download Gist
jquery.oauth.js
JavaScript
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
(function (window, document, $, undefined) {
if (!$.Deferred) throw 'jQuery 1.5 is required to use the jQuery.oauth script!';
 
function require(name, url) {
if (window[name] === undefined)
return $.ajax({ type: 'GET', cache: true, dataType: 'script', url: url });
}
 
$.oauth = function (options) {
var d = $.Deferred();
 
$.when(
require('str_sha1', 'http://oauth.googlecode.com/svn/code/javascript/sha1.js'),
require('OAuth', 'http://oauth.googlecode.com/svn/code/javascript/oauth.js')
).then(function () {
$.ajax(addOAuthStuffs(options)).done(d.resolve);
});
 
return $.extend({
success: function () { return this.then.apply(this, arguments); },
complete: function () { return this.done.apply(this, arguments); },
error: function () { return this.fail.apply(this, arguments); }
}, d.promise());
};
 
function addOAuthStuffs(options) {
options = $.extend({ type: 'GET', consumerKey: '', consumerSecret: '', tokenSecret: '', url: '' }, options);
if (options.data) {
if (typeof options.data !== "string")
options.data = $.param(options.data);
}
 
if (options.url.indexOf(':') == -1) {
if (options.url.substr(0, 1) == '/') {
options.url = location.protocol + '//' + location.host + options.url;
} else {
options.url = location.href.substr(0, location.href.lastIndexOf('/') + 1) + options.url;
}
}
 
var message = { action: options.url + (options.data && options.data.length > 0 ? '?' + options.data : ''),
method: options.type, parameters: [["oauth_version", "1.0"], ["oauth_consumer_key", options.consumerKey]]
};
 
OAuth.setTimestampAndNonce(message);
OAuth.SignatureMethod.sign(message, { consumerSecret: options.consumerSecret, tokenSecret: options.tokenSecret });
 
var parameterMap = OAuth.getParameterMap(message);
var baseStr = OAuth.decodeForm(OAuth.SignatureMethod.getBaseString(message));
options.data = baseStr[2][0];
 
if (parameterMap.parameters)
$.each(parameterMap.parameters, function (item, values) {
return $.each(values, function (subitem, value) {
if (value == 'oauth_signature') {
options.data += '&oauth_signature=' + escape(values[1]);
return false;
}
});
});
 
if (options.url.indexOf('?') > -1)
options.url = options.url.substr(0, options.url.indexOf('?'));
 
options.cache = false;
return options;
}
})(window, document, jQuery);

So, this is useful and non-trivial. It'd be nice to use it in Open Source projects. Any chance you'll put a MIT license on it?

Hola, have a example in twitter 1.1? Use del Oauth jQuery?

Very interesting indeed - any example e.g. for Twitter how to use this?

Please Open Source this :)

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.