Skip to content

Commit

Permalink
feat: replace hostedui provider lambda (#12478)
Browse files Browse the repository at this point in the history
* feat: create social providers with cfn when lambda callout does not exist

* feat: replace lambda code with deleting resources

* fix: change template write to check if prop exists

* fix: remove debugger from app code

* test: update snapshot to remove hosted ui provider dependency

* test: add unit tests for stack builder object and transformer class

* chore: refactoring code and fixing linting

* fix: add missing types file

* test: add test for migration method helpers

* fix: change names of methods to reflect lambda responsibility and wrap addDep in if statement

* chore: move creating nested stack params to auth category

* fix: change let to const

* fix: remove unused import

* chore: move generating nested stack code to provider package

* fix: refactor tests

* fix: add more error exception for not found to lambda

* chore: remove auth dep from cloudformation package

* Update packages/amplify-provider-awscloudformation/src/push-resources.ts

Co-authored-by: John Hockett <jhockett@users.noreply.github.com>

* fix: update comment and move return to separate line

---------

Co-authored-by: John Hockett <jhockett@users.noreply.github.com>
  • Loading branch information
danielleadams and jhockett authored May 3, 2023
1 parent 942a891 commit 17b0a83
Show file tree
Hide file tree
Showing 14 changed files with 899 additions and 355 deletions.
Original file line number Diff line number Diff line change
@@ -1,102 +1,36 @@
const response = require('cfn-response');
const aws = require('aws-sdk');

const identity = new aws.CognitoIdentityServiceProvider();
exports.handler = (event, context, callback) => {

exports.handler = (event, context) => {
try {
const userPoolId = event.ResourceProperties.userPoolId;
let hostedUIProviderMeta = JSON.parse(event.ResourceProperties.hostedUIProviderMeta);
let hostedUIProviderCreds = JSON.parse(event.ResourceProperties.hostedUIProviderCreds);
if (hostedUIProviderCreds.length === 0) {
response.send(event, context, response.SUCCESS, {});
}
if (event.RequestType == 'Delete') {
response.send(event, context, response.SUCCESS, {});
}
if (event.RequestType == 'Update' || event.RequestType == 'Create') {
let getRequestParams = (providerName) => {
let providerMetaIndex = hostedUIProviderMeta.findIndex((provider) => provider.ProviderName === providerName);
let providerMeta = hostedUIProviderMeta[providerMetaIndex];
let providerCredsIndex = hostedUIProviderCreds.findIndex((provider) => provider.ProviderName === providerName);
let providerCreds = hostedUIProviderCreds[providerCredsIndex];
let requestParams = {
ProviderName: providerMeta.ProviderName,
UserPoolId: userPoolId,
AttributeMapping: providerMeta.AttributeMapping,
};
if (providerMeta.ProviderName === 'SignInWithApple') {
if (providerCreds.client_id && providerCreds.team_id && providerCreds.key_id && providerCreds.private_key) {
requestParams.ProviderDetails = {
client_id: providerCreds.client_id,
team_id: providerCreds.team_id,
key_id: providerCreds.key_id,
private_key: providerCreds.private_key,
authorize_scopes: providerMeta.authorize_scopes,
};
} else {
requestParams = null;
}
} else {
if (providerCreds.client_id && providerCreds.client_secret) {
requestParams.ProviderDetails = {
client_id: providerCreds.client_id,
client_secret: providerCreds.client_secret,
authorize_scopes: providerMeta.authorize_scopes,
};
} else {
requestParams = null;
}
const hostedUIProviderMeta = JSON.parse(event.ResourceProperties.hostedUIProviderMeta);

const deleteIdentityProvider = (providerName) => {
const params = { ProviderName: providerName, UserPoolId: userPoolId };
return identity.deleteIdentityProvider(params).promise();
};

const providerPromises = [];

hostedUIProviderMeta.forEach(({ ProviderName }) => providerPromises.push(deleteIdentityProvider(ProviderName)));

Promise.all(providerPromises)
.then(() => {
response.send(event, context, response.SUCCESS);
})
.catch((err) => {
console.log(err.stack);

if (err.name === 'NotFoundException') {
response.send(event, context, response.SUCCESS);
return;
}
return requestParams;
};
let createIdentityProvider = (providerName) => {
let requestParams = getRequestParams(providerName);
if (!requestParams) {
return Promise.resolve();
}
requestParams.ProviderType = requestParams.ProviderName;
return identity.createIdentityProvider(requestParams).promise();
};
let updateIdentityProvider = (providerName) => {
let requestParams = getRequestParams(providerName);
if (!requestParams) {
return Promise.resolve();
}
return identity.updateIdentityProvider(requestParams).promise();
};
let deleteIdentityProvider = (providerName) => {
let params = { ProviderName: providerName, UserPoolId: userPoolId };
return identity.deleteIdentityProvider(params).promise();
};
let providerPromises = [];
identity
.listIdentityProviders({ UserPoolId: userPoolId, MaxResults: 60 })
.promise()
.then((result) => {
console.log(result);
let providerList = result.Providers.map((provider) => provider.ProviderName);
let providerListInParameters = hostedUIProviderMeta.map((provider) => provider.ProviderName);
hostedUIProviderMeta.forEach((providerMetadata) => {
if (providerList.indexOf(providerMetadata.ProviderName) > -1) {
providerPromises.push(updateIdentityProvider(providerMetadata.ProviderName));
} else {
providerPromises.push(createIdentityProvider(providerMetadata.ProviderName));
}
});
providerList.forEach((provider) => {
if (providerListInParameters.indexOf(provider) < 0) {
providerPromises.push(deleteIdentityProvider(provider));
}
});
return Promise.all(providerPromises);
})
.then(() => {
response.send(event, context, response.SUCCESS, {});
})
.catch((err) => {
console.log(err.stack);
response.send(event, context, response.FAILED, { err });
});
}

response.send(event, context, response.FAILED, { err });
});
} catch (err) {
console.log(err.stack);
response.send(event, context, response.FAILED, { err });
Expand Down
Loading

0 comments on commit 17b0a83

Please sign in to comment.