Skip to content

Commit 7e3ca02

Browse files
author
Marco Franceschi
committed
feat: Added sesReceiptRuleSet service configurations
1 parent a1d550b commit 7e3ca02

5 files changed

Lines changed: 199 additions & 0 deletions

File tree

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import SES, {
2+
ListReceiptRuleSetsResponse,
3+
ReceiptRuleSetMetadata,
4+
ReceiptRule,
5+
} from 'aws-sdk/clients/ses'
6+
import { AWSError } from 'aws-sdk/lib/error'
7+
import { Config } from 'aws-sdk/lib/config'
8+
9+
import CloudGraph from '@cloudgraph/sdk'
10+
import groupBy from 'lodash/groupBy'
11+
12+
import awsLoggerText from '../../properties/logger'
13+
import { initTestEndpoint } from '../../utils'
14+
import AwsErrorLog from '../../utils/errorLog'
15+
16+
const lt = { ...awsLoggerText }
17+
const { logger } = CloudGraph
18+
const serviceName = 'SES Receipt Rule Set'
19+
const errorLog = new AwsErrorLog(serviceName)
20+
const endpoint = initTestEndpoint(serviceName)
21+
22+
/**
23+
* SES Receipt Rule Set
24+
*/
25+
26+
export interface RawAwsSesReceiptRuleSet {
27+
ReceiptRuleSet: ReceiptRuleSetMetadata
28+
Rules: ReceiptRule[]
29+
region: string
30+
}
31+
32+
33+
const getReceiptRuleSets = async (ses: SES): Promise<ReceiptRuleSetMetadata[]> =>
34+
new Promise(resolve => {
35+
try {
36+
ses.listReceiptRuleSets(
37+
(err: AWSError, data: ListReceiptRuleSetsResponse) => {
38+
if (err) {
39+
errorLog.generateAwsErrorLog({
40+
functionName: 'sesReceiptRuleSet:listReceiptRuleSets',
41+
err,
42+
})
43+
return resolve([])
44+
}
45+
const { RuleSets = [] } = data || {}
46+
resolve(RuleSets)
47+
}
48+
)
49+
} catch (error) {
50+
resolve([])
51+
}
52+
})
53+
54+
const getReceiptRules = async (ses: SES, ruleSets: ReceiptRuleSetMetadata[]): Promise<{ ruleSet: ReceiptRuleSetMetadata, rules: ReceiptRule[] }[]> => {
55+
const receiptRules: { ruleSet: ReceiptRuleSetMetadata, rules: ReceiptRule[] }[] = []
56+
for (const ruleSet of ruleSets) {
57+
try {
58+
const response = await ses.describeReceiptRuleSet({
59+
RuleSetName: ruleSet.Name,
60+
}).promise()
61+
const { Metadata, Rules = [] } = response
62+
63+
receiptRules.push({
64+
ruleSet: Metadata,
65+
rules: Rules
66+
})
67+
} catch (error) {
68+
errorLog.generateAwsErrorLog({
69+
functionName: 'sesReceiptRuleSet:describeReceiptRuleSet',
70+
err: error,
71+
})
72+
}
73+
}
74+
return receiptRules
75+
}
76+
77+
78+
export default async ({
79+
regions,
80+
config,
81+
}: {
82+
regions: string
83+
config: Config
84+
}): Promise<{ [property: string]: RawAwsSesReceiptRuleSet[] }> =>
85+
new Promise(async resolve => {
86+
const sesData: RawAwsSesReceiptRuleSet[] = []
87+
const regionPromises = []
88+
89+
regions.split(',').map(region => {
90+
const regionPromise = new Promise<void>(async resolveRegion => {
91+
const ses = new SES({ ...config, region, endpoint })
92+
93+
const ruleSets = await getReceiptRuleSets(ses)
94+
const receiptRuleSets = await getReceiptRules(ses, ruleSets)
95+
96+
for (const { ruleSet, rules } of receiptRuleSets) {
97+
sesData.push({
98+
ReceiptRuleSet: ruleSet,
99+
Rules: rules,
100+
region
101+
})
102+
}
103+
104+
resolveRegion()
105+
106+
107+
})
108+
regionPromises.push(regionPromise)
109+
})
110+
111+
112+
await Promise.all(regionPromises)
113+
errorLog.reset()
114+
115+
resolve(groupBy(sesData, 'region'))
116+
})
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { RawAwsSesReceiptRuleSet } from './data'
2+
import { AwsSesReceiptRuleSet } from '../../types/generated'
3+
import { generateUniqueId } from '@cloudgraph/sdk'
4+
5+
/**
6+
* SES Receipt Rule Set
7+
*/
8+
9+
export default ({
10+
service,
11+
account,
12+
region,
13+
}: {
14+
service: RawAwsSesReceiptRuleSet
15+
account: string
16+
region: string
17+
}): AwsSesReceiptRuleSet => {
18+
const {
19+
ReceiptRuleSet,
20+
Rules = []
21+
} = service
22+
23+
const rules = Rules.map(r => ({
24+
id: generateUniqueId({
25+
...r,
26+
account,
27+
region
28+
}),
29+
name: r.Name,
30+
enabled: r.Enabled,
31+
tlsPolicy: r.TlsPolicy,
32+
scanEnabled: r.ScanEnabled
33+
}))
34+
35+
return {
36+
id: generateUniqueId({
37+
...service,
38+
account,
39+
region
40+
}),
41+
accountId: account,
42+
region,
43+
name: ReceiptRuleSet?.Name,
44+
rules
45+
}
46+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Service } from '@cloudgraph/sdk'
2+
import BaseService from '../base'
3+
import format from './format'
4+
import getData from './data'
5+
import mutation from './mutation'
6+
7+
export default class SESReceiptRuleSet extends BaseService implements Service {
8+
format = format.bind(this)
9+
10+
getData = getData.bind(this)
11+
12+
mutation = mutation
13+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
export default `mutation($input: [AddawsSesReceiptRuleSetInput!]!) {
2+
addawsSesReceiptRuleSet(input: $input, upsert: true) {
3+
numUids
4+
}
5+
}`
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
type awsSesReceiptRuleSetRule
2+
@generate(
3+
query: { get: false, query: true, aggregate: false }
4+
mutation: { add: false, delete: false }
5+
subscription: false
6+
) {
7+
id: String! @id
8+
name: String @search(by: [hash, regexp])
9+
enabled: Boolean @search
10+
tlsPolicy: String @search(by: [hash, regexp])
11+
scanEnabled: Boolean @search
12+
}
13+
14+
15+
type awsSesReceiptRuleSet implements awsOptionalService @key(fields: "id") {
16+
accountId: String @search(by: [hash, regexp])
17+
name: String @search(by: [hash, regexp])
18+
rules: [awsSesReceiptRuleSetRule]
19+
}

0 commit comments

Comments
 (0)