aws-cfn-constructor
Version:
Constructor for AWS CloudFormation resources using AWS CDK
156 lines (155 loc) • 7.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserPool = void 0;
const aws_cdk_lib_1 = require("aws-cdk-lib");
// Util
const util_1 = require("../../utils/util");
const defaultSchema = { sub: true, name: true, given_name: true, family_name: true, middle_name: true, nickname: true, preferred_username: true, profile: true, picture: true, website: true, email: true, email_verified: true, gender: true, birthdate: true, zoneinfo: true, locale: true, phone_number: true, phone_number_verified: true, address: true, updated_at: true };
class UserPool {
/**
* Create the cognito user pool
* @description https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpool.html
* @param scope scope context
* @param config configuration for user pool
*/
constructor(scope, config) {
this._scope = scope;
// Extract the schema
const schema = [];
if (config.SchemaAttributes) {
for (const elem of config.SchemaAttributes) {
if ((!defaultSchema[elem.Name] || elem.Required) && elem.Name.length <= 20) {
schema.push({
attributeDataType: elem.AttributeDataType,
developerOnlyAttribute: elem.DeveloperOnlyAttribute,
mutable: elem.Mutable,
required: elem.Required,
name: elem.Name,
numberAttributeConstraints: elem.NumberAttributeConstraints !== undefined ? {
maxValue: elem.NumberAttributeConstraints.MaxValue,
minValue: elem.NumberAttributeConstraints.MinValue
} : undefined,
stringAttributeConstraints: elem.StringAttributeConstraints !== undefined ? {
maxLength: elem.StringAttributeConstraints.MaxLength,
minLength: elem.StringAttributeConstraints.MinLength
} : undefined
});
}
}
}
// Create the properties for cognito user pool
const props = {
accountRecoverySetting: config.AccountRecoverySetting !== undefined ? {
recoveryMechanisms: config.AccountRecoverySetting.RecoveryMechanisms.map((elem) => {
return { name: elem.Name, priority: elem.Priority };
})
} : undefined,
adminCreateUserConfig: config.AdminCreateUserConfig !== undefined ? {
allowAdminCreateUserOnly: config.AdminCreateUserConfig.AllowAdminCreateUserOnly,
inviteMessageTemplate: config.AdminCreateUserConfig.InviteMessageTemplate !== undefined ? {
emailMessage: config.AdminCreateUserConfig.InviteMessageTemplate.EmailMessage,
emailSubject: config.AdminCreateUserConfig.InviteMessageTemplate.EmailSubject,
smsMessage: config.AdminCreateUserConfig.InviteMessageTemplate.SMSMessage
} : undefined,
} : undefined,
aliasAttributes: config.AliasAttributes,
autoVerifiedAttributes: config.AutoVerifiedAttributes,
deviceConfiguration: config.DeviceConfiguration !== undefined ? {
challengeRequiredOnNewDevice: config.DeviceConfiguration.ChallengeRequiredOnNewDevice,
deviceOnlyRememberedOnUserPrompt: config.DeviceConfiguration.DeviceOnlyRememberedOnUserPrompt
} : undefined,
policies: config.Policies !== undefined ? {
passwordPolicy: {
minimumLength: config.Policies.PasswordPolicy.MinimumLength !== undefined ? Number(config.Policies.PasswordPolicy.MinimumLength) : undefined,
requireLowercase: config.Policies.PasswordPolicy.RequireLowercase,
requireNumbers: config.Policies.PasswordPolicy.RequireNumbers,
requireSymbols: config.Policies.PasswordPolicy.RequireSymbols,
requireUppercase: config.Policies.PasswordPolicy.RequireUppercase,
temporaryPasswordValidityDays: config.Policies.PasswordPolicy.TemporaryPasswordValidityDays !== undefined ? Number(config.Policies.PasswordPolicy.TemporaryPasswordValidityDays) : undefined
}
} : undefined,
schema: schema.length > 0 ? schema : undefined,
usernameAttributes: config.UsernameAttributes,
usernameConfiguration: config.UsernameConfiguration !== undefined ? {
caseSensitive: config.UsernameConfiguration.CaseSensitive
} : undefined,
userPoolName: config.Name,
verificationMessageTemplate: config.VerificationMessageTemplate !== undefined ? {
defaultEmailOption: config.VerificationMessageTemplate.DefaultEmailOption,
emailMessage: config.VerificationMessageTemplate.EmailMessage,
emailMessageByLink: config.VerificationMessageTemplate.EmailMessageByLink,
emailSubject: config.VerificationMessageTemplate.EmailSubject,
emailSubjectByLink: config.VerificationMessageTemplate.EmailSubjectByLink
} : undefined
};
// Create the user pool
this._userPool = new aws_cdk_lib_1.aws_cognito.CfnUserPool(this._scope, (0, util_1.createId)(JSON.stringify(props)), props);
}
/**
* Create a default domain
* @param domain domain
*/
createDefaultDomain(domain) {
// Extract a prefix domain
const split = domain.split(".");
const prefixDomain = split[0];
// Create a properties for user pool domain
const props = {
domain: prefixDomain,
userPoolId: this._userPool.ref
};
// Create a user pool default domain
new aws_cdk_lib_1.aws_cognito.CfnUserPoolDomain(this._scope, (0, util_1.createId)(JSON.stringify(props)), props);
}
/**
* Create a resource server for user pool
* @description https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cognito-userpoolresourceserver.html
* @param config configuration for resource server
*/
createResourceServer(config) {
// Create a properties for user pool resource server
const props = {
identifier: config.Identifier,
name: config.Name,
userPoolId: this._userPool.ref,
// Optional
scopes: config.Scopes !== undefined ? config.Scopes.map((elem) => {
return {
scopeDescription: elem.ScopeDescription,
scopeName: elem.ScopeName
};
}) : undefined
};
// Create a user pool resource server
new aws_cdk_lib_1.aws_cognito.CfnUserPoolResourceServer(this._scope, (0, util_1.createId)(JSON.stringify(props)), props);
}
/**
* Get an arn for user pool
* @returns arn for user pool
*/
getArn() {
return this._userPool.attrArn;
}
/**
* Get an id for user pool
* @returns id for user pool
*/
getId() {
return this._userPool.ref;
}
/**
* Get a provider name for user pool
* @returns provider name for user pool
*/
getProviderName() {
return this._userPool.attrProviderName;
}
/**
* Get a provider url for user pool
* @returns provider url for user pool
*/
getProviderUrl() {
return this._userPool.attrProviderUrl;
}
}
exports.UserPool = UserPool;