Skip to content

Commit 513fb5b

Browse files
committed
feat(auth): runtime authFlow attribute (#1687)
1 parent ca01bdd commit 513fb5b

File tree

15 files changed

+81
-40
lines changed

15 files changed

+81
-40
lines changed

packages/amplify/amplify_flutter_ios/ios/amplify_flutter_ios.podspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ Pod::Spec.new do |s|
1717
s.source = { :git => 'https://github.com/aws-amplify/amplify-flutter.git' }
1818
s.source_files = 'Classes/**/*'
1919
s.dependency 'Flutter'
20-
s.dependency 'Amplify', '1.23.0'
21-
s.dependency 'AWSPluginsCore', '1.23.0'
22-
s.dependency 'AmplifyPlugins/AWSCognitoAuthPlugin', '1.23.0'
20+
s.dependency 'Amplify', '1.25.0'
21+
s.dependency 'AWSPluginsCore', '1.25.0'
22+
s.dependency 'AmplifyPlugins/AWSCognitoAuthPlugin', '1.25.0'
2323
s.dependency 'amplify_core'
2424
s.dependency 'SwiftLint'
2525
s.dependency 'SwiftFormat/CLI'

packages/amplify_datastore/ios/amplify_datastore.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ The DataStore module for Amplify Flutter.
1515
s.source = { :git => 'https://github.com/aws-amplify/amplify-flutter.git' }
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'Flutter'
18-
s.dependency 'Amplify', '1.23.0'
19-
s.dependency 'AmplifyPlugins/AWSDataStorePlugin', '1.23.0'
18+
s.dependency 'Amplify', '1.25.0'
19+
s.dependency 'AmplifyPlugins/AWSDataStorePlugin', '1.25.0'
2020
s.dependency 'amplify_core'
2121
s.platform = :ios, '13.0'
2222

packages/analytics/amplify_analytics_pinpoint_ios/ios/amplify_analytics_pinpoint_ios.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ This code is the iOS part of the Amplify Flutter Pinpoint Analytics Plugin. The
1515
s.source = { :git => 'https://github.com/aws-amplify/amplify-flutter.git' }
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'Flutter'
18-
s.dependency 'Amplify', '1.23.0'
19-
s.dependency 'AmplifyPlugins/AWSPinpointAnalyticsPlugin', '1.23.0'
18+
s.dependency 'Amplify', '1.25.0'
19+
s.dependency 'AmplifyPlugins/AWSPinpointAnalyticsPlugin', '1.25.0'
2020
s.dependency 'amplify_core'
2121
s.platform = :ios, '11.0'
2222

packages/api/amplify_api_ios/ios/amplify_api_ios.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ The API module for Amplify Flutter.
1515
s.source = { :git => 'https://github.com/aws-amplify/amplify-flutter.git' }
1616
s.source_files = 'Classes/**/*'
1717
s.dependency 'Flutter'
18-
s.dependency 'Amplify', '1.23.0'
19-
s.dependency 'AmplifyPlugins/AWSAPIPlugin', '1.23.0'
18+
s.dependency 'Amplify', '1.25.0'
19+
s.dependency 'AmplifyPlugins/AWSAPIPlugin', '1.25.0'
2020
s.dependency 'amplify_core'
2121
s.platform = :ios, '11.0'
2222

packages/auth/amplify_auth_cognito/example/integration_test/custom_auth_passwordless_test.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ void main() {
2626
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
2727
late String username;
2828
late String password;
29+
CognitoSignInOptions options =
30+
CognitoSignInOptions(authFlowType: AuthenticationFlowType.customAuth);
2931
group(
3032
'custom auth passwordless signIn',
3133
() {
@@ -36,6 +38,9 @@ void main() {
3638
setUpAll(() async {
3739
await configureAuth(
3840
customAuth: true,
41+
additionalPlugins: [
42+
AmplifyAPI(),
43+
],
3944
);
4045
// create new user for each test
4146
username = generateUsername();
@@ -79,6 +84,7 @@ void main() {
7984
final res = await Amplify.Auth.signIn(
8085
username: username,
8186
password: null,
87+
options: options,
8288
);
8389
expect(
8490
res.isSignedIn,
@@ -102,6 +108,7 @@ void main() {
102108
await Amplify.Auth.signIn(
103109
username: username,
104110
password: null,
111+
options: options,
105112
);
106113
// '123' is the arbitrary challenge answer defined in lambda code
107114
final res = await Amplify.Auth.confirmSignIn(
@@ -117,7 +124,11 @@ void main() {
117124
testWidgets(
118125
'an incorrect challenge reply should throw a NotAuthorizedException',
119126
(WidgetTester tester) async {
120-
await Amplify.Auth.signIn(username: username, password: null);
127+
await Amplify.Auth.signIn(
128+
username: username,
129+
password: null,
130+
options: options,
131+
);
121132
// '123' is the arbitrary challenge answer defined in lambda code
122133
expect(
123134
Amplify.Auth.confirmSignIn(confirmationValue: 'wrong'),

packages/auth/amplify_auth_cognito/example/integration_test/sign_in_sign_out_test.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@
1313
* permissions and limitations under the License.
1414
*/
1515

16+
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
1617
import 'package:amplify_flutter/amplify_flutter.dart';
1718
import 'package:amplify_test/amplify_test.dart';
18-
import 'package:integration_test/integration_test.dart';
1919
import 'package:flutter_test/flutter_test.dart';
20+
import 'package:integration_test/integration_test.dart';
2021

2122
import 'utils/mock_data.dart';
2223
import 'utils/setup_utils.dart';

packages/auth/amplify_auth_cognito/example/integration_test/utils/setup_utils.dart

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,11 @@ import 'package:amplify_auth_cognito_example/amplifyconfiguration.dart';
2020
import 'package:amplify_flutter/amplify_flutter.dart';
2121

2222
Future<void> configureAuth(
23-
{List<AmplifyPluginInterface> additionalPlugins = const [],
24-
bool customAuth = false}) async {
23+
{List<AmplifyPluginInterface> additionalPlugins = const []}) async {
2524
if (!Amplify.isConfigured) {
2625
final authPlugin = AmplifyAuthCognito();
27-
String config = _createConfig(amplifyconfig, customAuth: customAuth);
2826
await Amplify.addPlugins([authPlugin, ...additionalPlugins]);
29-
await Amplify.configure(config);
27+
await Amplify.configure(amplifyconfig);
3028
}
3129
}
3230

@@ -38,15 +36,3 @@ Future<void> signOutUser() async {
3836
// Ignore a signOut error because we only care when someone signed in.
3937
}
4038
}
41-
42-
// parse json, and switch auth mode if required by test
43-
String _createConfig(String amplifyconfig, {bool customAuth = false}) {
44-
String config = amplifyconfig;
45-
if (customAuth) {
46-
var configString = jsonDecode(amplifyconfig);
47-
configString['auth']['plugins']['awsCognitoAuthPlugin']['Auth']['Default']
48-
['authenticationFlowType'] = 'CUSTOM_AUTH';
49-
config = jsonEncode(configString);
50-
}
51-
return config;
52-
}

packages/auth/amplify_auth_cognito/lib/src/CognitoSignIn/CognitoSignInOptions.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@ import 'package:amplify_core/amplify_core.dart';
1717

1818
class CognitoSignInOptions extends SignInOptions {
1919
Map<String, String>? clientMetadata;
20-
CognitoSignInOptions({this.clientMetadata}) : super();
20+
final AuthenticationFlowType? authFlowType;
21+
22+
CognitoSignInOptions({this.clientMetadata, this.authFlowType}) : super();
2123
Map<String, dynamic> serializeAsMap() {
2224
final Map<String, dynamic> pendingRequest = {
23-
'clientMetadata': clientMetadata
25+
'clientMetadata': clientMetadata,
26+
'authFlowType': authFlowType?.name,
2427
};
2528
pendingRequest.removeWhere((_, v) => v == null);
2629
return pendingRequest;

packages/auth/amplify_auth_cognito/test/amplify_auth_cognito_signin_test.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*/
1515

1616
import 'package:amplify_auth_cognito/method_channel_auth_cognito.dart';
17+
import 'package:amplify_core/amplify_core.dart';
1718
import 'package:flutter/services.dart';
1819
import 'package:flutter_test/flutter_test.dart';
1920
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
@@ -68,13 +69,17 @@ void main() {
6869
});
6970

7071
test('signIn request accepts and serializes options', () async {
71-
var options = CognitoSignInOptions(clientMetadata: {'key': 'val'});
72+
var options = CognitoSignInOptions(
73+
clientMetadata: {'key': 'val'},
74+
authFlowType: AuthenticationFlowType.userSrpAuth,
75+
);
7276
var req =
7377
SignInRequest(username: 'testUser', password: '123', options: options)
7478
.serializeAsMap();
7579
expect(req['options'], isInstanceOf<Map>());
7680
expect((req['options'] as Map)['clientMetadata'], isInstanceOf<Map>());
7781
expect((req['options'] as Map)['clientMetadata']['key'], equals('val'));
82+
expect((req['options'] as Map)['authFlowType'], equals('userSrpAuth'));
7883
});
7984

8085
test('signIn thrown PlatFormException results in AuthError', () async {

packages/auth/amplify_auth_cognito_android/android/src/main/kotlin/com/amazonaws/amplify/amplify_auth_cognito/types/FlutterSignInRequest.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package com.amazonaws.amplify.amplify_auth_cognito.types
1717

1818
import com.amplifyframework.auth.AuthUser
1919
import com.amplifyframework.auth.cognito.options.AWSCognitoAuthSignInOptions
20+
import com.amplifyframework.auth.cognito.options.AuthFlowType
2021
import com.amplifyframework.core.Amplify
2122

2223
data class FlutterSignInRequest(val map: HashMap<String, *>) {
@@ -35,6 +36,13 @@ data class FlutterSignInRequest(val map: HashMap<String, *>) {
3536
if (rawOptions?.get("clientMetadata") != null)
3637
options.metadata(rawOptions["clientMetadata"] as HashMap<String, String>)
3738

39+
if (rawOptions?.get("authFlowType") != null) {
40+
when (rawOptions?.get("authFlowType")) {
41+
"userSrpAuth" -> options.authFlowType(AuthFlowType.USER_SRP_AUTH)
42+
"customAuth" -> options.authFlowType(AuthFlowType.CUSTOM_AUTH)
43+
}
44+
}
45+
3846
return options.build();
3947
}
4048

0 commit comments

Comments
 (0)