diff --git a/packages/amplify_core/lib/src/amplify_class.dart b/packages/amplify_core/lib/src/amplify_class.dart index f2ad8a3fdc..b9dd470187 100644 --- a/packages/amplify_core/lib/src/amplify_class.dart +++ b/packages/amplify_core/lib/src/amplify_class.dart @@ -62,7 +62,7 @@ abstract class AmplifyClass { final AmplifyAuthProviderRepository authProviderRepo = AmplifyAuthProviderRepository(); - var _configCompleter = Completer(); + var _configCompleter = Completer(); final _addPluginFutures = >[]; /// Adds one plugin at a time. Note: this method can only @@ -93,7 +93,7 @@ abstract class AmplifyClass { /// A future when completes when Amplify has been successfully configured. @internal - Future get asyncConfig => _configCompleter.future; + Future get asyncConfig => _configCompleter.future; /// Configures Amplify with the provided configuration string. /// **This method can only be called once**, after all the plugins @@ -128,7 +128,7 @@ abstract class AmplifyClass { ); } await _configurePlugins(amplifyConfig); - _configCompleter.complete(amplifyConfig); + _configCompleter.complete(amplifyConfig.toAmplifyOutputs()); } on ConfigurationError catch (e, st) { // Complete with the configuration error and reset the completer so // that 1) `configure` can be called again and 2) listeners registered @@ -146,7 +146,7 @@ abstract class AmplifyClass { // handled by the developer, but since they are unrelated to // configuration, listeners to `Amplify.asyncConfig` should be allowed to // proceed with the validated configuration. - _configCompleter.complete(amplifyConfig); + _configCompleter.complete(amplifyConfig.toAmplifyOutputs()); _configCompleter = Completer(); rethrow; } diff --git a/packages/auth/amplify_auth_cognito/example/integration_test/sign_out_test.dart b/packages/auth/amplify_auth_cognito/example/integration_test/sign_out_test.dart index dfab6c6f43..81053ace8e 100644 --- a/packages/auth/amplify_auth_cognito/example/integration_test/sign_out_test.dart +++ b/packages/auth/amplify_auth_cognito/example/integration_test/sign_out_test.dart @@ -51,11 +51,11 @@ void main() { // ignore: invalid_use_of_internal_member final config = await Amplify.asyncConfig; - final authConfig = config.auth!.awsPlugin!.cognitoUserPool!.default$!; + final authConfig = config.auth!; client = AWSHttpClient() ..supportedProtocols = SupportedProtocols.http1; cognitoClient = cognito_idp.CognitoIdentityProviderClient( - region: authConfig.region, + region: authConfig.awsRegion, ); addTearDown(client.close); diff --git a/packages/auth/amplify_auth_cognito_dart/example/web/components/app_component.dart b/packages/auth/amplify_auth_cognito_dart/example/web/components/app_component.dart index 695ef32d79..90fe967c2d 100644 --- a/packages/auth/amplify_auth_cognito_dart/example/web/components/app_component.dart +++ b/packages/auth/amplify_auth_cognito_dart/example/web/components/app_component.dart @@ -54,7 +54,7 @@ class AppState { /// main app component class AppComponent extends StatefulComponent { AppState appState = AppState(); - late AmplifyConfig config; + late AmplifyOutputs config; String? _error; @@ -189,7 +189,7 @@ class AppComponent extends StatefulComponent { ); }, ), - if (config.auth!.awsPlugin!.auth!.default$!.oAuth != null) + if (config.auth!.oauth != null) ButtonComponent( id: 'hostedUiLogin', innerHtml: 'Login with Hosted UI', diff --git a/packages/authenticator/amplify_authenticator/lib/amplify_authenticator.dart b/packages/authenticator/amplify_authenticator/lib/amplify_authenticator.dart index ea281bf7a5..718aeb64fb 100644 --- a/packages/authenticator/amplify_authenticator/lib/amplify_authenticator.dart +++ b/packages/authenticator/amplify_authenticator/lib/amplify_authenticator.dart @@ -32,6 +32,7 @@ import 'package:amplify_authenticator/src/utils/dial_code.dart'; import 'package:amplify_authenticator/src/utils/dial_code_options.dart'; import 'package:amplify_authenticator/src/widgets/authenticator_banner.dart'; import 'package:amplify_authenticator/src/widgets/form.dart'; +import 'package:amplify_core/amplify_core.dart' as core; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -510,7 +511,7 @@ class _AuthenticatorState extends State { late final StreamSubscription _infoSub; late final StreamSubscription _successSub; - AmplifyConfig? _config; + AmplifyOutputs? _config; late List _missingConfigValues; bool _configInitialized = false; @@ -643,19 +644,19 @@ class _AuthenticatorState extends State { }); } - List missingConfigValues(AmplifyConfig? config) { + List missingConfigValues(core.AmplifyOutputs? config) { final missingValues = []; - final cognitoPlugin = config?.auth?.awsPlugin?.auth?.default$; + final cognitoPlugin = config?.auth; if (cognitoPlugin == null) { return const ['auth.plugins.Auth.Default']; } if (cognitoPlugin.usernameAttributes == null) { missingValues.add('usernameAttributes'); } - if (cognitoPlugin.signupAttributes == null) { + if (cognitoPlugin.standardRequiredAttributes == null) { missingValues.add('signupAttributes'); } - if (cognitoPlugin.passwordProtectionSettings == null) { + if (cognitoPlugin.passwordPolicy == null) { missingValues.add('passwordProtectionSettings'); } return missingValues; @@ -689,7 +690,7 @@ class _AuthenticatorState extends State { key: keyInheritedAuthBloc, authBloc: _stateMachineBloc, child: InheritedConfig( - amplifyConfig: _config, + amplifyOutputs: _config, padding: widget.padding, child: InheritedAuthenticatorState( key: keyInheritedAuthenticatorState, diff --git a/packages/authenticator/amplify_authenticator/lib/src/mixins/authenticator_username_field.dart b/packages/authenticator/amplify_authenticator/lib/src/mixins/authenticator_username_field.dart index 620bbad5a6..b8187ed981 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/mixins/authenticator_username_field.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/mixins/authenticator_username_field.dart @@ -259,7 +259,7 @@ mixin AuthenticatorUsernameField on AuthenticatorComponentState { late final Set usernameAttributes = () { - final authConfig = config.amplifyConfig?.auth?.awsPlugin?.auth?.default$; + final authConfig = config.amplifyOutputs?.auth; return {...?authConfig?.usernameAttributes}; }(); diff --git a/packages/authenticator/amplify_authenticator/lib/src/services/amplify_auth_service.dart b/packages/authenticator/amplify_authenticator/lib/src/services/amplify_auth_service.dart index 333d33a512..f28b4828b8 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/services/amplify_auth_service.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/services/amplify_auth_service.dart @@ -68,7 +68,7 @@ abstract class AuthService { required CognitoUserAttributeKey userAttributeKey, required String confirmationCode, }); - Future waitForConfiguration(); + Future waitForConfiguration(); Future rememberDevice(); @@ -324,7 +324,7 @@ class AmplifyAuthService } @override - Future waitForConfiguration() async { + Future waitForConfiguration() async { final timer = Timer.periodic(const Duration(seconds: 10), (timer) { logger.warn( 'Amplify is taking longer than expected to configure.' diff --git a/packages/authenticator/amplify_authenticator/lib/src/state/inherited_config.dart b/packages/authenticator/amplify_authenticator/lib/src/state/inherited_config.dart index e1e7b5db27..e29c5129b2 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/state/inherited_config.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/state/inherited_config.dart @@ -8,12 +8,12 @@ import 'package:flutter/material.dart'; class InheritedConfig extends InheritedWidget { const InheritedConfig({ super.key, - required this.amplifyConfig, + required this.amplifyOutputs, required this.padding, required super.child, }); - final AmplifyConfig? amplifyConfig; + final AmplifyOutputs? amplifyOutputs; final EdgeInsets padding; static InheritedConfig of(BuildContext context) { @@ -37,9 +37,9 @@ class InheritedConfig extends InheritedWidget { @override bool updateShouldNotify(InheritedConfig oldWidget) { - final updatedConfig = oldWidget.amplifyConfig != amplifyConfig; + final updatedConfig = oldWidget.amplifyOutputs != amplifyOutputs; if (updatedConfig) { - if (oldWidget.amplifyConfig == null) { + if (oldWidget.amplifyOutputs == null) { return true; } throw FlutterError.fromParts([ @@ -58,7 +58,7 @@ class InheritedConfig extends InheritedWidget { void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); properties - ..add(DiagnosticsProperty('config', amplifyConfig)) + ..add(DiagnosticsProperty('config', amplifyOutputs)) ..add(DiagnosticsProperty('padding', padding)); } } diff --git a/packages/authenticator/amplify_authenticator/lib/src/utils/validators.dart b/packages/authenticator/amplify_authenticator/lib/src/utils/validators.dart index 942742cbaf..bf16e254f8 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/utils/validators.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/utils/validators.dart @@ -2,6 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 import 'package:amplify_authenticator/amplify_authenticator.dart'; +import 'package:amplify_core/amplify_core.dart'; +// ignore: implementation_imports +import 'package:amplify_core/src/config/amplify_outputs/auth/password_policy.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:flutter/material.dart'; @@ -73,11 +76,10 @@ extension PasswordPolicyCharactersX on PasswordPolicyCharacters { } FormFieldValidator Function(BuildContext) validateNewPassword({ - required AmplifyConfig? amplifyConfig, + required AmplifyOutputs? amplifyOutputs, required InputResolver inputResolver, }) { - final passwordProtectionSettings = amplifyConfig - ?.auth?.awsPlugin?.auth?.default$?.passwordProtectionSettings; + final passwordPolicies = amplifyOutputs?.auth?.passwordPolicy; return (BuildContext context) => (String? password) { if (password == null || password.isEmpty) { return inputResolver.resolve( @@ -86,23 +88,15 @@ FormFieldValidator Function(BuildContext) validateNewPassword({ ); } password = password.trim(); - if (passwordProtectionSettings == null) { + if (passwordPolicies == null) { return null; } - final unmetReqs = []; - - final minLength = passwordProtectionSettings.passwordPolicyMinLength; + final minLength = passwordPolicies.minLength; final meetsMinLengthRequirement = minLength == null || password.length >= minLength; - final passwordPolicies = - passwordProtectionSettings.passwordPolicyCharacters; - for (final policy in passwordPolicies) { - if (!policy.meetsRequirement(password)) { - unmetReqs.add(policy); - } - } + final unmetReqs = _getUnmetPasswordPolicies(password, passwordPolicies); final error = inputResolver.resolve( context, @@ -118,6 +112,26 @@ FormFieldValidator Function(BuildContext) validateNewPassword({ }; } +List _getUnmetPasswordPolicies( + String password, + PasswordPolicy? policy, +) { + final unmetReqs = []; + if ((policy?.requireLowercase ?? false) && !password.contains(_lowercase)) { + unmetReqs.add(PasswordPolicyCharacters.requiresLowercase); + } + if ((policy?.requireUppercase ?? false) && !password.contains(_uppercase)) { + unmetReqs.add(PasswordPolicyCharacters.requiresUppercase); + } + if ((policy?.requireNumbers ?? false) && !password.contains(_numeric)) { + unmetReqs.add(PasswordPolicyCharacters.requiresNumbers); + } + if ((policy?.requireSymbols ?? false) && !password.contains(_symbols)) { + unmetReqs.add(PasswordPolicyCharacters.requiresSymbols); + } + return unmetReqs; +} + FormFieldValidator validatePasswordConfirmation( String Function() getPassword, { required BuildContext context, diff --git a/packages/authenticator/amplify_authenticator/lib/src/widgets/component.dart b/packages/authenticator/amplify_authenticator/lib/src/widgets/component.dart index 54f22f0e42..46d27c3caf 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/widgets/component.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/widgets/component.dart @@ -82,7 +82,7 @@ abstract class AuthenticatorComponentState ), ) ..add( - DiagnosticsProperty('config', config.amplifyConfig), + DiagnosticsProperty('config', config.amplifyOutputs), ); } } diff --git a/packages/authenticator/amplify_authenticator/lib/src/widgets/form.dart b/packages/authenticator/amplify_authenticator/lib/src/widgets/form.dart index 6d9acb32a0..301b61177c 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/widgets/form.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/widgets/form.dart @@ -13,6 +13,10 @@ import 'package:amplify_authenticator/src/widgets/button.dart'; import 'package:amplify_authenticator/src/widgets/component.dart'; import 'package:amplify_authenticator/src/widgets/form_field.dart'; import 'package:amplify_authenticator/src/widgets/social/social_button.dart'; +// ignore: implementation_imports +import 'package:amplify_core/src/config/amplify_outputs/auth/identity_provider.dart'; +// ignore: implementation_imports +import 'package:amplify_core/src/config/amplify_outputs/auth/mfa.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -303,15 +307,10 @@ class _SignUpFormState extends AuthenticatorFormState { @override List runtimeFields(BuildContext context) { - final authConfig = InheritedConfig.of(context) - .amplifyConfig - ?.auth - ?.awsPlugin - ?.auth - ?.default$; + final authConfig = InheritedConfig.of(context).amplifyOutputs?.auth; final runtimeAttributes = { - ...?authConfig?.signupAttributes, - ...?authConfig?.verificationMechanisms, + ...?authConfig?.standardRequiredAttributes, + ...?authConfig?.userVerificationTypes, }; if (runtimeAttributes.isEmpty) { return const []; @@ -362,17 +361,17 @@ class _SignUpFormState extends AuthenticatorFormState { .whereType() .toList(); - final hasSmsMfa = authConfig?.mfaTypes?.contains(MfaType.sms) ?? false; + final hasSmsMfa = authConfig?.mfaMethods?.contains(MfaMethod.sms) ?? false; if (hasSmsMfa && selectedUsernameType != UsernameType.phoneNumber) { final mfaConfiguration = - authConfig?.mfaConfiguration ?? MfaConfiguration.off; + authConfig?.mfaConfiguration ?? MfaEnforcement.off; final hasSmsField = runtimeFields.any( (f) => f.field == SignUpField.phoneNumber, ); - if (!hasSmsField && mfaConfiguration != MfaConfiguration.off) { + if (!hasSmsField && mfaConfiguration != MfaEnforcement.off) { runtimeFields.add( SignUpFormField.phoneNumber( - required: mfaConfiguration == MfaConfiguration.on, + required: mfaConfiguration == MfaEnforcement.on, ), ); } @@ -436,21 +435,20 @@ class _SignInFormState extends AuthenticatorFormState { } final socialProviders = InheritedConfig.of(context) - .amplifyConfig + .amplifyOutputs ?.auth - ?.awsPlugin - ?.auth - ?.default$ - ?.socialProviders; + ?.oauth + ?.identityProviders; + if (socialProviders == null || socialProviders.isEmpty) { return const []; } // Sort Apple first based off their app guidelines. socialProviders.sort((a, b) { - if (a == SocialProvider.apple) { + if (a == IdentityProvider.apple) { return -1; - } else if (b == SocialProvider.apple) { + } else if (b == IdentityProvider.apple) { return 1; } return a.name.compareTo(b.name); @@ -460,13 +458,13 @@ class _SignInFormState extends AuthenticatorFormState { SocialSignInButtons( providers: socialProviders.map((e) { switch (e) { - case SocialProvider.facebook: + case IdentityProvider.facebook: return AuthProvider.facebook; - case SocialProvider.google: + case IdentityProvider.google: return AuthProvider.google; - case SocialProvider.amazon: + case IdentityProvider.amazon: return AuthProvider.amazon; - case SocialProvider.apple: + case IdentityProvider.apple: return AuthProvider.apple; } }).toList(), diff --git a/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/confirm_sign_in_form_field.dart b/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/confirm_sign_in_form_field.dart index 409faffa3f..d4b39d1d22 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/confirm_sign_in_form_field.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/confirm_sign_in_form_field.dart @@ -668,7 +668,7 @@ class _ConfirmSignInTextFieldState extends _ConfirmSignInFormFieldState ); case ConfirmSignInField.newPassword: return validateNewPassword( - amplifyConfig: config.amplifyConfig, + amplifyOutputs: config.amplifyOutputs, inputResolver: stringResolver.inputs, )(context); case ConfirmSignInField.confirmNewPassword: diff --git a/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/reset_password_form_field.dart b/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/reset_password_form_field.dart index 01d0dd854e..ffce3d19c8 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/reset_password_form_field.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/reset_password_form_field.dart @@ -140,7 +140,7 @@ class _ResetPasswordFormFieldState extends AuthenticatorFormFieldState< switch (widget.field) { case ResetPasswordField.newPassword: return validateNewPassword( - amplifyConfig: config.amplifyConfig, + amplifyOutputs: config.amplifyOutputs, inputResolver: stringResolver.inputs, )(context); case ResetPasswordField.passwordConfirmation: diff --git a/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/sign_up_form_field.dart b/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/sign_up_form_field.dart index 94b9e39517..d4e0687823 100644 --- a/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/sign_up_form_field.dart +++ b/packages/authenticator/amplify_authenticator/lib/src/widgets/form_fields/sign_up_form_field.dart @@ -587,7 +587,7 @@ class _SignUpTextFieldState extends _SignUpFormFieldState ); case SignUpField.password: return validateNewPassword( - amplifyConfig: config.amplifyConfig, + amplifyOutputs: config.amplifyOutputs, inputResolver: stringResolver.inputs, )(context); case SignUpField.passwordConfirmation: diff --git a/packages/authenticator/amplify_authenticator/test/sign_up_form_test.dart b/packages/authenticator/amplify_authenticator/test/sign_up_form_test.dart index abaca33389..21fc76fe60 100644 --- a/packages/authenticator/amplify_authenticator/test/sign_up_form_test.dart +++ b/packages/authenticator/amplify_authenticator/test/sign_up_form_test.dart @@ -1,13 +1,10 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -import 'dart:convert'; - import 'package:amplify_auth_cognito/amplify_auth_cognito.dart'; import 'package:amplify_authenticator/amplify_authenticator.dart'; import 'package:amplify_authenticator/src/services/amplify_auth_service.dart'; import 'package:amplify_authenticator_test/amplify_authenticator_test.dart'; -import 'package:amplify_core/amplify_core.dart'; import 'package:amplify_integration_test/amplify_integration_test.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:mocktail/mocktail.dart'; @@ -169,9 +166,9 @@ void main() { 'displays message when password does not meet requirements', (tester) async { await tester.pumpWidget( - MockAuthenticatorApp( + const MockAuthenticatorApp( initialStep: AuthenticatorStep.signUp, - config: jsonEncode(passwordReqConfig.toJson()), + config: passwordReqConfig, ), ); await tester.pumpAndSettle(); @@ -261,8 +258,8 @@ void main() { // Enter email with trailing space await signUpPage.enterUsername('user@example.com '); - await signUpPage.enterPassword('Password123'); - await signUpPage.enterPasswordConfirmation('Password123'); + await signUpPage.enterPassword('Password123!@#%^'); + await signUpPage.enterPasswordConfirmation('Password123!@#%^'); await signUpPage.submitSignUp(); await tester.pumpAndSettle(); @@ -275,20 +272,31 @@ void main() { }); } -final passwordReqConfig = AmplifyConfig( - auth: AuthConfig.cognito( - usernameAttributes: const [CognitoUserAttributeKey.email], - signupAttributes: const [CognitoUserAttributeKey.email], - passwordProtectionSettings: const PasswordProtectionSettings( - passwordPolicyCharacters: [ - PasswordPolicyCharacters.requiresSymbols, - PasswordPolicyCharacters.requiresUppercase, - ], - passwordPolicyMinLength: 16, - ), - verificationMechanisms: const [CognitoUserAttributeKey.email], - socialProviders: const [], - mfaConfiguration: MfaConfiguration.off, - mfaTypes: const [MfaType.sms], - ), -); +const passwordReqConfig = '''{ + "auth": { + "user_pool_id": "", + "aws_region": "", + "user_pool_client_id": "", + "identity_pool_id": "", + "mfa_methods": [ + "SMS" + ], + "standard_required_attributes": [ + "email" + ], + "username_attributes": [ + "email" + ], + "user_verification_types": [ + "email" + ], + "mfa_configuration": "NONE", + "password_policy": { + "min_length": 16, + "require_uppercase": true, + "require_symbols": true + }, + "unauthenticated_identities_enabled": true + }, + "version": "1" +}'''; diff --git a/packages/authenticator/amplify_authenticator/test/sign_up_test.dart b/packages/authenticator/amplify_authenticator/test/sign_up_test.dart index 83e1973f67..ed3158272f 100644 --- a/packages/authenticator/amplify_authenticator/test/sign_up_test.dart +++ b/packages/authenticator/amplify_authenticator/test/sign_up_test.dart @@ -21,7 +21,7 @@ void main() { final signInPage = SignInPage(tester: tester); const email = 'test-user@example.com'; - const password = 'Password123'; + const password = 'Password123!@#%^'; await signInPage.navigateToSignUp(); diff --git a/packages/authenticator/amplify_authenticator/test/ui/main_test.dart b/packages/authenticator/amplify_authenticator/test/ui/main_test.dart index b3414e2302..1b59b4d6bf 100644 --- a/packages/authenticator/amplify_authenticator/test/ui/main_test.dart +++ b/packages/authenticator/amplify_authenticator/test/ui/main_test.dart @@ -5,12 +5,12 @@ import 'dart:io'; import 'package:amplify_authenticator/amplify_authenticator.dart'; import 'package:amplify_authenticator_test/amplify_authenticator_test.dart'; -import 'package:amplify_authenticator_test/src/configs/email_config.dart'; -import 'package:amplify_authenticator_test/src/configs/email_or_phone_config.dart'; -import 'package:amplify_authenticator_test/src/configs/phone_config.dart'; -import 'package:amplify_authenticator_test/src/configs/sms_or_totp_config.dart'; -import 'package:amplify_authenticator_test/src/configs/social_providers_config.dart'; -import 'package:amplify_authenticator_test/src/configs/username_with_attributes.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/email_config.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/email_or_phone_config.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/phone_config.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/sms_or_totp_config.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/social_providers_config.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/username_with_attributes.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:golden_toolkit/golden_toolkit.dart'; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/email_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/email_config.dart new file mode 100644 index 0000000000..fecab138cf --- /dev/null +++ b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/email_config.dart @@ -0,0 +1,30 @@ +const emailConfig = '''{ + "version": "1", + "auth": { + "aws_region": "", + "user_pool_id": "", + "user_pool_client_id": "", + "identity_pool_id": "", + "password_policy": { + "min_length": 8, + "require_numbers": false, + "require_lowercase": false, + "require_uppercase": false, + "require_symbols": false + }, + "standard_required_attributes": [ + "email" + ], + "username_attributes": [ + "email" + ], + "user_verification_types": [ + "email" + ], + "unauthenticated_identities_enabled": true, + "mfa_configuration": "NONE", + "mfa_methods": [ + "SMS" + ] + } +}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/email_or_phone_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/email_or_phone_config.dart new file mode 100644 index 0000000000..ad5ef29355 --- /dev/null +++ b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/email_or_phone_config.dart @@ -0,0 +1,32 @@ +const emailOrPhoneConfig = '''{ + "version": "1", + "auth": { + "aws_region": "us-east-1", + "user_pool_id": "us-east-1_xxxx", + "user_pool_client_id": "xxxx", + "identity_pool_id": "us-east-1:xxxx", + "password_policy": { + "min_length": 8, + "require_numbers": false, + "require_lowercase": false, + "require_uppercase": false, + "require_symbols": false + }, + "standard_required_attributes": [ + "email", + "phone_number" + ], + "username_attributes": [ + "email", + "phone_number" + ], + "user_verification_types": [ + "email" + ], + "unauthenticated_identities_enabled": true, + "mfa_configuration": "REQUIRED", + "mfa_methods": [ + "SMS" + ] + } +}'''; \ No newline at end of file diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/phone_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/phone_config.dart new file mode 100644 index 0000000000..4363b1e721 --- /dev/null +++ b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/phone_config.dart @@ -0,0 +1,30 @@ +const phoneNumberConfig = '''{ + "version": "1", + "auth": { + "aws_region": "", + "user_pool_id": "", + "user_pool_client_id": "", + "identity_pool_id": "", + "password_policy": { + "min_length": 8, + "require_numbers": false, + "require_lowercase": false, + "require_uppercase": false, + "require_symbols": false + }, + "standard_required_attributes": [ + "email" + ], + "username_attributes": [ + "phone_number" + ], + "user_verification_types": [ + "email" + ], + "unauthenticated_identities_enabled": true, + "mfa_configuration": "NONE", + "mfa_methods": [ + "SMS" + ] + } +}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/sms_or_totp_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/sms_or_totp_config.dart new file mode 100644 index 0000000000..e073adcce5 --- /dev/null +++ b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/sms_or_totp_config.dart @@ -0,0 +1,29 @@ +const smsOrTotpConfig = '''{ + "version": "1", + "auth": { + "aws_region": "", + "user_pool_id": "", + "user_pool_client_id": "", + "identity_pool_id": "", + "password_policy": { + "min_length": 8, + "require_numbers": false, + "require_lowercase": false, + "require_uppercase": false, + "require_symbols": false + }, + "standard_required_attributes": [ + "email" + ], + "username_attributes": [], + "user_verification_types": [ + "email" + ], + "unauthenticated_identities_enabled": true, + "mfa_configuration": "REQUIRED", + "mfa_methods": [ + "TOTP", + "SMS" + ] + } +}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/social_providers_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/social_providers_config.dart new file mode 100644 index 0000000000..f7f2397f15 --- /dev/null +++ b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/social_providers_config.dart @@ -0,0 +1,53 @@ +const socialProviderConfig = '''{ + "version": "1", + "auth": { + "aws_region": "", + "user_pool_id": "", + "user_pool_client_id": "", + "identity_pool_id": "", + "password_policy": { + "min_length": 8, + "require_numbers": false, + "require_lowercase": false, + "require_uppercase": false, + "require_symbols": false + }, + "oauth": { + "identity_providers": [ + "SIGN_IN_WITH_APPLE", + "LOGIN_WITH_AMAZON", + "FACEBOOK", + "GOOGLE" + ], + "domain": "", + "scopes": [ + "phone", + "email", + "openid", + "profile", + "aws.cognito.signin.user.admin" + ], + "redirect_sign_in_uri": [ + "" + ], + "redirect_sign_out_uri": [ + "" + ], + "response_type": "code" + }, + "standard_required_attributes": [ + "email" + ], + "username_attributes": [ + "email" + ], + "user_verification_types": [ + "email" + ], + "unauthenticated_identities_enabled": true, + "mfa_configuration": "NONE", + "mfa_methods": [ + "SMS" + ] + } +}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/username_with_attributes.dart b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/username_with_attributes.dart new file mode 100644 index 0000000000..801d5e5e79 --- /dev/null +++ b/packages/authenticator/amplify_authenticator_test/lib/src/amplify_outputs/username_with_attributes.dart @@ -0,0 +1,30 @@ +const usernameWithAttributesConfig = '''{ + "version": "1", + "auth": { + "aws_region": "", + "user_pool_id": "", + "user_pool_client_id": "", + "identity_pool_id": "", + "password_policy": { + "min_length": 8, + "require_numbers": false, + "require_lowercase": false, + "require_uppercase": false, + "require_symbols": false + }, + "standard_required_attributes": [ + "email", + "preferred_username", + "birthdate" + ], + "username_attributes": [], + "user_verification_types": [ + "email" + ], + "unauthenticated_identities_enabled": true, + "mfa_configuration": "NONE", + "mfa_methods": [ + "SMS" + ] + } +}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/configs/email_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/configs/email_config.dart deleted file mode 100644 index cac07012b3..0000000000 --- a/packages/authenticator/amplify_authenticator_test/lib/src/configs/email_config.dart +++ /dev/null @@ -1,53 +0,0 @@ -const emailConfig = ''' { - "UserAgent": "aws-amplify-cli/2.0", - "Version": "1.0", - "auth": { - "plugins": { - "awsCognitoAuthPlugin": { - "UserAgent": "aws-amplify-cli/0.1.0", - "Version": "0.1.0", - "IdentityManager": { - "Default": {} - }, - "CredentialsProvider": { - "CognitoIdentity": { - "Default": { - "PoolId": "", - "Region": "" - } - } - }, - "CognitoUserPool": { - "Default": { - "PoolId": "", - "AppClientId": "", - "Region": "" - } - }, - "Auth": { - "Default": { - "authenticationFlowType": "USER_SRP_AUTH", - "socialProviders": [], - "usernameAttributes": [ - "EMAIL" - ], - "signupAttributes": [ - "EMAIL" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - } - } - } - } - } -}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/configs/email_or_phone_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/configs/email_or_phone_config.dart deleted file mode 100644 index 83d0e9441d..0000000000 --- a/packages/authenticator/amplify_authenticator_test/lib/src/configs/email_or_phone_config.dart +++ /dev/null @@ -1,55 +0,0 @@ -const emailOrPhoneConfig = ''' { - "UserAgent": "aws-amplify-cli/2.0", - "Version": "1.0", - "auth": { - "plugins": { - "awsCognitoAuthPlugin": { - "UserAgent": "aws-amplify-cli/0.1.0", - "Version": "0.1.0", - "IdentityManager": { - "Default": {} - }, - "CredentialsProvider": { - "CognitoIdentity": { - "Default": { - "PoolId": "us-east-1:xxxx", - "Region": "us-east-1" - } - } - }, - "CognitoUserPool": { - "Default": { - "PoolId": "us-east-1_xxxx", - "AppClientId": "xxxx", - "Region": "us-east-1" - } - }, - "Auth": { - "Default": { - "authenticationFlowType": "USER_SRP_AUTH", - "socialProviders": [], - "usernameAttributes": [ - "EMAIL", - "PHONE_NUMBER" - ], - "signupAttributes": [ - "EMAIL", - "PHONE_NUMBER" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "ON", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - } - } - } - } - } -}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/configs/phone_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/configs/phone_config.dart deleted file mode 100644 index b90ec8aa25..0000000000 --- a/packages/authenticator/amplify_authenticator_test/lib/src/configs/phone_config.dart +++ /dev/null @@ -1,53 +0,0 @@ -const phoneNumberConfig = ''' { - "UserAgent": "aws-amplify-cli/2.0", - "Version": "1.0", - "auth": { - "plugins": { - "awsCognitoAuthPlugin": { - "UserAgent": "aws-amplify-cli/0.1.0", - "Version": "0.1.0", - "IdentityManager": { - "Default": {} - }, - "CredentialsProvider": { - "CognitoIdentity": { - "Default": { - "PoolId": "", - "Region": "" - } - } - }, - "CognitoUserPool": { - "Default": { - "PoolId": "", - "AppClientId": "", - "Region": "" - } - }, - "Auth": { - "Default": { - "authenticationFlowType": "USER_SRP_AUTH", - "socialProviders": [], - "usernameAttributes": [ - "PHONE_NUMBER" - ], - "signupAttributes": [ - "EMAIL" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - } - } - } - } - } -}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/configs/sms_or_totp_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/configs/sms_or_totp_config.dart deleted file mode 100644 index 1f02e87a1a..0000000000 --- a/packages/authenticator/amplify_authenticator_test/lib/src/configs/sms_or_totp_config.dart +++ /dev/null @@ -1,51 +0,0 @@ -const smsOrTotpConfig = ''' { - "UserAgent": "aws-amplify-cli/2.0", - "Version": "1.0", - "auth": { - "plugins": { - "awsCognitoAuthPlugin": { - "UserAgent": "aws-amplify-cli/0.1.0", - "Version": "0.1.0", - "IdentityManager": { - "Default": {} - }, - "CredentialsProvider": { - "CognitoIdentity": { - "Default": { - "PoolId": "", - "Region": "" - } - } - }, - "CognitoUserPool": { - "Default": { - "PoolId": "", - "AppClientId": "", - "Region": "" - } - }, - "Auth": { - "Default": { - "authenticationFlowType": "USER_SRP_AUTH", - "usernameAttributes": [], - "signupAttributes": [ - "EMAIL" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "ON", - "mfaTypes": [ - "TOTP", - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - } - } - } - } - } -}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/configs/social_providers_config.dart b/packages/authenticator/amplify_authenticator_test/lib/src/configs/social_providers_config.dart deleted file mode 100644 index 30afc7b8cb..0000000000 --- a/packages/authenticator/amplify_authenticator_test/lib/src/configs/social_providers_config.dart +++ /dev/null @@ -1,71 +0,0 @@ -const socialProviderConfig = ''' { - "UserAgent": "aws-amplify-cli/2.0", - "Version": "1.0", - "auth": { - "plugins": { - "awsCognitoAuthPlugin": { - "UserAgent": "aws-amplify-cli/0.1.0", - "Version": "0.1.0", - "IdentityManager": { - "Default": {} - }, - "CredentialsProvider": { - "CognitoIdentity": { - "Default": { - "PoolId": "", - "Region": "" - } - } - }, - "CognitoUserPool": { - "Default": { - "PoolId": "", - "AppClientId": "", - "Region": "" - } - }, - "Auth": { - "Default": { - "OAuth": { - "WebDomain": "", - "AppClientId": "", - "SignInRedirectURI": "", - "SignOutRedirectURI": "", - "Scopes": [ - "phone", - "email", - "openid", - "profile", - "aws.cognito.signin.user.admin" - ] - }, - "authenticationFlowType": "USER_SRP_AUTH", - "socialProviders": [ - "APPLE", - "AMAZON", - "FACEBOOK", - "GOOGLE" - ], - "usernameAttributes": [ - "EMAIL" - ], - "signupAttributes": [ - "EMAIL" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - } - } - } - } - } -}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/configs/username_with_attributes.dart b/packages/authenticator/amplify_authenticator_test/lib/src/configs/username_with_attributes.dart deleted file mode 100644 index b20088bb2d..0000000000 --- a/packages/authenticator/amplify_authenticator_test/lib/src/configs/username_with_attributes.dart +++ /dev/null @@ -1,53 +0,0 @@ -const usernameWithAttributesConfig = ''' { - "UserAgent": "aws-amplify-cli/2.0", - "Version": "1.0", - "auth": { - "plugins": { - "awsCognitoAuthPlugin": { - "UserAgent": "aws-amplify-cli/0.1.0", - "Version": "0.1.0", - "IdentityManager": { - "Default": {} - }, - "CredentialsProvider": { - "CognitoIdentity": { - "Default": { - "PoolId": "", - "Region": "" - } - } - }, - "CognitoUserPool": { - "Default": { - "PoolId": "", - "AppClientId": "", - "Region": "" - } - }, - "Auth": { - "Default": { - "authenticationFlowType": "USER_SRP_AUTH", - "socialProviders": [], - "usernameAttributes": [], - "signupAttributes": [ - "EMAIL", - "PREFERRED_USERNAME", - "BIRTHDATE" - ], - "passwordProtectionSettings": { - "passwordPolicyMinLength": 8, - "passwordPolicyCharacters": [] - }, - "mfaConfiguration": "OFF", - "mfaTypes": [ - "SMS" - ], - "verificationMechanisms": [ - "EMAIL" - ] - } - } - } - } - } -}'''; diff --git a/packages/authenticator/amplify_authenticator_test/lib/src/mock_authenticator_app.dart b/packages/authenticator/amplify_authenticator_test/lib/src/mock_authenticator_app.dart index 651d3452e7..51f4a84830 100644 --- a/packages/authenticator/amplify_authenticator_test/lib/src/mock_authenticator_app.dart +++ b/packages/authenticator/amplify_authenticator_test/lib/src/mock_authenticator_app.dart @@ -7,7 +7,7 @@ import 'package:amplify_authenticator/amplify_authenticator.dart'; import 'package:amplify_authenticator/src/blocs/auth/auth_bloc.dart'; import 'package:amplify_authenticator/src/services/amplify_auth_service.dart'; import 'package:amplify_authenticator_test/amplify_authenticator_test.dart'; -import 'package:amplify_authenticator_test/src/configs/email_config.dart'; +import 'package:amplify_authenticator_test/src/amplify_outputs/email_config.dart'; import 'package:amplify_flutter/amplify_flutter.dart'; import 'package:amplify_integration_test/amplify_integration_test.dart'; import 'package:flutter/material.dart'; diff --git a/packages/test/amplify_integration_test/lib/src/stubs/amplify_stub.dart b/packages/test/amplify_integration_test/lib/src/stubs/amplify_stub.dart index 32c82eb282..cfbfde6e58 100644 --- a/packages/test/amplify_integration_test/lib/src/stubs/amplify_stub.dart +++ b/packages/test/amplify_integration_test/lib/src/stubs/amplify_stub.dart @@ -1,6 +1,8 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 +// ignore_for_file: invalid_use_of_internal_member + import 'dart:async'; import 'dart:convert'; @@ -14,11 +16,11 @@ class AmplifyStub extends AmplifyClass { /// {@macro amplify_integration_test.amplify_stub} AmplifyStub() : super.protected(); - AmplifyConfig? _config; + AmplifyOutputs? _config; bool _isConfigured = false; - final _configCompleter = Completer(); + final _configCompleter = Completer(); @override bool get isConfigured { @@ -26,7 +28,7 @@ class AmplifyStub extends AmplifyClass { } @override - Future get asyncConfig { + Future get asyncConfig { return _configCompleter.future; } @@ -72,13 +74,15 @@ class AmplifyStub extends AmplifyClass { } } - AmplifyConfig _parseConfigJson(String configuration) { + AmplifyOutputs _parseConfigJson(String configuration) { try { - return AmplifyConfig.fromJson( + return AmplifyOutputs.fromJson( jsonDecode(configuration) as Map, ); } on Exception { - return const AmplifyConfig(); + return const AmplifyOutputs( + version: '1', + ); } } }