Skip to content

Instantly share code, notes, and snippets.

@andyedinborough
Created June 7, 2011 19:30
Show Gist options
  • Save andyedinborough/1012960 to your computer and use it in GitHub Desktop.
Save andyedinborough/1012960 to your computer and use it in GitHub Desktop.
Introduces $.oauth() to make using OAuth from jQuery as easy as using $.ajax()
(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);
@evanp
Copy link

evanp commented Oct 22, 2012

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?

@yokiman
Copy link

yokiman commented Jun 25, 2013

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

@mulderp
Copy link

mulderp commented Feb 1, 2014

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

@allanlaal
Copy link

Please Open Source this :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment