@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
93 lines (92 loc) • 3.9 kB
JavaScript
;
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;
};