Skip to content

Commit de22372

Browse files
haverchuckNoyes
andauthored
feat(aws-auth-cognito): Allows userattributes in confirmSignIn (#1343)
* feat(aws-auth-cognito): Allows userattributes in confirmSignIn * PR feedback Co-authored-by: Noyes <[email protected]>
1 parent 01de9e2 commit de22372

File tree

3 files changed

+60
-12
lines changed

3 files changed

+60
-12
lines changed

aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,11 +417,16 @@ public void confirmSignIn(
417417
@NonNull Consumer<AuthException> onException
418418
) {
419419
final Map<String, String> metadata = new HashMap<>();
420+
final Map<String, String> userAttributes = new HashMap<>();
420421
if (options instanceof AWSCognitoAuthConfirmSignInOptions) {
421422
metadata.putAll(((AWSCognitoAuthConfirmSignInOptions) options).getMetadata());
423+
for (AuthUserAttribute attribute : ((AWSCognitoAuthConfirmSignInOptions) options).getUserAttributes()) {
424+
userAttributes.put(attribute.getKey().getKeyString(), attribute.getValue());
425+
}
426+
422427
}
423428

424-
awsMobileClient.confirmSignIn(confirmationCode, metadata, new Callback<SignInResult>() {
429+
awsMobileClient.confirmSignIn(confirmationCode, metadata, userAttributes, new Callback<SignInResult>() {
425430
@Override
426431
public void onResult(SignInResult result) {
427432
try {

aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions.java

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
import androidx.annotation.NonNull;
1919
import androidx.core.util.ObjectsCompat;
2020

21+
import com.amplifyframework.auth.AuthUserAttribute;
2122
import com.amplifyframework.auth.options.AuthConfirmSignInOptions;
2223
import com.amplifyframework.util.Immutable;
2324

25+
import java.util.ArrayList;
2426
import java.util.HashMap;
27+
import java.util.List;
2528
import java.util.Map;
2629
import java.util.Objects;
2730

@@ -30,15 +33,20 @@
3033
*/
3134
public final class AWSCognitoAuthConfirmSignInOptions extends AuthConfirmSignInOptions {
3235
private final Map<String, String> metadata;
36+
private final List<AuthUserAttribute> userAttributes;
3337

3438
/**
3539
* Advanced options for confirming sign in.
3640
* @param metadata Additional custom attributes to be sent to the service such as information about the client
41+
* @param userAttributes A list of additional user attributes which should be
42+
* associated with this user on confirmSignIn.
3743
*/
3844
protected AWSCognitoAuthConfirmSignInOptions(
39-
Map<String, String> metadata
45+
Map<String, String> metadata,
46+
List<AuthUserAttribute> userAttributes
4047
) {
4148
this.metadata = metadata;
49+
this.userAttributes = userAttributes;
4250
}
4351

4452
/**
@@ -50,6 +58,15 @@ public Map<String, String> getMetadata() {
5058
return metadata;
5159
}
5260

61+
/**
62+
* Get additional user attributes which should be associated with this user on confirmSignIn.
63+
* @return additional user attributes which should be associated with this user on confirmSignIn
64+
*/
65+
@NonNull
66+
public List<AuthUserAttribute> getUserAttributes() {
67+
return userAttributes;
68+
}
69+
5370
/**
5471
* Get a builder object.
5572
* @return a builder object.
@@ -62,7 +79,8 @@ public static CognitoBuilder builder() {
6279
@Override
6380
public int hashCode() {
6481
return ObjectsCompat.hash(
65-
getMetadata()
82+
getMetadata(),
83+
getUserAttributes()
6684
);
6785
}
6886

@@ -74,14 +92,16 @@ public boolean equals(Object obj) {
7492
return false;
7593
} else {
7694
AWSCognitoAuthConfirmSignInOptions authConfirmSignInOptions = (AWSCognitoAuthConfirmSignInOptions) obj;
77-
return ObjectsCompat.equals(getMetadata(), authConfirmSignInOptions.getMetadata());
95+
return ObjectsCompat.equals(getMetadata(), authConfirmSignInOptions.getMetadata()) &&
96+
ObjectsCompat.equals(getUserAttributes(), authConfirmSignInOptions.getUserAttributes());
7897
}
7998
}
8099

81100
@Override
82101
public String toString() {
83102
return "AWSCognitoAuthConfirmSignInOptions{" +
84-
"metadata=" + metadata +
103+
"userAttributes=" + getUserAttributes() +
104+
", metadata=" + getMetadata() +
85105
'}';
86106
}
87107

@@ -90,13 +110,15 @@ public String toString() {
90110
*/
91111
public static final class CognitoBuilder extends Builder<CognitoBuilder> {
92112
private Map<String, String> metadata;
113+
private List<AuthUserAttribute> userAttributes;
93114

94115
/**
95116
* Constructor for the builder.
96117
*/
97118
public CognitoBuilder() {
98119
super();
99120
this.metadata = new HashMap<>();
121+
this.userAttributes = new ArrayList<>();
100122
}
101123

102124
/**
@@ -121,14 +143,29 @@ public CognitoBuilder metadata(@NonNull Map<String, String> metadata) {
121143
return getThis();
122144
}
123145

146+
/**
147+
* Set the userAttributes field for the object being built.
148+
* @param userAttributes A list of additional user attributes which should be
149+
* * associated with this user on confirmSignIn.
150+
* @return the instance of the builder.
151+
*/
152+
@NonNull
153+
public CognitoBuilder userAttributes(@NonNull List<AuthUserAttribute> userAttributes) {
154+
Objects.requireNonNull(userAttributes);
155+
this.userAttributes.clear();
156+
this.userAttributes.addAll(userAttributes);
157+
return getThis();
158+
}
159+
124160
/**
125161
* Construct and return the object with the values set in the builder.
126162
* @return a new instance of AWSCognitoAuthConfirmSignInOptions with the values specified in the builder.
127163
*/
128164
@NonNull
129165
public AWSCognitoAuthConfirmSignInOptions build() {
130166
return new AWSCognitoAuthConfirmSignInOptions(
131-
Immutable.of(metadata));
167+
Immutable.of(metadata),
168+
Immutable.of(userAttributes));
132169
}
133170
}
134171
}

aws-auth-cognito/src/test/java/com/amplifyframework/auth/cognito/AuthComponentTest.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -395,14 +395,14 @@ public void confirmSignIn() throws AuthException {
395395
}).when(mobileClient).getTokens(any());
396396

397397
doAnswer(invocation -> {
398-
Callback<SignInResult> callback = invocation.getArgument(2);
398+
Callback<SignInResult> callback = invocation.getArgument(3);
399399
callback.onResult(amcResult);
400400
return null;
401-
}).when(mobileClient).confirmSignIn(any(String.class), any(), (Callback<SignInResult>) any());
401+
}).when(mobileClient).confirmSignIn(any(String.class), any(), any(), (Callback<SignInResult>) any());
402402

403403
AuthSignInResult result = synchronousAuth.confirmSignIn(CONFIRMATION_CODE);
404404
validateSignInResult(result, true, AuthSignInStep.DONE);
405-
verify(mobileClient).confirmSignIn(eq(CONFIRMATION_CODE), any(), (Callback<SignInResult>) any());
405+
verify(mobileClient).confirmSignIn(eq(CONFIRMATION_CODE), any(), any(), (Callback<SignInResult>) any());
406406
}
407407

408408
/**
@@ -425,8 +425,13 @@ public void confirmSignInWithOptions() throws AuthException {
425425
Tokens tokensResult = new Tokens(ACCESS_TOKEN, ID_TOKEN, REFRESH_TOKEN);
426426
AWSCognitoAuthConfirmSignInOptions.CognitoBuilder options = AWSCognitoAuthConfirmSignInOptions.builder();
427427
Map<String, String> metadata = new HashMap<String, String>();
428+
AuthUserAttribute attribute = new AuthUserAttribute(AuthUserAttributeKey.email(), "[email protected]");
429+
List<AuthUserAttribute> attributes = Collections.singletonList(attribute);
430+
Map<String, String> attributeMap = Collections.singletonMap("email", "[email protected]");
431+
428432
metadata.put("key", "value");
429433
options.metadata(metadata);
434+
options.userAttributes(attributes);
430435
AWSCognitoAuthConfirmSignInOptions builtOptions = options.build();
431436

432437
doAnswer(invocation -> {
@@ -436,14 +441,15 @@ public void confirmSignInWithOptions() throws AuthException {
436441
}).when(mobileClient).getTokens(any());
437442

438443
doAnswer(invocation -> {
439-
Callback<SignInResult> callback = invocation.getArgument(2);
444+
Callback<SignInResult> callback = invocation.getArgument(3);
440445
callback.onResult(amcResult);
441446
return null;
442-
}).when(mobileClient).confirmSignIn(any(String.class), any(), (Callback<SignInResult>) any());
447+
}).when(mobileClient).confirmSignIn(any(String.class), any(), any(), (Callback<SignInResult>) any());
443448

444449
AuthSignInResult result = synchronousAuth.confirmSignIn(CONFIRMATION_CODE, builtOptions);
445450
validateSignInResult(result, true, AuthSignInStep.DONE);
446-
verify(mobileClient).confirmSignIn(eq(CONFIRMATION_CODE), eq(metadata), (Callback<SignInResult>) any());
451+
verify(mobileClient)
452+
.confirmSignIn(eq(CONFIRMATION_CODE), eq(metadata), eq(attributeMap), (Callback<SignInResult>) any());
447453
}
448454

449455
/**

0 commit comments

Comments
 (0)