1 | 'use strict'
|
2 |
|
3 | let cli = require('heroku-cli-util')
|
4 | let _ = require('lodash')
|
5 | let Utils = require('../../lib/utils')
|
6 | let co = require('co')
|
7 | let error = require('../../lib/error')
|
8 |
|
9 | function * 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 |
|
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 |
|
43 | module.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}
|
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 | ]
|