Sha256: 3f0d4b1fac0a0c4451e3129d9b266ce02bca6118256c2e7c8027200db2682737

Contents?: true

Size: 1.06 KB

Versions: 24

Compression:

Stored size: 1.06 KB

Contents

var crypto = require('crypto')
  , qs = require('querystring')
  ;

function sha1 (key, body) {
  return crypto.createHmac('sha1', key).update(body).digest('base64')
}

function rfc3986 (str) {
  return encodeURIComponent(str)
    .replace(/!/g,'%21')
    .replace(/\*/g,'%2A')
    .replace(/\(/g,'%28')
    .replace(/\)/g,'%29')
    .replace(/'/g,'%27')
    ;
}

function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) {
  // adapted from https://dev.twitter.com/docs/auth/oauth and 
  // https://dev.twitter.com/docs/auth/creating-signature

  var querystring = Object.keys(params).sort().map(function(key){
    // big WTF here with the escape + encoding but it's what twitter wants
    return escape(rfc3986(key)) + "%3D" + escape(rfc3986(params[key]))
  }).join('%26')

  var base = [
    httpMethod ? httpMethod.toUpperCase() : 'GET',
    rfc3986(base_uri),
    querystring
  ].join('&')

  var key = [
    consumer_secret,
    token_secret || ''
  ].map(rfc3986).join('&')

  return sha1(key, base)
}

exports.hmacsign = hmacsign
exports.rfc3986 = rfc3986

Version data entries

24 entries across 24 versions & 3 rubygems

Version Path
ela-4.1.6 node_modules/oauth-sign/index.js
ela-4.1.5 node_modules/oauth-sign/index.js
ela-4.1.4 node_modules/oauth-sign/index.js
ela-4.1.3 node_modules/oauth-sign/index.js
ela-4.1.2 node_modules/oauth-sign/index.js
ela-4.1.1 node_modules/oauth-sign/index.js
ela-4.1.0 node_modules/oauth-sign/index.js
ela-4.0.0 node_modules/oauth-sign/index.js
ela-3.4.3 node_modules/oauth-sign/index.js
ela-3.4.2 node_modules/oauth-sign/index.js
ela-3.4.0 node_modules/oauth-sign/index.js
ela-3.3.1 node_modules/oauth-sign/index.js
ela-3.3.0 node_modules/oauth-sign/index.js
ela-3.2.0 node_modules/oauth-sign/index.js
ela-3.1.1 node_modules/oauth-sign/index.js
ela-3.1.0 node_modules/oauth-sign/index.js
ela-3.0.0 node_modules/oauth-sign/index.js
ela-2.0.0 node_modules/oauth-sign/index.js
ela-1.1.0 node_modules/oauth-sign/index.js
freezerwatch-0.2.0 node_modules/freezerwatch/node_modules/lacrosse/node_modules/request/node_modules/oauth-sign/index.js