2024-06-14 12:31:22 -04:00

88 lines
2.3 KiB
JavaScript

'use strict'
const { addPermission, removePermission } = require('./lib/permissions')
const {
updateConfiguration,
removeConfiguration,
findUserPoolByName,
} = require('./lib/user-pool')
const { getEnvironment, getLambdaArn, handlerWrapper } = require('../utils')
async function handler(event, context) {
if (event.RequestType === 'Create') {
return create(event, context)
} else if (event.RequestType === 'Update') {
return update(event, context)
} else if (event.RequestType === 'Delete') {
return remove(event, context)
}
throw new Error(`Unhandled RequestType ${event.RequestType}`)
}
async function create(event, context) {
const { FunctionName, UserPoolName, UserPoolConfigs } =
event.ResourceProperties
const { Partition, Region, AccountId } = getEnvironment(context)
const lambdaArn = getLambdaArn(Partition, Region, AccountId, FunctionName)
return findUserPoolByName({
userPoolName: UserPoolName,
region: Region,
}).then((userPool) =>
addPermission({
functionName: FunctionName,
userPoolName: UserPoolName,
partition: Partition,
region: Region,
accountId: AccountId,
userPoolId: userPool.Id,
}).then(() =>
updateConfiguration({
lambdaArn,
userPoolName: UserPoolName,
userPoolConfigs: UserPoolConfigs,
region: Region,
}),
),
)
}
async function update(event, context) {
const { Partition, Region, AccountId } = getEnvironment(context)
const { FunctionName, UserPoolName, UserPoolConfigs } =
event.ResourceProperties
const lambdaArn = getLambdaArn(Partition, Region, AccountId, FunctionName)
return updateConfiguration({
lambdaArn,
userPoolName: UserPoolName,
userPoolConfigs: UserPoolConfigs,
region: Region,
})
}
async function remove(event, context) {
const { Partition, Region, AccountId } = getEnvironment(context)
const { FunctionName, UserPoolName } = event.ResourceProperties
const lambdaArn = getLambdaArn(Partition, Region, AccountId, FunctionName)
return removePermission({
functionName: FunctionName,
userPoolName: UserPoolName,
region: Region,
}).then(() =>
removeConfiguration({
lambdaArn,
userPoolName: UserPoolName,
region: Region,
}),
)
}
module.exports = {
handler: handlerWrapper(handler, 'CustomResourceExistingCognitoUserPool'),
}