Skip to content

chore: map null passwordSettings to null passwordPolicy #5024

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 18 additions & 16 deletions packages/amplify_core/lib/src/config/auth/auth_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -91,22 +91,24 @@ class AuthConfig extends AmplifyPluginConfigMap {
}

final passwordSettings = plugin?.passwordProtectionSettings;
final requiredCharacters = passwordSettings?.passwordPolicyCharacters ?? [];
final passwordPolicy = PasswordPolicy(
minLength: passwordSettings?.passwordPolicyMinLength,
requireNumbers: requiredCharacters.contains(
PasswordPolicyCharacters.requiresNumbers,
),
requireLowercase: requiredCharacters.contains(
PasswordPolicyCharacters.requiresLowercase,
),
requireUppercase: requiredCharacters.contains(
PasswordPolicyCharacters.requiresUppercase,
),
requireSymbols: requiredCharacters.contains(
PasswordPolicyCharacters.requiresSymbols,
),
);
final passwordPolicy = switch (passwordSettings) {
null => null,
final PasswordProtectionSettings settings => PasswordPolicy(
minLength: settings.passwordPolicyMinLength,
requireNumbers: settings.passwordPolicyCharacters.contains(
PasswordPolicyCharacters.requiresNumbers,
),
requireLowercase: settings.passwordPolicyCharacters.contains(
PasswordPolicyCharacters.requiresLowercase,
),
requireUppercase: settings.passwordPolicyCharacters.contains(
PasswordPolicyCharacters.requiresUppercase,
),
requireSymbols: settings.passwordPolicyCharacters.contains(
PasswordPolicyCharacters.requiresSymbols,
),
)
};

final oAuthConfig = plugin?.oAuth;
final identityProviders =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,34 +55,49 @@ void main() {
expect(restUrls, ['fake-rest-url-1', 'fake-rest-url-2']);
});

test('maps config with all oauth options', () async {
final configJson = jsonDecode(oauthConfig) as Map<String, Object?>;
final amplifyConfig = AmplifyConfig.fromJson(configJson);
final mappedOutputs = amplifyConfig.toAmplifyOutputs();
final oauth = mappedOutputs.auth?.oauth as OAuthOutputs;
expect(oauth.redirectSignInUri, containsAll([signInUri1, signInUri2]));
expect(
oauth.redirectSignInUriQueryParameters,
{signInQueryParamKey: signInQueryParamValue},
);
expect(oauth.redirectSignOutUri, containsAll([signOutUri1, signOutUri2]));
expect(
oauth.redirectSignOutUriQueryParameters,
{signOutQueryParamKey: signOutQueryParamValue},
);
expect(oauth.tokenUri, tokenUri);
expect(
oauth.tokenUriQueryParameters,
{tokenQueryParamKey: tokenQueryParamValue},
);
expect(oauth.scopes, containsAll([scope1, scope2]));
});
group('auth', () {
test('maps config with all oauth options', () async {
final configJson = jsonDecode(oauthConfig) as Map<String, Object?>;
final amplifyConfig = AmplifyConfig.fromJson(configJson);
final mappedOutputs = amplifyConfig.toAmplifyOutputs();
final oauth = mappedOutputs.auth?.oauth as OAuthOutputs;
expect(oauth.redirectSignInUri, containsAll([signInUri1, signInUri2]));
expect(
oauth.redirectSignInUriQueryParameters,
{signInQueryParamKey: signInQueryParamValue},
);
expect(
oauth.redirectSignOutUri,
containsAll([signOutUri1, signOutUri2]),
);
expect(
oauth.redirectSignOutUriQueryParameters,
{signOutQueryParamKey: signOutQueryParamValue},
);
expect(oauth.tokenUri, tokenUri);
expect(
oauth.tokenUriQueryParameters,
{tokenQueryParamKey: tokenQueryParamValue},
);
expect(oauth.scopes, containsAll([scope1, scope2]));
});

test('maps config with app client secret', () async {
final configJson = jsonDecode(clientSecretConfig) as Map<String, Object?>;
final amplifyConfig = AmplifyConfig.fromJson(configJson);
final mappedOutputs = amplifyConfig.toAmplifyOutputs();
expect(mappedOutputs.auth?.appClientSecret, appClientSecret);
test('maps config with app client secret', () async {
final configJson =
jsonDecode(clientSecretConfig) as Map<String, Object?>;
final amplifyConfig = AmplifyConfig.fromJson(configJson);
final mappedOutputs = amplifyConfig.toAmplifyOutputs();
expect(mappedOutputs.auth?.appClientSecret, appClientSecret);
});

test('maps config with only the required options for a user pool',
() async {
final configJson =
jsonDecode(userPoolOnlyConfig) as Map<String, Object?>;
final amplifyConfig = AmplifyConfig.fromJson(configJson);
final mappedOutputs = amplifyConfig.toAmplifyOutputs();
expect(mappedOutputs.auth?.passwordPolicy, null);
});
});
});
}
Expand Down Expand Up @@ -204,6 +219,23 @@ const clientSecretConfig = '''{
}
}''';

/// hand written config with only the minimal required options for a user pool
const userPoolOnlyConfig = '''{
"auth": {
"plugins": {
"awsCognitoAuthPlugin": {
"CognitoUserPool": {
"Default": {
"PoolId": "us-east-fake-pool-id",
"AppClientId": "fake-client-id",
"Region": "us-east-1"
}
}
}
}
}
}''';

/// Updates the Gen 1 Config to work around known issues
///
/// Issues:
Expand Down
Loading