-
Notifications
You must be signed in to change notification settings - Fork 818
/
cognito-defaults.js
99 lines (87 loc) · 3.05 KB
/
cognito-defaults.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
const uuid = require('uuid');
const { booleanOptions, oAuthScopes } = require('./string-maps');
const [sharedId] = uuid().split('-');
const roles = {
authRoleArn: {
'Fn::GetAtt': ['AuthRole', 'Arn'],
},
unauthRoleArn: {
'Fn::GetAtt': ['UnauthRole', 'Arn'],
},
};
const generalDefaults = projectName => ({
sharedId,
resourceName: `${projectName}${sharedId}`,
resourceNameTruncated: `${projectName.substring(0, 6)}${sharedId}`,
authSelections: 'identityPoolAndUserPool',
...roles,
});
const userPoolDefaults = projectName => {
const projectNameTruncated = `${projectName.substring(0, 6)}${sharedId}`;
return {
resourceNameTruncated: `${projectName.substring(0, 6)}${sharedId}`,
userPoolName: `${projectName}_userpool_${sharedId}`,
autoVerifiedAttributes: ['email'],
mfaConfiguration: 'OFF',
mfaTypes: ['SMS Text Message'],
smsAuthenticationMessage: 'Your authentication code is {####}',
smsVerificationMessage: 'Your verification code is {####}',
emailVerificationSubject: 'Your verification code',
emailVerificationMessage: 'Your verification code is {####}',
defaultPasswordPolicy: false,
passwordPolicyMinLength: 8,
passwordPolicyCharacters: [],
requiredAttributes: ['email'],
userpoolClientGenerateSecret: false,
userpoolClientRefreshTokenValidity: 30,
userpoolClientWriteAttributes: ['email'],
userpoolClientReadAttributes: ['email'],
userpoolClientLambdaRole: `${projectNameTruncated}_userpoolclient_lambda_role`,
userpoolClientSetAttributes: false,
};
};
const withSocialDefaults = projectName => ({
hostedUI: true,
hostedUIDomainName: `${projectName.replace('_', '')}-${sharedId}`,
AllowedOAuthFlows: ['code'],
AllowedOAuthScopes: oAuthScopes.map(i => i.value),
});
const identityPoolDefaults = projectName => {
// eslint-disable-line
return {
identityPoolName: `${projectName}_identitypool_${sharedId}`,
allowUnauthenticatedIdentities: false,
};
};
const identityAndUserPoolDefaults = projectName => ({
// replace dashes with underscores for id pool regex constraint
...identityPoolDefaults(projectName),
...userPoolDefaults(projectName),
});
const functionMap = {
userPoolOnly: userPoolDefaults,
identityPoolAndUserPool: identityAndUserPoolDefaults,
identityPoolOnly: identityPoolDefaults,
};
const entityKeys = {
identityPoolKeys: Object.keys(identityPoolDefaults('')),
userPoolKeys: Object.keys(userPoolDefaults('')),
};
const getAllDefaults = name => {
const disallowedChars = /[^A-Za-z0-9_]+/g;
let projectName = name.projectConfig
? `${name.projectConfig.projectName.toLowerCase().substring(0, 100)}${sharedId}`
: name.substring(0, 100);
projectName = projectName.replace(disallowedChars, '_');
const target = generalDefaults(projectName);
const sources = [userPoolDefaults(projectName), identityAndUserPoolDefaults(projectName), withSocialDefaults(projectName)];
return Object.assign(target, ...sources);
};
module.exports = {
getAllDefaults,
functionMap,
generalDefaults,
withSocialDefaults,
entityKeys,
roles,
};