|
// Include merge and crypto-js npm packages into your package.json |
|
var merge = require('merge'); |
|
var crypto = require('crypto'); |
|
|
|
exports.generateAuthorizationHeader = function(method, url, consumerKey, consumerSecret, additionalParams) { |
|
|
|
if ( additionalParams === null ) { |
|
additionalParams = {}; |
|
} |
|
|
|
var signatureMethod = 'HMAC-SHA1'; |
|
var version = '1.0'; |
|
|
|
// Get timestamp in seconds |
|
var timestamp = '' + Math.round(new Date().getTime() / 1000); |
|
|
|
// Generate a random nonce |
|
var oauthNonce = Math.random().toString(36).slice(2); |
|
|
|
var oAuthParameters = { |
|
oauth_consumer_key: consumerKey, |
|
oauth_nonce: oauthNonce, |
|
oauth_signature_method: signatureMethod, |
|
oauth_timestamp: timestamp, |
|
oauth_version: version |
|
}; |
|
|
|
var signature = generateOAuthSignature(method, url, consumerSecret, merge(oAuthParameters, additionalParams)); |
|
|
|
return 'OAuth oauth_consumer_key="' + consumerKey + '",' + |
|
'oauth_signature_method="' + signatureMethod + '",' + |
|
'oauth_timestamp="' + timestamp + '",' + |
|
'oauth_nonce="' + oauthNonce + '",' + |
|
'oauth_version="' + version + '",' + |
|
'oauth_signature="' + encodeURIComponent(signature) + '"'; |
|
}; |
|
|
|
function generateOAuthSignature(method, url, secret, parameters) { |
|
|
|
// Order parameters by key name |
|
var signatureParams = ''; |
|
Object.keys(parameters).sort().forEach(function(key) { |
|
signatureParams += key.trim() + '=' + parameters[key].trim() + '&'; |
|
}); |
|
|
|
// Remove trailing ampersand |
|
signatureParams = signatureParams.slice(0, -1); |
|
var baseString = method.trim() + '&' + encodeURIComponent(url.trim()) + '&' + encodeURIComponent(signatureParams); |
|
return crypto.createHmac('sha1', secret + '&').update(baseString).digest('base64'); |
|
} |