summaryrefslogtreecommitdiff
path: root/deps/npm/lib/auth
diff options
context:
space:
mode:
authorKat Marchán <kzm@zkat.tech>2019-01-29 14:43:00 -0800
committerMyles Borins <mylesborins@google.com>2019-02-12 00:06:29 -0800
commit43dd49c9782848c25e5b03448c8a0f923f13c158 (patch)
treef7ac5d645019b2b844f26be66c291bbae734d097 /deps/npm/lib/auth
parentb361f9577fbd72e518438d3fa0b01f7d34d814a5 (diff)
downloadnode-new-43dd49c9782848c25e5b03448c8a0f923f13c158.tar.gz
deps: upgrade npm to 6.7.0
PR-URL: https://github.com/nodejs/node/pull/25804 Reviewed-By: Myles Borins <myles.borins@gmail.com>
Diffstat (limited to 'deps/npm/lib/auth')
-rw-r--r--deps/npm/lib/auth/legacy.js72
-rw-r--r--deps/npm/lib/auth/sso.js103
2 files changed, 96 insertions, 79 deletions
diff --git a/deps/npm/lib/auth/legacy.js b/deps/npm/lib/auth/legacy.js
index 8c25df0288..7ad678be5e 100644
--- a/deps/npm/lib/auth/legacy.js
+++ b/deps/npm/lib/auth/legacy.js
@@ -1,11 +1,11 @@
'use strict'
+
const read = require('../utils/read-user-info.js')
-const profile = require('npm-profile')
+const profile = require('libnpm/profile')
const log = require('npmlog')
-const npm = require('../npm.js')
+const figgyPudding = require('figgy-pudding')
+const npmConfig = require('../config/figgy-config.js')
const output = require('../utils/output.js')
-const pacoteOpts = require('../config/pacote')
-const fetchOpts = require('../config/fetch-opts')
const openUrl = require('../utils/open-url')
const openerPromise = (url) => new Promise((resolve, reject) => {
@@ -26,54 +26,54 @@ const loginPrompter = (creds) => {
})
}
-module.exports.login = (creds, registry, scope, cb) => {
- const conf = {
- log: log,
- creds: creds,
- registry: registry,
- auth: {
- otp: npm.config.get('otp')
- },
- scope: scope,
- opts: fetchOpts.fromPacote(pacoteOpts())
- }
- login(conf).then((newCreds) => cb(null, newCreds)).catch(cb)
+const LoginOpts = figgyPudding({
+ 'always-auth': {},
+ creds: {},
+ log: {default: () => log},
+ registry: {},
+ scope: {}
+})
+
+module.exports.login = (creds = {}, registry, scope, cb) => {
+ const opts = LoginOpts(npmConfig()).concat({scope, registry, creds})
+ login(opts).then((newCreds) => cb(null, newCreds)).catch(cb)
}
-function login (conf) {
- return profile.login(openerPromise, loginPrompter, conf)
+function login (opts) {
+ return profile.login(openerPromise, loginPrompter, opts)
.catch((err) => {
if (err.code === 'EOTP') throw err
- const u = conf.creds.username
- const p = conf.creds.password
- const e = conf.creds.email
+ const u = opts.creds.username
+ const p = opts.creds.password
+ const e = opts.creds.email
if (!(u && p && e)) throw err
- return profile.adduserCouch(u, e, p, conf)
+ return profile.adduserCouch(u, e, p, opts)
})
.catch((err) => {
if (err.code !== 'EOTP') throw err
- return read.otp('Enter one-time password from your authenticator app: ').then((otp) => {
- conf.auth.otp = otp
- const u = conf.creds.username
- const p = conf.creds.password
- return profile.loginCouch(u, p, conf)
+ return read.otp(
+ 'Enter one-time password from your authenticator app: '
+ ).then(otp => {
+ const u = opts.creds.username
+ const p = opts.creds.password
+ return profile.loginCouch(u, p, opts.concat({otp}))
})
}).then((result) => {
const newCreds = {}
if (result && result.token) {
newCreds.token = result.token
} else {
- newCreds.username = conf.creds.username
- newCreds.password = conf.creds.password
- newCreds.email = conf.creds.email
- newCreds.alwaysAuth = npm.config.get('always-auth')
+ newCreds.username = opts.creds.username
+ newCreds.password = opts.creds.password
+ newCreds.email = opts.creds.email
+ newCreds.alwaysAuth = opts['always-auth']
}
- const usermsg = conf.creds.username ? ' user ' + conf.creds.username : ''
- conf.log.info('login', 'Authorized' + usermsg)
- const scopeMessage = conf.scope ? ' to scope ' + conf.scope : ''
- const userout = conf.creds.username ? ' as ' + conf.creds.username : ''
- output('Logged in%s%s on %s.', userout, scopeMessage, conf.registry)
+ const usermsg = opts.creds.username ? ' user ' + opts.creds.username : ''
+ opts.log.info('login', 'Authorized' + usermsg)
+ const scopeMessage = opts.scope ? ' to scope ' + opts.scope : ''
+ const userout = opts.creds.username ? ' as ' + opts.creds.username : ''
+ output('Logged in%s%s on %s.', userout, scopeMessage, opts.registry)
return newCreds
})
}
diff --git a/deps/npm/lib/auth/sso.js b/deps/npm/lib/auth/sso.js
index 519ca8496c..099e764e3a 100644
--- a/deps/npm/lib/auth/sso.js
+++ b/deps/npm/lib/auth/sso.js
@@ -1,56 +1,73 @@
-var log = require('npmlog')
-var npm = require('../npm.js')
-var output = require('../utils/output')
-var openUrl = require('../utils/open-url')
+'use strict'
+
+const BB = require('bluebird')
+
+const figgyPudding = require('figgy-pudding')
+const log = require('npmlog')
+const npmConfig = require('../config/figgy-config.js')
+const npmFetch = require('npm-registry-fetch')
+const output = require('../utils/output.js')
+const openUrl = BB.promisify(require('../utils/open-url.js'))
+const otplease = require('../utils/otplease.js')
+const profile = require('libnpm/profile')
+
+const SsoOpts = figgyPudding({
+ ssoType: 'sso-type',
+ 'sso-type': {},
+ ssoPollFrequency: 'sso-poll-frequency',
+ 'sso-poll-frequency': {}
+})
module.exports.login = function login (creds, registry, scope, cb) {
- var ssoType = npm.config.get('sso-type')
+ const opts = SsoOpts(npmConfig()).concat({creds, registry, scope})
+ const ssoType = opts.ssoType
if (!ssoType) { return cb(new Error('Missing option: sso-type')) }
- var params = {
- // We're reusing the legacy login endpoint, so we need some dummy
- // stuff here to pass validation. They're never used.
- auth: {
- username: 'npm_' + ssoType + '_auth_dummy_user',
- password: 'placeholder',
- email: 'support@npmjs.com',
- authType: ssoType
- }
+ // We're reusing the legacy login endpoint, so we need some dummy
+ // stuff here to pass validation. They're never used.
+ const auth = {
+ username: 'npm_' + ssoType + '_auth_dummy_user',
+ password: 'placeholder',
+ email: 'support@npmjs.com',
+ authType: ssoType
}
- npm.registry.adduser(registry, params, function (er, doc) {
- if (er) return cb(er)
- if (!doc || !doc.token) return cb(new Error('no SSO token returned'))
- if (!doc.sso) return cb(new Error('no SSO URL returned by services'))
-
- openUrl(doc.sso, 'to complete your login please visit', function () {
- pollForSession(registry, doc.token, function (err, username) {
- if (err) return cb(err)
- log.info('adduser', 'Authorized user %s', username)
- var scopeMessage = scope ? ' to scope ' + scope : ''
- output('Logged in as %s%s on %s.', username, scopeMessage, registry)
-
- cb(null, { token: doc.token })
- })
+ otplease(opts,
+ opts => profile.loginCouch(auth.username, auth.password, opts)
+ ).then(({token, sso}) => {
+ if (!token) { throw new Error('no SSO token returned') }
+ if (!sso) { throw new Error('no SSO URL returned by services') }
+ return openUrl(sso, 'to complete your login please visit').then(() => {
+ return pollForSession(registry, token, opts)
+ }).then(username => {
+ log.info('adduser', 'Authorized user %s', username)
+ var scopeMessage = scope ? ' to scope ' + scope : ''
+ output('Logged in as %s%s on %s.', username, scopeMessage, registry)
+ return {token}
})
- })
+ }).nodeify(cb)
}
-function pollForSession (registry, token, cb) {
+function pollForSession (registry, token, opts) {
log.info('adduser', 'Polling for validated SSO session')
- npm.registry.whoami(registry, {
- auth: {
- token: token
- }
- }, function (er, username) {
- if (er && er.statusCode !== 401) {
- cb(er)
- } else if (!username) {
- setTimeout(function () {
- pollForSession(registry, token, cb)
- }, npm.config.get('sso-poll-frequency'))
- } else {
- cb(null, username)
+ return npmFetch.json(
+ '/-/whoami', opts.concat({registry, forceAuth: {token}})
+ ).then(
+ ({username}) => username,
+ err => {
+ if (err.code === 'E401') {
+ return sleep(opts['sso-poll-frequency']).then(() => {
+ return pollForSession(registry, token, opts)
+ })
+ } else {
+ throw err
+ }
}
+ )
+}
+
+function sleep (time) {
+ return new BB((resolve) => {
+ setTimeout(resolve, time)
})
}