summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/registry-auth-token/index.js
diff options
context:
space:
mode:
authorRebecca Turner <me@re-becca.org>2018-04-20 18:26:37 -0700
committerRebecca Turner <me@re-becca.org>2018-05-24 23:24:45 -0700
commit468ab4519e1b92473acefb22801497a1af6aebae (patch)
treebdac1d062cd4b094bde3a21147bab5d82c792ece /deps/npm/node_modules/registry-auth-token/index.js
parentac8226115e2192a7a46ba07789fa5136f74223e1 (diff)
downloadandroid-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.tar.gz
android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.tar.bz2
android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.zip
deps: upgrade npm to 6.1.0
PR-URL: https://github.com/nodejs/node/pull/20190 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'deps/npm/node_modules/registry-auth-token/index.js')
-rw-r--r--deps/npm/node_modules/registry-auth-token/index.js118
1 files changed, 118 insertions, 0 deletions
diff --git a/deps/npm/node_modules/registry-auth-token/index.js b/deps/npm/node_modules/registry-auth-token/index.js
new file mode 100644
index 0000000000..d68f7eeb4b
--- /dev/null
+++ b/deps/npm/node_modules/registry-auth-token/index.js
@@ -0,0 +1,118 @@
+var url = require('url')
+var base64 = require('./base64')
+
+var decodeBase64 = base64.decodeBase64
+var encodeBase64 = base64.encodeBase64
+
+var tokenKey = ':_authToken'
+var userKey = ':username'
+var passwordKey = ':_password'
+
+module.exports = function () {
+ var checkUrl
+ var options
+ if (arguments.length >= 2) {
+ checkUrl = arguments[0]
+ options = arguments[1]
+ } else if (typeof arguments[0] === 'string') {
+ checkUrl = arguments[0]
+ } else {
+ options = arguments[0]
+ }
+ options = options || {}
+ options.npmrc = options.npmrc || require('rc')('npm', {registry: 'https://registry.npmjs.org/'})
+ checkUrl = checkUrl || options.npmrc.registry
+ return getRegistryAuthInfo(checkUrl, options) || getLegacyAuthInfo(options.npmrc)
+}
+
+function getRegistryAuthInfo (checkUrl, options) {
+ var parsed = url.parse(checkUrl, false, true)
+ var pathname
+
+ while (pathname !== '/' && parsed.pathname !== pathname) {
+ pathname = parsed.pathname || '/'
+
+ var regUrl = '//' + parsed.host + pathname.replace(/\/$/, '')
+ var authInfo = getAuthInfoForUrl(regUrl, options.npmrc)
+ if (authInfo) {
+ return authInfo
+ }
+
+ // break if not recursive
+ if (!options.recursive) {
+ return /\/$/.test(checkUrl)
+ ? undefined
+ : getRegistryAuthInfo(url.resolve(checkUrl, '.'), options)
+ }
+
+ parsed.pathname = url.resolve(normalizePath(pathname), '..') || '/'
+ }
+
+ return undefined
+}
+
+function getLegacyAuthInfo (npmrc) {
+ if (npmrc._auth) {
+ return {token: npmrc._auth, type: 'Basic'}
+ }
+ return undefined
+}
+
+function normalizePath (path) {
+ return path[path.length - 1] === '/' ? path : path + '/'
+}
+
+function getAuthInfoForUrl (regUrl, npmrc) {
+ // try to get bearer token
+ var bearerAuth = getBearerToken(npmrc[regUrl + tokenKey] || npmrc[regUrl + '/' + tokenKey])
+ if (bearerAuth) {
+ return bearerAuth
+ }
+
+ // try to get basic token
+ var username = npmrc[regUrl + userKey] || npmrc[regUrl + '/' + userKey]
+ var password = npmrc[regUrl + passwordKey] || npmrc[regUrl + '/' + passwordKey]
+ var basicAuth = getTokenForUsernameAndPassword(username, password)
+ if (basicAuth) {
+ return basicAuth
+ }
+
+ return undefined
+}
+
+function getBearerToken (tok) {
+ if (!tok) {
+ return undefined
+ }
+
+ // check if bearer token
+ var token = tok.replace(/^\$\{?([^}]*)\}?$/, function (fullMatch, envVar) {
+ return process.env[envVar]
+ })
+
+ return {token: token, type: 'Bearer'}
+}
+
+function getTokenForUsernameAndPassword (username, password) {
+ if (!username || !password) {
+ return undefined
+ }
+
+ // passwords are base64 encoded, so we need to decode it
+ // See https://github.com/npm/npm/blob/v3.10.6/lib/config/set-credentials-by-uri.js#L26
+ var pass = decodeBase64(password.replace(/^\$\{?([^}]*)\}?$/, function (fullMatch, envVar) {
+ return process.env[envVar]
+ }))
+
+ // a basic auth token is base64 encoded 'username:password'
+ // See https://github.com/npm/npm/blob/v3.10.6/lib/config/get-credentials-by-uri.js#L70
+ var token = encodeBase64(username + ':' + pass)
+
+ // we found a basicToken token so let's exit the loop
+ return {
+ token: token,
+ type: 'Basic',
+ password: pass,
+ username: username
+ }
+}