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.
30 lines
1.4 KiB
30 lines
1.4 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.requirePermissions = void 0;
|
|
const colorette_1 = require("colorette");
|
|
const projectUtils_1 = require("./projectUtils");
|
|
const requireAuth_1 = require("./requireAuth");
|
|
const logger_1 = require("./logger");
|
|
const error_1 = require("./error");
|
|
const iam_1 = require("./gcp/iam");
|
|
const BASE_PERMISSIONS = ["firebase.projects.get"];
|
|
async function requirePermissions(options, permissions = []) {
|
|
const projectId = (0, projectUtils_1.getProjectId)(options);
|
|
if (!projectId) {
|
|
return;
|
|
}
|
|
const requiredPermissions = BASE_PERMISSIONS.concat(permissions).sort();
|
|
await (0, requireAuth_1.requireAuth)(options);
|
|
logger_1.logger.debug(`[iam] checking project ${projectId} for permissions ${JSON.stringify(requiredPermissions)}`);
|
|
try {
|
|
const iamResult = await (0, iam_1.testIamPermissions)(projectId, requiredPermissions);
|
|
if (!iamResult.passed) {
|
|
throw new error_1.FirebaseError(`Authorization failed. This account is missing the following required permissions on project ${(0, colorette_1.bold)(projectId)}:\n\n ${iamResult.missing.join("\n ")}`);
|
|
}
|
|
}
|
|
catch (err) {
|
|
logger_1.logger.debug(`[iam] error while checking permissions, command may fail: ${err}`);
|
|
return;
|
|
}
|
|
}
|
|
exports.requirePermissions = requirePermissions;
|