summaryrefslogtreecommitdiff
path: root/deps/npm/lib/auth/legacy.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/lib/auth/legacy.js')
-rw-r--r--deps/npm/lib/auth/legacy.js92
1 files changed, 35 insertions, 57 deletions
diff --git a/deps/npm/lib/auth/legacy.js b/deps/npm/lib/auth/legacy.js
index 08de61bff0..92bf44c119 100644
--- a/deps/npm/lib/auth/legacy.js
+++ b/deps/npm/lib/auth/legacy.js
@@ -6,74 +6,52 @@ const npm = require('../npm.js')
const output = require('../utils/output.js')
const pacoteOpts = require('../config/pacote')
const fetchOpts = require('../config/fetch-opts')
-const opener = require('opener')
-const openerPromise = (url) => new Promise((resolve, reject) => {
- opener(url, { command: npm.config.get('browser') }, (er) => er ? reject(er) : resolve())
-})
+module.exports.login = function login (creds, registry, scope, cb) {
+ let username = creds.username || ''
+ let password = creds.password || ''
+ let email = creds.email || ''
+ const auth = {}
+ if (npm.config.get('otp')) auth.otp = npm.config.get('otp')
-const loginPrompter = (creds) => {
- const opts = { log: log }
- return read.username('Username:', creds.username, opts).then((u) => {
- creds.username = u
- return read.password('Password:', creds.password)
+ return read.username('Username:', username, {log: log}).then((u) => {
+ username = u
+ return read.password('Password: ', password)
}).then((p) => {
- creds.password = p
- return read.email('Email: (this IS public) ', creds.email, opts)
+ password = p
+ return read.email('Email: (this IS public) ', email, {log: log})
}).then((e) => {
- creds.email = e
- return 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)
-}
-
-function login (conf) {
- return profile.login(openerPromise, loginPrompter, conf)
- .catch((err) => {
- if (err.code === 'EOTP') throw err
- const u = conf.creds.username
- const p = conf.creds.password
- const e = conf.creds.email
- if (!(u && p && e)) throw err
- return profile.adduserCouch(u, e, p, conf)
- })
- .catch((err) => {
- if (err.code !== 'EOTP') throw err
- return read.otp('Authenticator provided OTP:').then((otp) => {
- conf.auth.otp = otp
- const u = conf.creds.username
- const p = conf.creds.password
- return profile.loginCouch(u, p, conf)
+ email = e
+ return profile.login(username, password, {registry: registry, auth: auth}).catch((err) => {
+ if (err.code === 'EOTP') throw err
+ return profile.adduser(username, email, password, {
+ registry: registry,
+ opts: fetchOpts.fromPacote(pacoteOpts())
+ })
+ }).catch((err) => {
+ if (err.code === 'EOTP' && !auth.otp) {
+ return read.otp('Authenticator provided OTP:').then((otp) => {
+ auth.otp = otp
+ return profile.login(username, password, {registry: registry, auth: auth})
+ })
+ } else {
+ throw err
+ }
})
}).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.username = username
+ newCreds.password = password
+ newCreds.email = email
newCreds.alwaysAuth = npm.config.get('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)
- return newCreds
- })
+ log.info('adduser', 'Authorized user %s', username)
+ const scopeMessage = scope ? ' to scope ' + scope : ''
+ output('Logged in as %s%s on %s.', username, scopeMessage, registry)
+ cb(null, newCreds)
+ }).catch(cb)
}