123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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.flatOptions
- 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
|