UNPKG

@csermet/multiprovider

Version:

cloud-graph provider plugin for AWS used to fetch AWS cloud data.

93 lines (92 loc) 3.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const services_1 = __importDefault(require("../../enums/services")); const generateArns_1 = require("../../utils/generateArns"); /** * Cloudfront */ exports.default = ({ service: cloudfront, data, }) => { const connections = []; const { summary: { Id: id, WebACLId }, config: { Origins: { Items: originData = [] }, }, } = cloudfront; if (!isEmpty_1.default(originData)) { originData.map(({ DomainName: domainName = '' }) => { const s3Match = domainName.match(/^(.*?)\.s3(?:.*)/); const elbMatch = domainName.match(/^(.*?)\.(?:.*?)\.elb.amazonaws.com/); if (s3Match) { /** * Find S3 Buckets * related to this Cloudfront distribution */ const bucketName = s3Match[1]; const s3Buckets = data.find(({ name }) => name === services_1.default.s3); if (s3Buckets?.data) { const allBuckets = Object.values(s3Buckets.data).flat(); const s3bucketsInRegion = allBuckets.filter(({ Name }) => Name === bucketName); if (!isEmpty_1.default(s3bucketsInRegion)) { for (const bucket of s3bucketsInRegion) { connections.push({ id: bucket.Id, resourceType: services_1.default.s3, relation: 'child', field: 's3', }); } } } } if (elbMatch) { /** * Find ELBs * related to this Cloudfront distribution */ const elbs = data.find(({ name }) => name === services_1.default.elb); if (elbs?.data) { const allElbs = Object.values(elbs.data).flat(); const elbsInRegion = allElbs.filter(({ LoadBalancerName }) => elbMatch[0].includes(LoadBalancerName)); if (!isEmpty_1.default(elbsInRegion)) { for (const elb of elbsInRegion) { const arn = generateArns_1.elbArn({ region: elb.region, account: elb.account, name: elb.LoadBalancerName, }); connections.push({ id: arn, resourceType: services_1.default.elb, relation: 'child', field: 'elb', }); } } } } }); } /** * Find wafV2WebAcls * related to this Cloudfront distribution */ const acls = data.find(({ name }) => name === services_1.default.wafV2WebAcl); if (acls?.data) { const allAcls = Object.values(acls.data).flat(); const dataInRegion = allAcls.filter(({ ARN }) => ARN === WebACLId); if (!isEmpty_1.default(dataInRegion)) { for (const acl of dataInRegion) { connections.push({ id: acl.Id, resourceType: services_1.default.wafV2WebAcl, relation: 'child', field: 'webAcl', }); } } } const cloudfrontResult = { [id]: connections, }; return cloudfrontResult; };