1 | 'use strict'
|
2 |
|
3 | let cli = require('heroku-cli-util')
|
4 | let _ = require('lodash')
|
5 | let Utils = require('../../lib/utils')
|
6 | let error = require('../../lib/error')
|
7 | let co = require('co')
|
8 |
|
9 | function * run (context, heroku) {
|
10 | let appName = context.app
|
11 | let permissions = context.flags.permissions || context.flags.privileges
|
12 | if (!permissions) error.exit(1, 'Required flag: --permissions PERMISSIONS')
|
13 |
|
14 | permissions = permissions.split(',')
|
15 |
|
16 | let appInfo = yield heroku.get(`/apps/${appName}`)
|
17 |
|
18 | if (context.flags.privileges) cli.warn('DEPRECATION WARNING: use `--permissions` not `--privileges`')
|
19 | if (!Utils.isOrgApp(appInfo.owner.email)) error.exit(1, `Error: cannot update permissions. The app ${cli.color.cyan(appName)} is not owned by an organization`)
|
20 |
|
21 |
|
22 | permissions.push('view')
|
23 | permissions = _.uniq(permissions.sort())
|
24 |
|
25 | let request = heroku.patch(`/organizations/apps/${appName}/collaborators/${context.args.email}`, {
|
26 | body: { permissions: permissions }
|
27 | })
|
28 | yield cli.action(`Updating ${context.args.email} in application ${cli.color.cyan(appName)} with ${permissions} permissions`, request)
|
29 | }
|
30 |
|
31 | module.exports = {
|
32 | topic: 'access',
|
33 | needsAuth: true,
|
34 | needsApp: true,
|
35 | command: 'update',
|
36 | description: 'Update existing collaborators in an org app',
|
37 | help: 'heroku access:update user@email.com --app APP --privileges deploy,manage,operate',
|
38 | args: [{name: 'email', optional: false}],
|
39 | flags: [
|
40 | { name: 'permissions', hasValue: true, description: 'comma-delimited list of permissions to update (deploy,manage,operate)' },
|
41 | { name: 'privileges', hasValue: true, hidden: true }
|
42 | ],
|
43 | run: cli.command(co.wrap(run))
|
44 | }
|