From fc08e55542a1fcbd1b29691799e25531987d0d8a Mon Sep 17 00:00:00 2001 From: Gar Date: Mon, 7 Jun 2021 15:56:04 -0700 Subject: [PATCH] fix(login): properly save scope if defined setCredentialsByURI was clobbering the saving of the scope:registry config --- adduser.js | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ lib/adduser.js | 4 +-- 2 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 adduser.js diff --git a/adduser.js b/adduser.js new file mode 100644 index 0000000000000..ecc60c71dde06 --- /dev/null +++ b/adduser.js @@ -0,0 +1,87 @@ +const log = require('npmlog') +const replaceInfo = require('./utils/replace-info.js') +const BaseCommand = require('./base-command.js') +const authTypes = { + legacy: require('./auth/legacy.js'), + oauth: require('./auth/oauth.js'), + saml: require('./auth/saml.js'), + sso: require('./auth/sso.js'), +} + +class AddUser extends BaseCommand { + static get description () { + return 'Add a registry user account' + } + + static get name () { + return 'adduser' + } + + static get params () { + return [ + 'registry', + 'scope', + ] + } + + exec (args, cb) { + this.adduser(args).then(() => cb()).catch(cb) + } + + async adduser (args) { + const scope = this.npm.config.get('scope') + console.log(scope) + const registry = this.getRegistry(this.npm.flatOptions) + const auth = this.getAuthType(this.npm.flatOptions) + const creds = this.npm.config.getCredentialsByURI(registry) + + log.disableProgress() + + log.notice('', `Log in on ${replaceInfo(registry)}`) + + const { message, newCreds } = await auth(this.npm, { + ...this.npm.flatOptions, + creds, + registry, + scope, + }) + + await this.updateConfig({ + newCreds, + registry, + scope, + }) + + this.npm.output(message) + } + + getRegistry ({ scope, registry }) { + if (scope) { + const scopedRegistry = this.npm.config.get(`${scope}:registry`) + const cliRegistry = this.npm.config.get('registry', 'cli') + if (scopedRegistry && !cliRegistry) + return scopedRegistry + } + return registry + } + + getAuthType ({ authType }) { + const type = authTypes[authType] + + if (!type) + throw new Error('no such auth module') + + return type + } + + async updateConfig ({ newCreds, registry, scope }) { + this.npm.config.delete('_token', 'user') // prevent legacy pollution + + this.npm.config.setCredentialsByURI(registry, newCreds) + + if (scope) + this.npm.config.set(scope + ':registry', registry, 'user') + await this.npm.config.save('user') + } +} +module.exports = AddUser diff --git a/lib/adduser.js b/lib/adduser.js index fb1e323512b6d..e502276a1743c 100644 --- a/lib/adduser.js +++ b/lib/adduser.js @@ -75,11 +75,9 @@ class AddUser extends BaseCommand { async updateConfig ({ newCreds, registry, scope }) { this.npm.config.delete('_token', 'user') // prevent legacy pollution - + this.npm.config.setCredentialsByURI(registry, newCreds) if (scope) this.npm.config.set(scope + ':registry', registry, 'user') - - this.npm.config.setCredentialsByURI(registry, newCreds) await this.npm.config.save('user') } }