forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
4.3 KiB
113 lines
4.3 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.retrieveRoleInfo = exports.printSourceDownloadLink = exports.displayExtInfo = void 0;
|
|
const clc = require("colorette");
|
|
const { marked } = require("marked");
|
|
const TerminalRenderer = require("marked-terminal");
|
|
const utils = require("../utils");
|
|
const extensionsHelper_1 = require("./extensionsHelper");
|
|
const logger_1 = require("../logger");
|
|
const error_1 = require("../error");
|
|
const types_1 = require("./types");
|
|
const iam = require("../gcp/iam");
|
|
const secretsUtils_1 = require("./secretsUtils");
|
|
marked.setOptions({
|
|
renderer: new TerminalRenderer(),
|
|
});
|
|
const TASKS_ROLE = "cloudtasks.enqueuer";
|
|
const TASKS_API = "cloudtasks.googleapis.com";
|
|
async function displayExtInfo(extensionName, publisher, spec, published = false) {
|
|
const lines = [];
|
|
lines.push(`**Name**: ${spec.displayName}`);
|
|
if (publisher) {
|
|
lines.push(`**Publisher**: ${publisher}`);
|
|
}
|
|
if (spec.description) {
|
|
lines.push(`**Description**: ${spec.description}`);
|
|
}
|
|
if (published) {
|
|
if (spec.license) {
|
|
lines.push(`**License**: ${spec.license}`);
|
|
}
|
|
if (spec.sourceUrl) {
|
|
lines.push(`**Source code**: ${spec.sourceUrl}`);
|
|
}
|
|
}
|
|
const apis = impliedApis(spec);
|
|
if (apis.length) {
|
|
lines.push(displayApis(apis));
|
|
}
|
|
const roles = impliedRoles(spec);
|
|
if (roles.length) {
|
|
lines.push(await displayRoles(roles));
|
|
}
|
|
if (lines.length > 0) {
|
|
utils.logLabeledBullet(extensionsHelper_1.logPrefix, `information about '${clc.bold(extensionName)}':`);
|
|
const infoStr = lines.join("\n");
|
|
const formatted = marked(infoStr).replace(/\n+$/, "\n");
|
|
logger_1.logger.info(formatted);
|
|
return lines;
|
|
}
|
|
else {
|
|
throw new error_1.FirebaseError("Error occurred during installation: cannot parse info from source spec", {
|
|
context: {
|
|
spec: spec,
|
|
extensionName: extensionName,
|
|
},
|
|
});
|
|
}
|
|
}
|
|
exports.displayExtInfo = displayExtInfo;
|
|
function printSourceDownloadLink(sourceDownloadUri) {
|
|
const sourceDownloadMsg = `Want to review the source code that will be installed? Download it here: ${sourceDownloadUri}`;
|
|
utils.logBullet(marked(sourceDownloadMsg));
|
|
}
|
|
exports.printSourceDownloadLink = printSourceDownloadLink;
|
|
async function retrieveRoleInfo(role) {
|
|
const res = await iam.getRole(role);
|
|
return ` ${res.title} (${res.description})`;
|
|
}
|
|
exports.retrieveRoleInfo = retrieveRoleInfo;
|
|
async function displayRoles(roles) {
|
|
const lines = await Promise.all(roles.map((role) => {
|
|
return retrieveRoleInfo(role.role);
|
|
}));
|
|
return clc.bold("**Roles granted to this Extension**:\n") + lines.join("\n");
|
|
}
|
|
function displayApis(apis) {
|
|
const lines = apis.map((api) => {
|
|
return ` ${api.apiName} (${api.reason})`;
|
|
});
|
|
return "**APIs used by this Extension**:\n" + lines.join("\n");
|
|
}
|
|
function usesTasks(spec) {
|
|
return spec.resources.some((r) => { var _a; return r.type === types_1.FUNCTIONS_RESOURCE_TYPE && ((_a = r.properties) === null || _a === void 0 ? void 0 : _a.taskQueueTrigger) !== undefined; });
|
|
}
|
|
function impliedRoles(spec) {
|
|
var _a, _b, _c;
|
|
const roles = [];
|
|
if ((0, secretsUtils_1.usesSecrets)(spec) && !((_a = spec.roles) === null || _a === void 0 ? void 0 : _a.some((r) => r.role === secretsUtils_1.SECRET_ROLE))) {
|
|
roles.push({
|
|
role: secretsUtils_1.SECRET_ROLE,
|
|
reason: "Allows the extension to read secret values from Cloud Secret Manager",
|
|
});
|
|
}
|
|
if (usesTasks(spec) && !((_b = spec.roles) === null || _b === void 0 ? void 0 : _b.some((r) => r.role === TASKS_ROLE))) {
|
|
roles.push({
|
|
role: TASKS_ROLE,
|
|
reason: "Allows the extension to enqueue Cloud Tasks",
|
|
});
|
|
}
|
|
return roles.concat((_c = spec.roles) !== null && _c !== void 0 ? _c : []);
|
|
}
|
|
function impliedApis(spec) {
|
|
var _a, _b;
|
|
const apis = [];
|
|
if (usesTasks(spec) && !((_a = spec.apis) === null || _a === void 0 ? void 0 : _a.some((a) => a.apiName === TASKS_API))) {
|
|
apis.push({
|
|
apiName: TASKS_API,
|
|
reason: "Allows the extension to enqueue Cloud Tasks",
|
|
});
|
|
}
|
|
return apis.concat((_b = spec.apis) !== null && _b !== void 0 ? _b : []);
|
|
}
|