commands/access/add.js
'use strict'
let cli = require('heroku-cli-util')
let _ = require('lodash')
let Utils = require('../../lib/utils')
let error = require('../../lib/error')
async function run (context, heroku) {
let appName = context.app
let permissions = context.flags.permissions || context.flags.privileges || ''
let appInfo = await heroku.get(`/apps/${appName}`)
let output = `Adding ${cli.color.cyan(context.args.email)} access to the app ${cli.color.magenta(appName)}`
let request
let orgFeatures = []
if (Utils.isOrgApp(appInfo.owner.email)) {
let orgName = Utils.getOwner(appInfo.owner.email)
orgFeatures = await heroku.get(`/organizations/${orgName}/features`)
}
if (orgFeatures.find(feature => feature.name === 'org-access-controls')) {
if (!permissions) error.exit(1, 'Missing argument: permissions')
if (context.flags.privileges) cli.warn('DEPRECATION WARNING: use `--permissions` not `--privileges`')
permissions = permissions.split(',')
// Give implicit `view` access
permissions.push('view')
permissions = _.uniq(permissions.sort())
output += ` with ${cli.color.green(permissions)} permissions`
request = heroku.post(`/organizations/apps/${appName}/collaborators`, {
body: { user: context.args.email, permissions: permissions }
})
} else {
request = heroku.post(`/apps/${appName}/collaborators`, {body: { user: context.args.email }})
}
await cli.action(`${output}`, request)
}
module.exports = [
{
topic: 'access',
needsAuth: true,
needsApp: true,
command: 'add',
description: 'add new users to your app',
examples: [
'$ heroku access:add user@email.com --app APP # add a collaborator to your app',
'$ heroku access:add user@email.com --app APP --permissions deploy,manage,operate # permissions must be comma separated'
],
args: [{name: 'email', optional: false}],
flags: [
{name: 'permissions', char: 'p', description: 'list of permissions comma separated', hasValue: true, optional: true},
{name: 'privileges', hasValue: true, optional: true, hidden: true} // Deprecated flag
],
run: cli.command(run)
}, {
topic: 'sharing',
command: 'add',
help: `this command is now heroku access:add`,
variableArgs: true,
hidden: true,
run: () => {
cli.error(`This command is now ${cli.color.cyan('heroku access:add')}`)
process.exit(1)
}
}
]