1 line
16 KiB
JSON
1 line
16 KiB
JSON
{"ast":null,"code":"'use strict';\n\nvar caseless = require('caseless');\n\nvar uuid = require('uuid/v4');\n\nvar helpers = require('./helpers');\n\nvar md5 = helpers.md5;\nvar toBase64 = helpers.toBase64;\n\nfunction Auth(request) {\n // define all public properties here\n this.request = request;\n this.hasAuth = false;\n this.sentAuth = false;\n this.bearerToken = null;\n this.user = null;\n this.pass = null;\n}\n\nAuth.prototype.basic = function (user, pass, sendImmediately) {\n var self = this;\n\n if (typeof user !== 'string' || pass !== undefined && typeof pass !== 'string') {\n self.request.emit('error', new Error('auth() received invalid user or password'));\n }\n\n self.user = user;\n self.pass = pass;\n self.hasAuth = true;\n var header = user + ':' + (pass || '');\n\n if (sendImmediately || typeof sendImmediately === 'undefined') {\n var authHeader = 'Basic ' + toBase64(header);\n self.sentAuth = true;\n return authHeader;\n }\n};\n\nAuth.prototype.bearer = function (bearer, sendImmediately) {\n var self = this;\n self.bearerToken = bearer;\n self.hasAuth = true;\n\n if (sendImmediately || typeof sendImmediately === 'undefined') {\n if (typeof bearer === 'function') {\n bearer = bearer();\n }\n\n var authHeader = 'Bearer ' + (bearer || '');\n self.sentAuth = true;\n return authHeader;\n }\n};\n\nAuth.prototype.digest = function (method, path, authHeader) {\n // TODO: More complete implementation of RFC 2617.\n // - handle challenge.domain\n // - support qop=\"auth-int\" only\n // - handle Authentication-Info (not necessarily?)\n // - check challenge.stale (not necessarily?)\n // - increase nc (not necessarily?)\n // For reference:\n // http://tools.ietf.org/html/rfc2617#section-3\n // https://github.com/bagder/curl/blob/master/lib/http_digest.c\n var self = this;\n var challenge = {};\n var re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi;\n\n while (true) {\n var match = re.exec(authHeader);\n\n if (!match) {\n break;\n }\n\n challenge[match[1]] = match[2] || match[3];\n }\n /**\n * RFC 2617: handle both MD5 and MD5-sess algorithms.\n *\n * If the algorithm directive's value is \"MD5\" or unspecified, then HA1 is\n * HA1=MD5(username:realm:password)\n * If the algorithm directive's value is \"MD5-sess\", then HA1 is\n * HA1=MD5(MD5(username:realm:password):nonce:cnonce)\n */\n\n\n var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) {\n var ha1 = md5(user + ':' + realm + ':' + pass);\n\n if (algorithm && algorithm.toLowerCase() === 'md5-sess') {\n return md5(ha1 + ':' + nonce + ':' + cnonce);\n } else {\n return ha1;\n }\n };\n\n var qop = /(^|,)\\s*auth\\s*($|,)/.test(challenge.qop) && 'auth';\n var nc = qop && '00000001';\n var cnonce = qop && uuid().replace(/-/g, '');\n var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce);\n var ha2 = md5(method + ':' + path);\n var digestResponse = qop ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2) : md5(ha1 + ':' + challenge.nonce + ':' + ha2);\n var authValues = {\n username: self.user,\n realm: challenge.realm,\n nonce: challenge.nonce,\n uri: path,\n qop: qop,\n response: digestResponse,\n nc: nc,\n cnonce: cnonce,\n algorithm: challenge.algorithm,\n opaque: challenge.opaque\n };\n authHeader = [];\n\n for (var k in authValues) {\n if (authValues[k]) {\n if (k === 'qop' || k === 'nc' || k === 'algorithm') {\n authHeader.push(k + '=' + authValues[k]);\n } else {\n authHeader.push(k + '=\"' + authValues[k] + '\"');\n }\n }\n }\n\n authHeader = 'Digest ' + authHeader.join(', ');\n self.sentAuth = true;\n return authHeader;\n};\n\nAuth.prototype.onRequest = function (user, pass, sendImmediately, bearer) {\n var self = this;\n var request = self.request;\n var authHeader;\n\n if (bearer === undefined && user === undefined) {\n self.request.emit('error', new Error('no auth mechanism defined'));\n } else if (bearer !== undefined) {\n authHeader = self.bearer(bearer, sendImmediately);\n } else {\n authHeader = self.basic(user, pass, sendImmediately);\n }\n\n if (authHeader) {\n request.setHeader('authorization', authHeader);\n }\n};\n\nAuth.prototype.onResponse = function (response) {\n var self = this;\n var request = self.request;\n\n if (!self.hasAuth || self.sentAuth) {\n return null;\n }\n\n var c = caseless(response.headers);\n var authHeader = c.get('www-authenticate');\n var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase();\n request.debug('reauth', authVerb);\n\n switch (authVerb) {\n case 'basic':\n return self.basic(self.user, self.pass, true);\n\n case 'bearer':\n return self.bearer(self.bearerToken, true);\n\n case 'digest':\n return self.digest(request.method, request.path, authHeader);\n }\n};\n\nexports.Auth = Auth;","map":{"version":3,"sources":["/Users/tylerkoenig/Code/personal/react-scss2/node_modules/request/lib/auth.js"],"names":["caseless","require","uuid","helpers","md5","toBase64","Auth","request","hasAuth","sentAuth","bearerToken","user","pass","prototype","basic","sendImmediately","self","undefined","emit","Error","header","authHeader","bearer","digest","method","path","challenge","re","match","exec","ha1Compute","algorithm","realm","nonce","cnonce","ha1","toLowerCase","qop","test","nc","replace","ha2","digestResponse","authValues","username","uri","response","opaque","k","push","join","onRequest","setHeader","onResponse","c","headers","get","authVerb","split","debug","exports"],"mappings":"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","sourcesContent":["'use strict'\n\nvar caseless = require('caseless')\nvar uuid = require('uuid/v4')\nvar helpers = require('./helpers')\n\nvar md5 = helpers.md5\nvar toBase64 = helpers.toBase64\n\nfunction Auth (request) {\n // define all public properties here\n this.request = request\n this.hasAuth = false\n this.sentAuth = false\n this.bearerToken = null\n this.user = null\n this.pass = null\n}\n\nAuth.prototype.basic = function (user, pass, sendImmediately) {\n var self = this\n if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {\n self.request.emit('error', new Error('auth() received invalid user or password'))\n }\n self.user = user\n self.pass = pass\n self.hasAuth = true\n var header = user + ':' + (pass || '')\n if (sendImmediately || typeof sendImmediately === 'undefined') {\n var authHeader = 'Basic ' + toBase64(header)\n self.sentAuth = true\n return authHeader\n }\n}\n\nAuth.prototype.bearer = function (bearer, sendImmediately) {\n var self = this\n self.bearerToken = bearer\n self.hasAuth = true\n if (sendImmediately || typeof sendImmediately === 'undefined') {\n if (typeof bearer === 'function') {\n bearer = bearer()\n }\n var authHeader = 'Bearer ' + (bearer || '')\n self.sentAuth = true\n return authHeader\n }\n}\n\nAuth.prototype.digest = function (method, path, authHeader) {\n // TODO: More complete implementation of RFC 2617.\n // - handle challenge.domain\n // - support qop=\"auth-int\" only\n // - handle Authentication-Info (not necessarily?)\n // - check challenge.stale (not necessarily?)\n // - increase nc (not necessarily?)\n // For reference:\n // http://tools.ietf.org/html/rfc2617#section-3\n // https://github.com/bagder/curl/blob/master/lib/http_digest.c\n\n var self = this\n\n var challenge = {}\n var re = /([a-z0-9_-]+)=(?:\"([^\"]+)\"|([a-z0-9_-]+))/gi\n while (true) {\n var match = re.exec(authHeader)\n if (!match) {\n break\n }\n challenge[match[1]] = match[2] || match[3]\n }\n\n /**\n * RFC 2617: handle both MD5 and MD5-sess algorithms.\n *\n * If the algorithm directive's value is \"MD5\" or unspecified, then HA1 is\n * HA1=MD5(username:realm:password)\n * If the algorithm directive's value is \"MD5-sess\", then HA1 is\n * HA1=MD5(MD5(username:realm:password):nonce:cnonce)\n */\n var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) {\n var ha1 = md5(user + ':' + realm + ':' + pass)\n if (algorithm && algorithm.toLowerCase() === 'md5-sess') {\n return md5(ha1 + ':' + nonce + ':' + cnonce)\n } else {\n return ha1\n }\n }\n\n var qop = /(^|,)\\s*auth\\s*($|,)/.test(challenge.qop) && 'auth'\n var nc = qop && '00000001'\n var cnonce = qop && uuid().replace(/-/g, '')\n var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce)\n var ha2 = md5(method + ':' + path)\n var digestResponse = qop\n ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2)\n : md5(ha1 + ':' + challenge.nonce + ':' + ha2)\n var authValues = {\n username: self.user,\n realm: challenge.realm,\n nonce: challenge.nonce,\n uri: path,\n qop: qop,\n response: digestResponse,\n nc: nc,\n cnonce: cnonce,\n algorithm: challenge.algorithm,\n opaque: challenge.opaque\n }\n\n authHeader = []\n for (var k in authValues) {\n if (authValues[k]) {\n if (k === 'qop' || k === 'nc' || k === 'algorithm') {\n authHeader.push(k + '=' + authValues[k])\n } else {\n authHeader.push(k + '=\"' + authValues[k] + '\"')\n }\n }\n }\n authHeader = 'Digest ' + authHeader.join(', ')\n self.sentAuth = true\n return authHeader\n}\n\nAuth.prototype.onRequest = function (user, pass, sendImmediately, bearer) {\n var self = this\n var request = self.request\n\n var authHeader\n if (bearer === undefined && user === undefined) {\n self.request.emit('error', new Error('no auth mechanism defined'))\n } else if (bearer !== undefined) {\n authHeader = self.bearer(bearer, sendImmediately)\n } else {\n authHeader = self.basic(user, pass, sendImmediately)\n }\n if (authHeader) {\n request.setHeader('authorization', authHeader)\n }\n}\n\nAuth.prototype.onResponse = function (response) {\n var self = this\n var request = self.request\n\n if (!self.hasAuth || self.sentAuth) { return null }\n\n var c = caseless(response.headers)\n\n var authHeader = c.get('www-authenticate')\n var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase()\n request.debug('reauth', authVerb)\n\n switch (authVerb) {\n case 'basic':\n return self.basic(self.user, self.pass, true)\n\n case 'bearer':\n return self.bearer(self.bearerToken, true)\n\n case 'digest':\n return self.digest(request.method, request.path, authHeader)\n }\n}\n\nexports.Auth = Auth\n"]},"metadata":{},"sourceType":"script"} |