1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.diagnose = void 0;
- const extensionsHelper_1 = require("./extensionsHelper");
- const getProjectNumber_1 = require("../getProjectNumber");
- const utils = require("../utils");
- const resourceManager = require("../gcp/resourceManager");
- const extensionsApi_1 = require("./extensionsApi");
- const prompt_1 = require("../prompt");
- const logger_1 = require("../logger");
- const error_1 = require("../error");
- const SERVICE_AGENT_ROLE = "roles/firebasemods.serviceAgent";
- async function diagnose(projectId) {
- const projectNumber = await (0, getProjectNumber_1.getProjectNumber)({ projectId });
- const firexSaProjectId = utils.envOverride("FIREBASE_EXTENSIONS_SA_PROJECT_ID", "gcp-sa-firebasemods");
- const saEmail = `service-${projectNumber}@${firexSaProjectId}.iam.gserviceaccount.com`;
- utils.logLabeledBullet(extensionsHelper_1.logPrefix, "Checking project IAM policy...");
- await (0, extensionsApi_1.listInstances)(projectId);
- let policy;
- try {
- policy = await resourceManager.getIamPolicy(projectId);
- logger_1.logger.debug(policy);
- }
- catch (e) {
- if (e instanceof error_1.FirebaseError && e.status === 403) {
- throw new error_1.FirebaseError("Unable to get project IAM policy, permission denied (403). Please " +
- "make sure you have sufficient project privileges or if this is a brand new project " +
- "try again in a few minutes.");
- }
- throw e;
- }
- if (policy.bindings.find((b) => b.role === SERVICE_AGENT_ROLE && b.members.includes("serviceAccount:" + saEmail))) {
- utils.logLabeledSuccess(extensionsHelper_1.logPrefix, "Project IAM policy OK");
- return true;
- }
- else {
- utils.logWarning("Firebase Extensions Service Agent is missing a required IAM role " +
- "`Firebase Extensions API Service Agent`.");
- const fix = await (0, prompt_1.promptOnce)({
- type: "confirm",
- message: "Would you like to fix the issue by updating IAM policy to include Firebase " +
- "Extensions Service Agent with role `Firebase Extensions API Service Agent`",
- });
- if (fix) {
- policy.bindings.push({
- role: SERVICE_AGENT_ROLE,
- members: ["serviceAccount:" + saEmail],
- });
- await resourceManager.setIamPolicy(projectId, policy, "bindings");
- utils.logSuccess("Project IAM policy updated successfully");
- return true;
- }
- return false;
- }
- }
- exports.diagnose = diagnose;
|