@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
124 lines (123 loc) • 4.65 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const sdk_1 = require("@cloudgraph/sdk");
const translations_1 = __importDefault(require("../../properties/translations"));
const format_1 = require("../../utils/format");
const generateArns_1 = require("../../utils/generateArns");
/**
* Security Group
*/
const all = '-1';
exports.default = ({ service: rawData, account, region, }) => {
const { Tags, GroupId: id, OwnerId: owner, GroupName: name, Description: description, VpcId: vpcId, } = rawData;
const arn = generateArns_1.securityGroupArn({ region, account, id });
const { ipPermissions: ingress, ipPermissionsEgress: egress } = sdk_1.toCamel(rawData);
const [obr, ibr] = [
{ data: egress, direction: translations_1.default.destination },
{ data: ingress, direction: translations_1.default.source },
].map(({ data, direction }) => data.map(rule => {
const protocol = rule.ipProtocol === all ? translations_1.default.all : rule.ipProtocol;
const [toPort, fromPort] = [rule.toPort, rule.fromPort];
let portRange = '';
if ((!fromPort && !toPort) || (toPort === -1 && fromPort === -1)) {
portRange = translations_1.default.all;
}
else if (fromPort === toPort) {
portRange = fromPort.toString();
}
else {
portRange = `${fromPort} - ${toPort}`;
}
const allRules = [];
(rule.ipRanges || []).map(({ cidrIp, description: ipRangesDescription = '' }, index) => {
allRules.push({
id: sdk_1.generateUniqueId({
arn,
protocol,
portRange,
cidrIp,
ipRangesDescription,
ipRanges: `ipRanges_${index}`,
}),
[direction]: cidrIp,
description: ipRangesDescription,
});
});
(rule.ipv6Ranges || []).map(({ cidrIpv6, description: ipv6RangesDescription = '' }, index) => {
allRules.push({
id: sdk_1.generateUniqueId({
arn,
protocol,
portRange,
cidrIpv6,
ipv6RangesDescription,
ipv6Ranges: `ipv6Ranges_${index}`,
}),
[direction]: cidrIpv6,
description: ipv6RangesDescription,
});
});
(rule.prefixListIds || []).map(({ prefixListId, description: prefixListIdsDescription = '' }, index) => {
allRules.push({
id: sdk_1.generateUniqueId({
arn,
protocol,
portRange,
prefixListId,
prefixListIdsDescription,
prefixListIds: `prefixListIds_${index}`,
}),
[direction]: prefixListId,
description: prefixListIdsDescription,
});
});
(rule.userIdGroupPairs || []).map(({ groupId, userId = '', groupName = '', peeringStatus = '', description: descriptionUserIdGroupPairs = '', }, index) => {
allRules.push({
id: sdk_1.generateUniqueId({
arn,
protocol,
portRange,
groupId,
descriptionUserIdGroupPairs,
groupName,
peeringStatus,
userId,
userIdGroupPairs: `userIdGroupPairs_${index}`,
}),
[direction]: groupId,
description: descriptionUserIdGroupPairs,
groupName,
peeringStatus,
userId,
});
});
return allRules.flatMap(allRulesRule => ({
protocol,
portRange,
toPort,
fromPort,
...allRulesRule,
}));
}));
const inboundRules = ibr.flat();
const outboundRules = obr.flat();
return {
id,
name,
vpcId,
accountId: account,
arn,
region,
description,
tags: format_1.formatTagsFromMap(Tags),
owner,
default: name === translations_1.default.default,
inboundRules,
outboundRules,
inboundRuleCount: inboundRules.length,
outboundRuleCount: outboundRules.length,
};
};