1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.testIamPermissions = exports.testResourceIamPermissions = exports.getRole = exports.deleteServiceAccount = exports.createServiceAccountKey = exports.getServiceAccount = exports.createServiceAccount = void 0;
- const api_1 = require("../api");
- const logger_1 = require("../logger");
- const apiv2_1 = require("../apiv2");
- const apiClient = new apiv2_1.Client({ urlPrefix: api_1.iamOrigin, apiVersion: "v1" });
- async function createServiceAccount(projectId, accountId, description, displayName) {
- const response = await apiClient.post(`/projects/${projectId}/serviceAccounts`, {
- accountId,
- serviceAccount: {
- displayName,
- description,
- },
- }, { skipLog: { resBody: true } });
- return response.body;
- }
- exports.createServiceAccount = createServiceAccount;
- async function getServiceAccount(projectId, serviceAccountName) {
- const response = await apiClient.get(`/projects/${projectId}/serviceAccounts/${serviceAccountName}@${projectId}.iam.gserviceaccount.com`);
- return response.body;
- }
- exports.getServiceAccount = getServiceAccount;
- async function createServiceAccountKey(projectId, serviceAccountName) {
- const response = await apiClient.post(`/projects/${projectId}/serviceAccounts/${serviceAccountName}@${projectId}.iam.gserviceaccount.com/keys`, {
- keyAlgorithm: "KEY_ALG_UNSPECIFIED",
- privateKeyType: "TYPE_GOOGLE_CREDENTIALS_FILE",
- });
- return response.body;
- }
- exports.createServiceAccountKey = createServiceAccountKey;
- async function deleteServiceAccount(projectId, accountEmail) {
- await apiClient.delete(`/projects/${projectId}/serviceAccounts/${accountEmail}`, {
- resolveOnHTTPError: true,
- });
- }
- exports.deleteServiceAccount = deleteServiceAccount;
- async function getRole(role) {
- const response = await apiClient.get(`/roles/${role}`, {
- retryCodes: [500, 503],
- });
- return response.body;
- }
- exports.getRole = getRole;
- async function testResourceIamPermissions(origin, apiVersion, resourceName, permissions, quotaUser = "") {
- const localClient = new apiv2_1.Client({ urlPrefix: origin, apiVersion });
- if (process.env.FIREBASE_SKIP_INFORMATIONAL_IAM) {
- logger_1.logger.debug(`[iam] skipping informational check of permissions ${JSON.stringify(permissions)} on resource ${resourceName}`);
- return { allowed: Array.from(permissions).sort(), missing: [], passed: true };
- }
- const headers = {};
- if (quotaUser) {
- headers["x-goog-quota-user"] = quotaUser;
- }
- const response = await localClient.post(`/${resourceName}:testIamPermissions`, { permissions }, { headers });
- const allowed = new Set(response.body.permissions || []);
- const missing = new Set(permissions);
- for (const p of allowed) {
- missing.delete(p);
- }
- return {
- allowed: Array.from(allowed).sort(),
- missing: Array.from(missing).sort(),
- passed: missing.size === 0,
- };
- }
- exports.testResourceIamPermissions = testResourceIamPermissions;
- async function testIamPermissions(projectId, permissions) {
- return testResourceIamPermissions(api_1.resourceManagerOrigin, "v1", `projects/${projectId}`, permissions, `projects/${projectId}`);
- }
- exports.testIamPermissions = testIamPermissions;
|