amazon-associate
Version:
amazon-associate is a simple interface to amazon associate reports for nodejs
42 lines (32 loc) • 1.35 kB
text/coffeescript
crypto = require 'crypto'
_ = require 'underscore'
md5 = (string) ->
hash = crypto.createHash 'md5'
hash.update string
hash.digest 'hex'
module.exports = digest =
parseChallenge: (challengeString) ->
# header is something like this:
# Digest realm="DataFeeds", qop="auth", nonce="69e3391d503ae9fd43e9b5202390d15a", opaque="0753652c1f86cb100ec28975b6a72fbf"
obj = {}
_.each challengeString.substring(7).split(/,\s+/), (part) ->
[key, valueInQuotes] = part.split '='
obj[key] = valueInQuotes.replace /"/g, ''
return obj
renderResponse: (challenge, username, password, path) ->
h1 = md5 [username, challenge.realm, password].join ':'
h2 = md5 ['GET', path].join ':'
md5 [h1, challenge.nonce, '000001', '', 'auth', h2].join ':'
renderDigest: (challenge, username, password, path) ->
params =
username: username
realm: challenge.realm
nonce: challenge.nonce
uri: path
qop: challenge.qop
response: digest.renderResponse challenge, username, password, path
nc: '000001'
cnonce: ''
opaque: challenge.opaque
parts = _.map _.keys(params), (key) -> "#{key}=\"#{params[key]}\""
'Digest ' + parts.join ', '