UNPKG

@smither/aws-user-pool-client-settings

Version:

aws-cdk custom resource to allow setting details for user pool client and integrations.

72 lines (61 loc) 2.73 kB
const AWS = require('aws-sdk'); exports.handler = async (event) => { console.info(event) try { var cognitoIdentityServiceProvider = new AWS.CognitoIdentityServiceProvider(); switch (event.RequestType) { case 'Create': await cognitoIdentityServiceProvider.createUserPoolDomain({ UserPoolId: event.ResourceProperties.UserPoolId, Domain: event.ResourceProperties.Domain }).promise(); break; case 'Update': await deleteUserPoolDomain(cognitoIdentityServiceProvider, event.OldResourceProperties.Domain); await cognitoIdentityServiceProvider.createUserPoolDomain({ UserPoolId: event.ResourceProperties.UserPoolId, Domain: event.ResourceProperties.Domain }).promise(); break; case 'Delete': await deleteUserPoolDomain(cognitoIdentityServiceProvider, event.ResourceProperties.Domain); break; } await sendCloudFormationResponse(event, 'SUCCESS'); console.info(`CognitoUserPoolDomain Success for request type ${event.RequestType}`); } catch (error) { console.error(`CognitoUserPoolDomain Error for request type ${event.RequestType}:`, error); await sendCloudFormationResponse(event, 'FAILED'); } } async function deleteUserPoolDomain(cognitoIdentityServiceProvider, domain) { var response = await cognitoIdentityServiceProvider.describeUserPoolDomain({ Domain: domain }).promise(); if (response.DomainDescription.domain) { await cognitoIdentityServiceProvider.deleteUserPoolDomain({ UserPoolId: response.DomainDescription.UserPoolId, Domain: domain }).promise(); } } async function sendCloudFormationResponse(event, responseStatus, responseData) { var params = { FunctionName: `${event.ResourceProperties.Domain}-CloudFormationSendResponse`, InvocationType: 'RequestResponse', Payload: JSON.stringify({ StackId: event.StackId, RequestId: event.RequestId, LogicalResourceId: event.LogicalResourceId, ResponseURL: event.ResponseURL, ResponseStatus: responseStatus, ResponseData: responseData }) }; var lambda = new AWS.Lambda(); var response = await lambda.invoke(params).promise(); if (response.FunctionError) { var responseError = JSON.parse(response.Payload); throw new Error(responseError.errorMessage); } }