UNPKG

2.42 kBJavaScriptView Raw
1'use strict'
2
3let cli = require('heroku-cli-util')
4let _ = require('lodash')
5let Utils = require('../../lib/utils')
6let co = require('co')
7let error = require('../../lib/error')
8
9function * run (context, heroku) {
10 let appName = context.app
11 let permissions = context.flags.permissions || context.flags.privileges || ''
12 let appInfo = yield heroku.get(`/apps/${appName}`)
13 let output = `Adding ${cli.color.cyan(context.args.email)} access to the app ${cli.color.magenta(appName)}`
14 let request
15 let orgFeatures = []
16
17 if (Utils.isOrgApp(appInfo.owner.email)) {
18 let orgName = Utils.getOwner(appInfo.owner.email)
19 orgFeatures = yield heroku.get(`/organizations/${orgName}/features`)
20 }
21
22 if (orgFeatures.find(feature => feature.name === 'org-access-controls')) {
23 if (!permissions) error.exit(1, 'Missing argument: permissions')
24
25 if (context.flags.privileges) cli.warn('DEPRECATION WARNING: use `--permissions` not `--privileges`')
26
27 permissions = permissions.split(',')
28
29 // Give implicit `view` access
30 permissions.push('view')
31 permissions = _.uniq(permissions.sort())
32 output += ` with ${cli.color.green(permissions)} permissions`
33
34 request = heroku.post(`/organizations/apps/${appName}/collaborators`, {
35 body: { user: context.args.email, permissions: permissions }
36 })
37 } else {
38 request = heroku.post(`/apps/${appName}/collaborators`, {body: { user: context.args.email }})
39 }
40 yield cli.action(`${output}`, request)
41}
42
43module.exports = [
44 {
45 topic: 'access',
46 needsAuth: true,
47 needsApp: true,
48 command: 'add',
49 description: 'Add new users to your app',
50 help: 'heroku access:add user@email.com --app APP # Add a collaborator to your app\n\nheroku access:add user@email.com --app APP --permissions deploy,manage,operate # permissions must be comma separated',
51 args: [{name: 'email', optional: false}],
52 flags: [
53 {name: 'permissions', description: 'list of permissions comma separated', hasValue: true, optional: true},
54 {name: 'privileges', hasValue: true, optional: true, hidden: true} // Deprecated flag
55 ],
56 run: cli.command(co.wrap(run))
57 }, {
58 topic: 'sharing',
59 command: 'add',
60 help: `this command is now heroku access:add`,
61 variableArgs: true,
62 hidden: true,
63 run: () => {
64 cli.error(`This command is now ${cli.color.cyan('heroku access:add')}`)
65 process.exit(1)
66 }
67 }
68]