From 780a28d3783e43636e2d6b7d3a01288f690e1ff1 Mon Sep 17 00:00:00 2001 From: NikaHsn Date: Thu, 29 Aug 2024 13:38:38 -0700 Subject: [PATCH] chore(auth): credential store state machine to use AuthOutputs instead of AmplifyConfig types (#5298) --- .../credential_store_state_machine.dart | 67 +++++++++---------- .../credential_store_state_machine_test.dart | 2 +- 2 files changed, 34 insertions(+), 35 deletions(-) diff --git a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart index 249d4b8fdb..1c224e428c 100644 --- a/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart +++ b/packages/auth/amplify_auth_cognito_dart/lib/src/state/machines/credential_store_state_machine.dart @@ -17,6 +17,8 @@ import 'package:amplify_auth_cognito_dart/src/sdk/cognito_identity_provider.dart import 'package:amplify_auth_cognito_dart/src/state/cognito_state_machine.dart'; import 'package:amplify_auth_cognito_dart/src/state/state.dart'; import 'package:amplify_core/amplify_core.dart'; +// ignore: implementation_imports +import 'package:amplify_core/src/config/amplify_outputs/auth/auth_outputs.dart'; import 'package:amplify_secure_storage_dart/amplify_secure_storage_dart.dart'; import 'package:meta/meta.dart'; @@ -49,6 +51,14 @@ final class CredentialStoreStateMachine DeviceMetadataRepository get _deviceRepository => getOrCreate(); + AuthOutputs get _authOutputs => expect(); + + late final bool _hasUserPool = + _authOutputs.userPoolId != null && _authOutputs.userPoolClientId != null; + late final bool _hasIdentityPool = _authOutputs.identityPoolId != null; + late final bool _hasHostedUi = + _authOutputs.oauth != null && _authOutputs.userPoolClientId != null; + @override Future resolve(CredentialStoreEvent event) async { switch (event) { @@ -99,13 +109,11 @@ final class CredentialStoreStateMachine /// Loads the credential store from storage and returns the data. Future _loadCredentialStore() async { - final authConfig = expect(); - CognitoSignInDetails? signInDetails; CognitoUserPoolTokens? userPoolTokens; - final userPoolConfig = authConfig.userPoolConfig; - if (userPoolConfig != null) { - final keys = CognitoUserPoolKeys(userPoolConfig.appClientId); + + if (_hasUserPool) { + final keys = CognitoUserPoolKeys(_authOutputs.userPoolClientId!); final accessToken = await _secureStorage.read( key: keys[CognitoUserPoolKey.accessToken], ); @@ -138,9 +146,8 @@ final class CredentialStoreStateMachine } } - final hostedUiConfig = authConfig.hostedUiConfig; - if (hostedUiConfig != null) { - final keys = HostedUiKeys(hostedUiConfig.appClientId); + if (_hasHostedUi) { + final keys = HostedUiKeys(_authOutputs.userPoolClientId!); final accessToken = await _secureStorage.read( key: keys[HostedUiKey.accessToken], ); @@ -172,9 +179,8 @@ final class CredentialStoreStateMachine String? identityId; AWSCredentials? awsCredentials; - final identityPoolConfig = authConfig.identityPoolConfig; - if (identityPoolConfig != null) { - final keys = CognitoIdentityPoolKeys(identityPoolConfig.poolId); + if (_hasIdentityPool) { + final keys = CognitoIdentityPoolKeys(_authOutputs.identityPoolId!); identityId = await _secureStorage.read( key: keys[CognitoIdentityPoolKey.identityId], ); @@ -232,14 +238,12 @@ final class CredentialStoreStateMachine final identityId = data.identityId; final awsCredentials = data.awsCredentials; final signInDetails = data.signInDetails; - final authConfig = expect(); final items = {}; final deletions = []; - final userPoolConfig = authConfig.userPoolConfig; - if (userPoolConfig != null) { - final keys = CognitoUserPoolKeys(userPoolConfig.appClientId); + if (_hasUserPool) { + final keys = CognitoUserPoolKeys(_authOutputs.userPoolClientId!); if (userPoolTokens != null && userPoolTokens.signInMethod == CognitoSignInMethod.default$) { signInDetails as CognitoSignInDetailsApiBased?; @@ -256,9 +260,8 @@ final class CredentialStoreStateMachine } } - final hostedUiConfig = authConfig.hostedUiConfig; - if (hostedUiConfig != null) { - final keys = HostedUiKeys(hostedUiConfig.appClientId); + if (_hasHostedUi) { + final keys = HostedUiKeys(_authOutputs.userPoolClientId!); if (userPoolTokens != null && (userPoolTokens.signInMethod == CognitoSignInMethod.hostedUi)) { signInDetails as CognitoSignInDetailsHostedUi?; @@ -273,9 +276,8 @@ final class CredentialStoreStateMachine } } - final identityPoolConfig = authConfig.identityPoolConfig; - if (identityPoolConfig != null) { - final keys = CognitoIdentityPoolKeys(identityPoolConfig.poolId); + if (_hasIdentityPool) { + final keys = CognitoIdentityPoolKeys(_authOutputs.identityPoolId!); if (identityId != null) { items[keys[CognitoIdentityPoolKey.identityId]] = identityId; } @@ -334,6 +336,7 @@ final class CredentialStoreStateMachine /// Migrates AWS Credentials and User Pool tokens. Future _migrateLegacyCredentials() async { final provider = get(); + // TODO(nikahsn): remove after refactoring LegacyCredentialProvider final authConfig = expect(); if (provider == null) return null; CredentialStoreData? legacyData; @@ -355,9 +358,9 @@ final class CredentialStoreStateMachine /// Migrates legacy device secrets. Future _migrateDeviceSecrets(String username) async { final credentialProvider = get(); + // TODO(nikahsn): remove after refactoring LegacyCredentialProvider final authConfig = expect(); - final userPoolKeys = - CognitoUserPoolKeys(authConfig.userPoolConfig!.appClientId); + final userPoolKeys = CognitoUserPoolKeys(_authOutputs.userPoolClientId!); if (credentialProvider == null) return; try { final legacySecrets = await credentialProvider.fetchLegacyDeviceSecrets( @@ -396,6 +399,7 @@ final class CredentialStoreStateMachine /// Deletes legacy credentials. Future _deleteLegacyCredentials() async { final provider = get(); + // TODO(nikahsn): remove after refactoring LegacyCredentialProvider final authConfig = expect(); if (provider == null) return; try { @@ -431,16 +435,13 @@ final class CredentialStoreStateMachine Future onClearCredentials( CredentialStoreClearCredentials event, ) async { - final authConfig = expect(); - final clearKeys = event.keys; final deletions = []; bool shouldDelete(String key) => clearKeys.isEmpty || clearKeys.contains(key); - final userPoolConfig = authConfig.userPoolConfig; - if (userPoolConfig != null) { - final userPoolKeys = CognitoUserPoolKeys(userPoolConfig.appClientId); + if (_hasUserPool) { + final userPoolKeys = CognitoUserPoolKeys(_authOutputs.userPoolClientId!); for (final key in userPoolKeys) { if (shouldDelete(key)) { deletions.add(key); @@ -448,9 +449,8 @@ final class CredentialStoreStateMachine } } - final hostedUiConfig = authConfig.hostedUiConfig; - if (hostedUiConfig != null) { - final hostedUiKeys = HostedUiKeys(hostedUiConfig.appClientId); + if (_hasHostedUi) { + final hostedUiKeys = HostedUiKeys(_authOutputs.userPoolClientId!); for (final key in hostedUiKeys) { if (shouldDelete(key)) { deletions.add(key); @@ -458,10 +458,9 @@ final class CredentialStoreStateMachine } } - final identityPoolConfig = authConfig.identityPoolConfig; - if (identityPoolConfig != null) { + if (_hasIdentityPool) { final identityPoolKeys = - CognitoIdentityPoolKeys(identityPoolConfig.poolId); + CognitoIdentityPoolKeys(_authOutputs.identityPoolId!); for (final key in identityPoolKeys) { if (shouldDelete(key)) { deletions.add(key); diff --git a/packages/auth/amplify_auth_cognito_test/test/state/credential_store_state_machine_test.dart b/packages/auth/amplify_auth_cognito_test/test/state/credential_store_state_machine_test.dart index 51e5509360..b30f9e6d23 100644 --- a/packages/auth/amplify_auth_cognito_test/test/state/credential_store_state_machine_test.dart +++ b/packages/auth/amplify_auth_cognito_test/test/state/credential_store_state_machine_test.dart @@ -31,7 +31,7 @@ void main() { secureStorage = MockSecureStorage(); manager = DependencyManager() ..addInstance(secureStorage) - ..addInstance(mockConfig) + ..addInstance(mockConfig.auth!) ..addInstance(authConfig); stateMachine = CognitoAuthStateMachine(dependencyManager: manager); });