Skip to content

Commit 784581d

Browse files
authored
feat(amplify_auth_cognito): enables clientMetadata for signUp (#713)
1 parent fced8ab commit 784581d

File tree

12 files changed

+107
-26
lines changed

12 files changed

+107
-26
lines changed

packages/amplify_analytics_pinpoint/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ dependencies {
6060
api amplifyCore
6161

6262
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
63-
implementation 'com.amplifyframework:aws-analytics-pinpoint:1.20.1'
64-
implementation 'com.amplifyframework:aws-auth-cognito:1.20.1'
63+
implementation 'com.amplifyframework:aws-analytics-pinpoint:1.22.0'
64+
implementation 'com.amplifyframework:aws-auth-cognito:1.22.0'
6565
testImplementation 'junit:junit:4.13'
6666
testImplementation 'org.mockito:mockito-core:3.1.0'
6767
testImplementation 'org.mockito:mockito-inline:3.1.0'

packages/amplify_api/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ dependencies {
5555
api amplifyCore
5656

5757
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
58-
implementation "com.amplifyframework:aws-api:1.20.1"
59-
implementation "com.amplifyframework:aws-api-appsync:1.20.1"
58+
implementation "com.amplifyframework:aws-api:1.22.0"
59+
implementation "com.amplifyframework:aws-api-appsync:1.22.0"
6060

6161
testImplementation 'junit:junit:4.13'
6262
testImplementation 'org.mockito:mockito-core:3.10.0'

packages/amplify_auth_cognito/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ android {
6161
dependencies {
6262
api amplifyCore
6363
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
64-
implementation 'com.amplifyframework:aws-auth-cognito:1.20.1'
64+
implementation 'com.amplifyframework:aws-auth-cognito:1.22.0'
6565
testImplementation 'junit:junit:4.13'
6666
testImplementation 'org.mockito:mockito-core:3.1.0'
6767
testImplementation 'org.mockito:mockito-inline:3.1.0'

packages/amplify_auth_cognito/android/src/main/kotlin/com/amazonaws/amplify/amplify_auth_cognito/types/FlutterSignUpRequest.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ data class FlutterSignUpRequest(val map: HashMap<String, *>) {
3232
val optionsBuilder = AWSCognitoAuthSignUpOptions.builder()
3333
if (rawOptions != null) {
3434
val attributeData = rawOptions["userAttributes"] as? MutableMap<String, String>
35+
val clientMetadata = rawOptions["clientMetadata"] as? MutableMap<String, String>
3536
val validationData = rawOptions["validationData"] as? MutableMap<String, String>
3637

3738
if (attributeData is MutableMap<String, String>) {
@@ -45,6 +46,10 @@ data class FlutterSignUpRequest(val map: HashMap<String, *>) {
4546
optionsBuilder.validationData(validationData)
4647
}
4748

49+
if (clientMetadata is MutableMap<String, String>) {
50+
optionsBuilder.clientMetadata(clientMetadata)
51+
}
52+
4853
}
4954
return optionsBuilder.build()
5055
}

packages/amplify_auth_cognito/android/src/test/kotlin/com/amazonaws/amplify/amplify_auth_cognito/AmplifyAuthCognitoPluginTest.kt

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616
package com.amazonaws.amplify.amplify_auth_cognito
1717

1818
import android.app.Activity
19-
import com.amazonaws.amplify.amplify_auth_cognito.types.FlutterConfirmUserAttributeRequest
20-
import com.amazonaws.amplify.amplify_auth_cognito.types.FlutterResendUserAttributeConfirmationCodeRequest
21-
import com.amazonaws.amplify.amplify_auth_cognito.types.FlutterUpdateUserAttributeRequest
22-
import com.amazonaws.amplify.amplify_auth_cognito.types.FlutterUpdateUserAttributesRequest
19+
import com.amazonaws.amplify.amplify_auth_cognito.types.*
2320
import com.amazonaws.amplify.amplify_core.exception.InvalidRequestException
2421
import com.amazonaws.auth.AWSCredentials
2522
import com.amazonaws.auth.BasicAWSCredentials
@@ -46,8 +43,7 @@ import com.amplifyframework.logging.Logger
4643
import com.google.gson.internal.LinkedTreeMap
4744
import io.flutter.plugin.common.MethodCall
4845
import io.flutter.plugin.common.MethodChannel
49-
import org.junit.Assert.assertThrows
50-
import org.junit.Assert.fail
46+
import org.junit.Assert.*
5147
import org.junit.Before
5248
import org.junit.Test
5349
import org.junit.runner.RunWith
@@ -123,6 +119,50 @@ class AmplifyAuthCognitoPluginTest {
123119
verify(mockResult, times(1)).success(res);
124120
}
125121

122+
@Test
123+
fun signUpRequestMetadata_returnsSuccess() {
124+
// Arrange
125+
val clientMetadata = hashMapOf("attribute" to "value")
126+
val options = hashMapOf(
127+
"clientMetadata" to clientMetadata
128+
)
129+
val data: HashMap<String, *> = hashMapOf(
130+
"username" to "testUser",
131+
"password" to "testPassword",
132+
"options" to options
133+
)
134+
135+
// Act
136+
val request = FlutterSignUpRequest(data)
137+
138+
// Assert
139+
assertEquals(clientMetadata, request.options.clientMetadata)
140+
assertEquals(0, request.options.validationData.size)
141+
assertEquals(0, request.options.userAttributes.size)
142+
}
143+
144+
@Test
145+
fun signUpRequestValidationdata_returnsSuccess() {
146+
// Arrange
147+
val validationData = hashMapOf("attribute" to "value")
148+
val options = hashMapOf(
149+
"validationData" to validationData
150+
)
151+
val data: HashMap<String, *> = hashMapOf(
152+
"username" to "testUser",
153+
"password" to "testPassword",
154+
"options" to options
155+
)
156+
157+
// Act
158+
val request = FlutterSignUpRequest(data)
159+
160+
// Assert
161+
assertEquals(validationData, request.options.validationData)
162+
assertEquals(0, request.options.clientMetadata.size)
163+
assertEquals(0, request.options.userAttributes.size)
164+
}
165+
126166
@Test
127167
fun signUpNoOptions_returnsSuccess() {
128168
// Arrange

packages/amplify_auth_cognito/example/ios/unit_tests/amplify_auth_cognito_tests.swift

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class amplify_auth_cognito_tests: XCTestCase {
9696
})
9797
}
9898

99+
99100
func test_signUpSuccessPhone() {
100101

101102
class SignUpMock: AuthCognitoBridge {
@@ -281,14 +282,34 @@ class amplify_auth_cognito_tests: XCTestCase {
281282
XCTAssertNoThrow(try FlutterSignUpRequest.validate(dict: rawData))
282283
}
283284

284-
func test_signUpFormatAttributes() {
285+
func test_signUpWithUserAttributes() {
285286
let rawAttributes: Dictionary<String, Any> = ["email": _email, "customAttribute": "female"]
286287
let rawOptions: Dictionary<String, Any> = ["userAttributes": rawAttributes]
287288
let rawData: NSMutableDictionary = ["options":rawOptions, "username": _username, "password": _password]
288289
let request = FlutterSignUpRequest(dict: rawData);
289290
XCTAssertEqual(2, request.options?.userAttributes?.count)
290291
}
291292

293+
func test_signUpWithClientMetadata() {
294+
let metadata: Dictionary<String, Any> = ["attribute": "value"]
295+
let rawOptions: Dictionary<String, Any> = ["clientMetadata": metadata]
296+
let rawData: NSMutableDictionary = ["options":rawOptions, "username": _username, "password": _password]
297+
let request = FlutterSignUpRequest(dict: rawData);
298+
let options = request.options?.pluginOptions as! AWSAuthSignUpOptions
299+
XCTAssertEqual("value", options.metadata!["attribute"])
300+
XCTAssertNil(options.validationData)
301+
}
302+
303+
func test_signUpWithValidationdata() {
304+
let validationData: Dictionary<String, Any> = ["attribute": "value"]
305+
let rawOptions: Dictionary<String, Any> = ["validationData": validationData]
306+
let rawData: NSMutableDictionary = ["options":rawOptions, "username": _username, "password": _password]
307+
let request = FlutterSignUpRequest(dict: rawData);
308+
let options = request.options?.pluginOptions as! AWSAuthSignUpOptions
309+
XCTAssertEqual("value", options.validationData!["attribute"])
310+
XCTAssertNil(options.metadata)
311+
}
312+
292313
func test_signUpError() {
293314

294315
class SignUpMock: AuthCognitoBridge {

packages/amplify_auth_cognito/ios/Classes/FlutterSignUpRequest.swift

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,20 @@ struct FlutterSignUpRequest {
3030
}
3131

3232
private func createOptions(options: Dictionary<String, Any>?) -> AuthSignUpRequest.Options? {
33+
var userAttributes: [AuthUserAttribute]? = nil
34+
var pluginOptions: AWSAuthSignUpOptions? = nil
3335
if (options?["userAttributes"] is Dictionary<String, String>) {
3436
let rawAttributes = options!["userAttributes"] as! Dictionary<String, String>
35-
let userAttributes = createAuthUserAttributes(rawAttributes: rawAttributes)
36-
return AuthSignUpRequest.Options(userAttributes: userAttributes)
37+
userAttributes = createAuthUserAttributes(rawAttributes: rawAttributes)
3738
}
38-
return nil
39+
40+
if (options?["clientMetadata"] is Dictionary<String, String> || options?["validationData"] is Dictionary<String, String>) {
41+
pluginOptions = AWSAuthSignUpOptions(
42+
validationData: options?["validationData"] as? [String: String],
43+
metadata: options?["clientMetadata"] as? [String : String]
44+
)
45+
}
46+
return AuthSignUpRequest.Options(userAttributes: userAttributes, pluginOptions: pluginOptions)
3947
}
4048

4149
private func createAuthUserAttributes(rawAttributes: Dictionary<String, String>) -> [AuthUserAttribute] {

packages/amplify_auth_cognito/lib/src/CognitoSignUp/CognitoSignUpOptions.dart

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ class CognitoSignUpOptions extends SignUpOptions {
2323
/// Currently supported on `Android` only.
2424
final Map<String, String>? validationData;
2525

26+
/// Additional custom attributes to be sent to the service such as information
27+
/// about the client.
28+
///
29+
final Map<String, String>? clientMetadata;
30+
2631
/// Creates a sign up configuration with the given user attributes and validation data.
2732
///
2833
/// [userAttributes] is a map of key-value pairs, where the key is one of the standard
@@ -54,16 +59,18 @@ class CognitoSignUpOptions extends SignUpOptions {
5459
/// - Phone number verification is enabled
5560
/// - Phone number was marked as a required attribute
5661
/// - **and** users sign up with a chosen username or email
57-
const CognitoSignUpOptions({
58-
Map<String, String> userAttributes = const {},
59-
this.validationData,
60-
}) : super(userAttributes: userAttributes);
62+
const CognitoSignUpOptions(
63+
{Map<String, String> userAttributes = const {},
64+
this.validationData,
65+
this.clientMetadata})
66+
: super(userAttributes: userAttributes);
6167

6268
@override
6369
Map<String, dynamic> serializeAsMap() {
6470
final Map<String, dynamic> pendingRequest = {
6571
'validationData': validationData,
66-
'userAttributes': userAttributes
72+
'userAttributes': userAttributes,
73+
'clientMetadata': clientMetadata
6774
};
6875
pendingRequest.removeWhere((_, v) => v == null);
6976
return pendingRequest;

packages/amplify_core/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ android {
6161

6262
dependencies {
6363
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
64-
implementation 'com.amplifyframework:core:1.20.1'
64+
implementation 'com.amplifyframework:core:1.22.0'
6565
implementation 'com.google.code.gson:gson:2.8.6'
6666
testImplementation 'junit:junit:4.13'
6767
testImplementation 'org.mockito:mockito-core:3.1.0'

packages/amplify_datastore/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ android {
5757

5858
dependencies {
5959
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
60-
implementation "com.amplifyframework:aws-datastore:1.20.1"
61-
implementation "com.amplifyframework:aws-api-appsync:1.20.1"
60+
implementation "com.amplifyframework:aws-datastore:1.22.0"
61+
implementation "com.amplifyframework:aws-api-appsync:1.22.0"
6262
testImplementation 'junit:junit:4.13'
6363
testImplementation 'org.mockito:mockito-core:3.10.0'
6464
testImplementation 'org.mockito:mockito-inline:3.10.0'

0 commit comments

Comments
 (0)