UNPKG

@csermet/multiprovider

Version:

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

108 lines (107 loc) 4.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_1 = require("lodash"); const services_1 = __importDefault(require("../../enums/services")); const generateArns_1 = require("../../utils/generateArns"); const getLambdasArn = (lambdaConfig) => { if (lodash_1.isEmpty(lambdaConfig)) { return []; } const { PreSignUp, CustomMessage, PostConfirmation, PreAuthentication, PostAuthentication, DefineAuthChallenge, CreateAuthChallenge, VerifyAuthChallengeResponse, PreTokenGeneration, UserMigration, } = lambdaConfig; return [ PreSignUp, CustomMessage, PostConfirmation, PreAuthentication, PostAuthentication, DefineAuthChallenge, CreateAuthChallenge, VerifyAuthChallengeResponse, PreTokenGeneration, UserMigration, ]?.filter(l => l); }; /** * Cognito User Pool */ exports.default = ({ service: userPool, data, region, account, }) => { const connections = []; const { Id: id, LambdaConfig: lambdaConfig, EmailConfiguration: emailConfiguration, SmsConfiguration: smsConfiguration, } = userPool; /** * Find Lambda Functions * related to this cognito user pool */ const lambdasArn = getLambdasArn(lambdaConfig); const lambdas = data.find(({ name }) => name === services_1.default.lambda); if (lambdasArn?.length > 0 && lambdas?.data?.[region]) { const lambdasInRegion = lambdas.data[region].filter(({ FunctionArn }) => lambdasArn.includes(FunctionArn)); if (!lodash_1.isEmpty(lambdasInRegion)) { for (const lambda of lambdasInRegion) { connections.push({ id: lambda.FunctionArn, resourceType: services_1.default.lambda, relation: 'child', field: 'lambdas', }); } } } /** * Find MKS * related to this cognito user pool */ const kmsKeyID = lambdaConfig?.KMSKeyID; const kms = data.find(({ name }) => name === services_1.default.kms); if (kmsKeyID && kms?.data?.[region]) { const kmsInRegion = kms.data[region].find(({ KeyArn }) => kmsKeyID === KeyArn); if (kmsInRegion) { connections.push({ id: kmsInRegion.KeyId, resourceType: services_1.default.kms, relation: 'child', field: 'kms', }); } } /** * Find SES sender * related to this cognito user pool */ const emailConfigSourceArn = emailConfiguration?.SourceArn; const emails = data.find(({ name }) => name === services_1.default.ses); if (emailConfigSourceArn && emails?.data?.[region]) { const emailInRegion = emails.data[region].find(({ Identity }) => emailConfigSourceArn === generateArns_1.sesArn({ region, account, email: Identity })); if (emailInRegion) { connections.push({ id: generateArns_1.sesArn({ region, account, email: emailInRegion.Identity }), resourceType: services_1.default.ses, relation: 'child', field: 'ses', }); } } /** * Find SNS caller * related to this cognito user pool */ const smsConfigSnsCallerArn = smsConfiguration?.SnsCallerArn; const iamRoles = data.find(({ name }) => name === services_1.default.iamRole); if (smsConfigSnsCallerArn && iamRoles?.data?.[region]) { const iamRoleInRegion = iamRoles.data[region].find(({ Arn }) => smsConfigSnsCallerArn === Arn); if (iamRoleInRegion) { connections.push({ id: iamRoleInRegion.Arn, resourceType: services_1.default.iamRole, relation: 'child', field: 'iamRole', }); } } const userPoolResult = { [id]: connections, }; return userPoolResult; };