@@ -2,8 +2,21 @@ import { parseString } from '@fast-csv/parse'
22import CloudGraph , { generateUniqueId } from '@cloudgraph/sdk'
33import isArray from 'lodash/isArray'
44import toString from 'lodash/toString'
5- import { AwsRawTag , AwsIamJsonPolicy } from '../types/generated'
6- import { AwsTag , TagMap } from '../types'
5+ import {
6+ AwsRawTag ,
7+ AwsIamJsonPolicy ,
8+ AwsIamJsonPolicyCondition ,
9+ AwsIamJsonPolicyPrincipal ,
10+ AwsIamJsonPolicyStatement ,
11+ } from '../types/generated'
12+ import {
13+ AwsTag ,
14+ RawAwsIamJsonPolicy ,
15+ RawAwsIamJsonPolicyStatement ,
16+ RawAwsIamJsonPolicyStatementCondition ,
17+ RawAwsIamJsonPolicyStatementPrincipal ,
18+ TagMap ,
19+ } from '../types'
720
821const { logger } = CloudGraph
922
@@ -46,6 +59,7 @@ export const camelize = (key: string): string =>
4659 */
4760export const pascalize = ( key : string ) : string => {
4861 const camelized = camelize ( key )
62+ // TODO: Change to String.slice?
4963 return camelized . substr ( 0 , 1 ) . toUpperCase ( ) + camelized . substr ( 1 )
5064}
5165
@@ -65,7 +79,7 @@ export const parseCSV = (csv: string): Promise<any[]> =>
6579 } )
6680
6781export const formatIamJsonPolicy = ( json : string ) : AwsIamJsonPolicy => {
68- let object
82+ let object : RawAwsIamJsonPolicy
6983 try {
7084 object = JSON . parse ( json . replace ( / \\ " / g, '"' ) )
7185 } catch ( err ) {
@@ -75,7 +89,9 @@ export const formatIamJsonPolicy = (json: string): AwsIamJsonPolicy => {
7589 const statement = isArray ( object . Statement )
7690 ? object . Statement
7791 : [ object . Statement ]
78- const formatCondition = condition => {
92+ const formatCondition = (
93+ condition : RawAwsIamJsonPolicyStatementCondition
94+ ) : AwsIamJsonPolicyCondition [ ] => {
7995 if ( ! condition ) return null
8096 return Object . entries ( condition ) . map ( ( [ key , value = { } ] ) => {
8197 const entry = Object . entries ( value ) [ 0 ] || [ ]
@@ -88,7 +104,9 @@ export const formatIamJsonPolicy = (json: string): AwsIamJsonPolicy => {
88104 } )
89105 }
90106
91- const formatPrincipal = principal => {
107+ const formatPrincipal = (
108+ principal : RawAwsIamJsonPolicyStatementPrincipal
109+ ) : AwsIamJsonPolicyPrincipal [ ] => {
92110 if ( ! principal ) return null
93111 return Object . entries ( principal ) . map ( ( [ key , value ] ) => {
94112 const conVal = ( isArray ( value ) ? value : [ value ] ) || [ ]
@@ -102,12 +120,21 @@ export const formatIamJsonPolicy = (json: string): AwsIamJsonPolicy => {
102120 return {
103121 id : generateUniqueId ( json ) ,
104122 version : object . Version ,
105- statement : statement . map ( el => ( {
106- action : isArray ( el . Action ) ? el . Action : [ toString ( el . Action ) ] ,
107- condition : formatCondition ( el . Condition ) ,
108- effect : el . Effect ,
109- principal : formatPrincipal ( el . Principal ) ,
110- resource : isArray ( el . Resource ) ? el . Resource : [ toString ( el . Resource ) ] ,
111- } ) ) ,
123+ statement : statement . map (
124+ ( el : RawAwsIamJsonPolicyStatement ) : AwsIamJsonPolicyStatement => ( {
125+ action : isArray ( el . Action ) ? el . Action : [ toString ( el . Action ) ] ,
126+ notAction : isArray ( el . NotAction )
127+ ? el . NotAction
128+ : [ toString ( el . NotAction ) ] ,
129+ condition : formatCondition ( el . Condition ) ,
130+ effect : el . Effect ,
131+ principal : formatPrincipal ( el . Principal ) ,
132+ notPrincipal : formatPrincipal ( el . NotPrincipal ) ,
133+ resource : isArray ( el . Resource ) ? el . Resource : [ toString ( el . Resource ) ] ,
134+ notResource : isArray ( el . NotResource )
135+ ? el . NotResource
136+ : [ toString ( el . NotResource ) ] ,
137+ } )
138+ ) ,
112139 }
113140}
0 commit comments