UNPKG

heroku

Version:

CLI to interact with Heroku

89 lines (88 loc) 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const color_1 = require("@heroku-cli/color"); const command_1 = require("@heroku-cli/command"); const api_client_1 = require("@heroku-cli/command/lib/api-client"); const core_1 = require("@oclif/core"); const heroku_cli_util_1 = require("@heroku/heroku-cli-util"); const _ = require("lodash"); const teamUtils_1 = require("../../lib/teamUtils"); function printJSON(collaborators) { core_1.ux.log(JSON.stringify(collaborators, null, 2)); } function buildTableColumns(showPermissions) { const baseColumns = { email: { get: ({ email }) => color_1.default.cyan(email), }, role: { get: ({ role }) => color_1.default.green(role), }, }; if (showPermissions) { return Object.assign(Object.assign({}, baseColumns), { permissions: {} }); } return baseColumns; } function printAccess(app, collaborators) { var _a; const showPermissions = (0, teamUtils_1.isTeamApp)((_a = app.owner) === null || _a === void 0 ? void 0 : _a.email); collaborators = _.chain(collaborators) .sortBy(c => c.email || c.user.email) .reject(c => /herokumanager\.com$/.test(c.user.email)) .map(collab => { const email = collab.user.email; const role = collab.role; const data = { email: email, role: role || 'collaborator' }; if (showPermissions) { data.permissions = _.map(_.sortBy(collab.permissions, 'name'), 'name').join(', '); } return data; }) .value(); const tableColumns = buildTableColumns(showPermissions); heroku_cli_util_1.hux.table(collaborators, tableColumns); } function buildCollaboratorsArray(collaboratorsRaw, admins) { const collaboratorsNoAdmins = _.reject(collaboratorsRaw, { role: 'admin' }); return _.union(collaboratorsNoAdmins, admins); } class AccessIndex extends command_1.Command { async run() { var _a, _b; const { flags } = await this.parse(AccessIndex); const { app: appName, json } = flags; const { body: app } = await this.heroku.get(`/apps/${appName}`); let { body: collaborators } = await this.heroku.get(`/apps/${appName}/collaborators`); if ((0, teamUtils_1.isTeamApp)((_a = app.owner) === null || _a === void 0 ? void 0 : _a.email)) { const teamName = (0, teamUtils_1.getOwner)((_b = app.owner) === null || _b === void 0 ? void 0 : _b.email); try { const { body: members } = await this.heroku.get(`/teams/${teamName}/members`); let admins = members.filter(member => member.role === 'admin'); const { body: adminPermissions } = await this.heroku.get('/teams/permissions'); admins = _.forEach(admins, function (admin) { admin.user = { email: admin.email }; admin.permissions = adminPermissions; return admin; }); collaborators = buildCollaboratorsArray(collaborators, admins); } catch (error) { if (!(error instanceof api_client_1.HerokuAPIError && error.http.statusCode === 403)) throw error; } } if (json) printJSON(collaborators); else printAccess(app, collaborators); } } exports.default = AccessIndex; AccessIndex.description = 'list who has access to an app'; AccessIndex.topic = 'access'; AccessIndex.flags = { app: command_1.flags.app({ required: true }), remote: command_1.flags.remote({ char: 'r' }), json: command_1.flags.boolean({ description: 'output in json format' }), };