@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
215 lines (214 loc) • 10 kB
JavaScript
"use strict";
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 isEmpty_1 = __importDefault(require("lodash/isEmpty"));
const translations_1 = __importDefault(require("../../properties/translations"));
const format_1 = require("../../utils/format");
const generateArns_1 = require("../../utils/generateArns");
const data_1 = require("./data");
/**
* S3
*/
exports.default = ({ service: rawData, account, region, }) => {
const { Id: id, Name: name, Contents: bucketContents = [], Tags: tags = {}, AccountLevelBlockPublicAcls: accountLevelBlockPublicAcls, AccountLevelIgnorePublicAcls: accountLevelIgnorePublicAcls, AccountLevelBlockPublicPolicy: accountLevelBlockPublicPolicy, AccountLevelRestrictPublicBuckets: accountLevelRestrictPublicBuckets, AdditionalInfo: { AccelerationConfig: accelerationStatus, BucketOwnerData: { DisplayName: bucketOwnerName }, CorsInfo: corsInfo, EncryptionInfo: encryptionInfo, Grants: grants, LifecycleConfig: lifecycleConfig, LoggingInfo: loggingInfo, Policy: policy, PolicyStatus: policyStatus, PublicAccessBlockConfig: publicAccessBlockConfig, ReplicationConfig: replicationConfig, ReqPaymentConfig: reqPaymentConfig, StaticWebsiteInfo: staticWebsiteInfo, VersioningInfo: versioningInfo, NotificationConfiguration: notificationConfiguration, } = {
AccelerationConfig: '',
BucketOwnerData: { DisplayName: '' },
CorsInfo: [],
EncryptionInfo: {},
Grants: [],
LifecycleConfig: [],
LoggingInfo: {},
Policy: '',
PolicyStatus: {},
PublicAccessBlockConfig: {},
ReplicationConfig: {},
ReqPaymentConfig: '',
StaticWebsiteInfo: {},
VersioningInfo: {},
NotificationConfiguration: {},
}, } = rawData;
const arn = generateArns_1.s3BucketArn({ name });
let size = '0 Kb';
const total = bucketContents.length;
const greaterThanTotalLimit = total === data_1.awsBucketItemsLimit;
if (!isEmpty_1.default(bucketContents)) {
size = `${Math.round(bucketContents.reduce((a, b) => a + b.Size, 0) * 0.001)} ${translations_1.default.kb} ${greaterThanTotalLimit ? translations_1.default.bucketSizeDisclaimer(data_1.awsBucketItemsLimit) : ''}`;
}
let publicAccessBlockData = {
blockPublicAcls: translations_1.default.no,
ignorePublicAcls: translations_1.default.no,
blockPublicPolicy: translations_1.default.no,
restrictPublicBuckets: translations_1.default.no,
};
if (!isEmpty_1.default(publicAccessBlockConfig)) {
const { BlockPublicAcls, IgnorePublicAcls, BlockPublicPolicy, RestrictPublicBuckets, } = publicAccessBlockConfig;
publicAccessBlockData = {
blockPublicAcls: BlockPublicAcls ? translations_1.default.yes : translations_1.default.no,
ignorePublicAcls: IgnorePublicAcls ? translations_1.default.yes : translations_1.default.no,
blockPublicPolicy: BlockPublicPolicy ? translations_1.default.yes : translations_1.default.no,
restrictPublicBuckets: RestrictPublicBuckets ? translations_1.default.yes : translations_1.default.no,
};
}
let versioningAdditions = {
mfa: translations_1.default.disabled,
versioning: translations_1.default.disabled,
};
if (!isEmpty_1.default(versioningInfo)) {
const { Status = translations_1.default.disabled, MFADelete = translations_1.default.disabled, } = versioningInfo;
versioningAdditions = {
mfa: MFADelete,
versioning: Status,
};
}
const websiteAdditions = { staticWebsiteHosting: translations_1.default.disabled };
if (!isEmpty_1.default(staticWebsiteInfo)) {
websiteAdditions.staticWebsiteHosting = translations_1.default.enabled;
}
const loggingAdditions = { logging: translations_1.default.disabled };
if (!isEmpty_1.default(loggingInfo)) {
loggingAdditions.logging = translations_1.default.enabled;
}
const corsAdditions = { corsConfiguration: translations_1.default.no };
if (!isEmpty_1.default(corsInfo)) {
corsAdditions.corsConfiguration = translations_1.default.yes;
}
const encryptionAdditions = { encrypted: translations_1.default.no, encryptionRules: [] };
if (!isEmpty_1.default(encryptionInfo)) {
const { Rules } = encryptionInfo;
encryptionAdditions.encrypted = translations_1.default.yes;
encryptionAdditions.encryptionRules = Rules.map(r => ({
id: sdk_1.generateUniqueId({
arn,
...r,
}),
sseAlgorithm: r.ApplyServerSideEncryptionByDefault?.SSEAlgorithm,
kmsMasterKeyID: r.ApplyServerSideEncryptionByDefault?.KMSMasterKeyID,
}));
}
const replicationAdditions = { crossRegionReplication: translations_1.default.disabled };
if (!isEmpty_1.default(replicationConfig)) {
replicationAdditions.crossRegionReplication = translations_1.default.enabled;
}
const lifecycleAdditions = { lifecycle: translations_1.default.disabled };
if (!isEmpty_1.default(lifecycleConfig)) {
lifecycleAdditions.lifecycle = translations_1.default.enabled;
}
let access = translations_1.default.objectsCanBePublic;
if (!isEmpty_1.default(policyStatus)) {
const { IsPublic } = policyStatus;
access = IsPublic ? translations_1.default.public : translations_1.default.private;
}
else if (!isEmpty_1.default(grants)) {
grants.map(({ Grantee }) => {
if (Grantee?.URI === data_1.publicBucketGrant) {
access = translations_1.default.public;
}
});
}
let notificationConfigurationData = {
topicConfigurations: [],
queueConfigurations: [],
lambdaFunctionConfigurations: [],
};
if (!isEmpty_1.default(notificationConfiguration)) {
const { TopicConfigurations: topicConfigurations = [], QueueConfigurations: queueConfigurations = [], LambdaFunctionConfigurations: lambdaFunctionConfigurations = [], } = notificationConfiguration;
notificationConfigurationData = {
topicConfigurations: topicConfigurations?.map(tc => ({
id: tc.Id ||
sdk_1.generateUniqueId({
arn,
...tc,
}),
topicArn: tc.TopicArn,
events: tc.Events || [],
filterRules: tc.Filter?.Key?.FilterRules?.map(r => ({
id: sdk_1.generateUniqueId({
arn,
...r,
}),
name: r.Name,
value: r.Value,
})) || [],
})) || [],
queueConfigurations: queueConfigurations?.map(qc => ({
id: qc.Id ||
sdk_1.generateUniqueId({
arn,
...qc,
}),
queueArn: qc.QueueArn,
events: qc.Events || [],
filterRules: qc.Filter?.Key?.FilterRules?.map(r => ({
id: sdk_1.generateUniqueId({
arn,
...r,
}),
name: r.Name,
value: r.Value,
})) || [],
})) || [],
lambdaFunctionConfigurations: lambdaFunctionConfigurations?.map(lc => ({
id: lc.Id ||
sdk_1.generateUniqueId({
arn,
...lc,
}),
lambdaFunctionArn: lc.LambdaFunctionArn,
events: lc.Events || [],
filterRules: lc.Filter?.Key?.FilterRules?.map(r => ({
id: sdk_1.generateUniqueId({
arn,
...lc,
}),
name: r.Name,
value: r.Value,
})) || [],
})) || [],
};
}
// // Format S3 Tags
const s3Tags = format_1.formatTagsFromMap(tags);
const s3 = {
...corsAdditions,
...encryptionAdditions,
...lifecycleAdditions,
...loggingAdditions,
...publicAccessBlockData,
...replicationAdditions,
...versioningAdditions,
...websiteAdditions,
id,
access,
accountId: account,
arn: generateArns_1.s3BucketArn({ name }),
bucketOwnerName,
policy: format_1.formatIamJsonPolicy(policy),
rawPolicy: policy,
region,
requesterPays: reqPaymentConfig === 'Requester' ? translations_1.default.enabled : translations_1.default.disabled,
size,
tags: s3Tags,
accountLevelBlockPublicAcls: accountLevelBlockPublicAcls ? translations_1.default.yes : translations_1.default.no,
accountLevelIgnorePublicAcls: accountLevelIgnorePublicAcls ? translations_1.default.yes : translations_1.default.no,
accountLevelBlockPublicPolicy: accountLevelBlockPublicPolicy ? translations_1.default.yes : translations_1.default.no,
accountLevelRestrictPublicBuckets: accountLevelRestrictPublicBuckets ? translations_1.default.yes : translations_1.default.no,
totalNumberOfObjectsInBucket: greaterThanTotalLimit
? `${data_1.awsBucketItemsLimit}+`
: `${total}`,
transferAcceleration: accelerationStatus,
notificationConfiguration: notificationConfigurationData,
aclGrants: grants?.map(g => ({
id: sdk_1.generateUniqueId({
arn,
...g,
}),
granteeType: g.Grantee?.Type,
granteeUri: g.Grantee?.URI,
permission: g.Permission,
})) || [],
};
return s3;
};