-
Notifications
You must be signed in to change notification settings - Fork 3.4k
/
Copy pathadduser.js
87 lines (70 loc) · 1.97 KB
/
adduser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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',
'always-auth',
]
}
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
if (scope)
this.npm.config.set(scope + ':registry', registry, 'user')
this.npm.config.setCredentialsByURI(registry, newCreds)
await this.npm.config.save('user')
}
}
module.exports = AddUser