use of com.amazonaws.mobile.client.SignInUIOptions in project amplify-android by aws-amplify.
the class AuthComponentTest method signInWithWebUI.
/**
* Tests that the signInWithWebUI method of the Auth wrapper of AWSMobileClient (AMC) calls AMC.showSignIn
* with the proper parameters and converts the returned result to the proper AuthSignInResult.
* @throws AuthException test fails if this gets thrown since method should succeed
*/
@Test
public void signInWithWebUI() throws AuthException {
Map<String, String> additionalInfoMap = Collections.singletonMap("testKey", "testVal");
UserStateDetails userStateResult = new UserStateDetails(UserState.SIGNED_IN, additionalInfoMap);
doAnswer(invocation -> {
Callback<UserStateDetails> callback = invocation.getArgument(2);
callback.onResult(userStateResult);
return null;
}).when(mobileClient).showSignIn(any(), any(), any());
Tokens tokensResult = new Tokens(ACCESS_TOKEN, ID_TOKEN, REFRESH_TOKEN);
doAnswer(invocation -> {
Callback<Tokens> callback = invocation.getArgument(0);
callback.onResult(tokensResult);
return null;
}).when(mobileClient).getTokens(any());
Activity activity = new Activity();
String federationProviderName = "testFedProvider";
String idpIdentifier = "testIdpID";
String browserPackage = "org.mozilla.firefox";
List<String> scopes = Collections.singletonList("scope");
Map<String, String> signInMap = Collections.singletonMap("signInKey", "signInVal");
Map<String, String> signOutMap = Collections.singletonMap("signOutKey", "signOutVal");
Map<String, String> tokensMap = Collections.singletonMap("tokensKey", "tokensVal");
AuthSignInResult result = synchronousAuth.signInWithWebUI(activity, AWSCognitoAuthWebUISignInOptions.builder().federationProviderName(federationProviderName).idpIdentifier(idpIdentifier).scopes(scopes).signInQueryParameters(signInMap).signOutQueryParameters(signOutMap).tokenQueryParameters(tokensMap).browserPackage(browserPackage).build());
assertTrue(result.isSignInComplete());
assertEquals(AuthSignInStep.DONE, result.getNextStep().getSignInStep());
assertEquals(additionalInfoMap, result.getNextStep().getAdditionalInfo());
ArgumentCaptor<SignInUIOptions> optionsCaptor = ArgumentCaptor.forClass(SignInUIOptions.class);
verify(mobileClient).showSignIn(eq(activity), optionsCaptor.capture(), any());
SignInUIOptions signInUIOptions = optionsCaptor.getValue();
HostedUIOptions hostedUIOptions = signInUIOptions.getHostedUIOptions();
assertNotNull(hostedUIOptions);
assertNull(hostedUIOptions.getIdentityProvider());
assertEquals(federationProviderName, hostedUIOptions.getFederationProviderName());
assertEquals(idpIdentifier, hostedUIOptions.getIdpIdentifier());
assertEquals(browserPackage, signInUIOptions.getBrowserPackage());
assertArrayEquals(scopes.toArray(), hostedUIOptions.getScopes());
assertEquals(signInMap, hostedUIOptions.getSignInQueryParameters());
assertEquals(signOutMap, hostedUIOptions.getSignOutQueryParameters());
assertEquals(tokensMap, hostedUIOptions.getTokenQueryParameters());
}
use of com.amazonaws.mobile.client.SignInUIOptions in project amplify-android by aws-amplify.
the class AuthComponentTest method signInWithSocialWebUI.
/**
* Tests that the signInWithSocialWebUI method of the Auth wrapper of AWSMobileClient (AMC) calls AMC.showSignIn
* with the proper parameters and converts the returned result to the proper AuthSignInResult.
* @throws AuthException test fails if this gets thrown since method should succeed
*/
@Test
public void signInWithSocialWebUI() throws AuthException {
Map<String, String> additionalInfoMap = Collections.singletonMap("testKey", "testVal");
UserStateDetails userStateResult = new UserStateDetails(UserState.SIGNED_IN, additionalInfoMap);
doAnswer(invocation -> {
Callback<UserStateDetails> callback = invocation.getArgument(2);
callback.onResult(userStateResult);
return null;
}).when(mobileClient).showSignIn(any(), any(), any());
Tokens tokensResult = new Tokens(ACCESS_TOKEN, ID_TOKEN, REFRESH_TOKEN);
doAnswer(invocation -> {
Callback<Tokens> callback = invocation.getArgument(0);
callback.onResult(tokensResult);
return null;
}).when(mobileClient).getTokens(any());
Activity activity = new Activity();
AuthSignInResult result = synchronousAuth.signInWithSocialWebUI(AuthProvider.facebook(), activity);
assertTrue(result.isSignInComplete());
assertEquals(AuthSignInStep.DONE, result.getNextStep().getSignInStep());
assertEquals(additionalInfoMap, result.getNextStep().getAdditionalInfo());
ArgumentCaptor<SignInUIOptions> optionsCaptor = ArgumentCaptor.forClass(SignInUIOptions.class);
verify(mobileClient).showSignIn(eq(activity), optionsCaptor.capture(), any());
HostedUIOptions hostedUIOptions = optionsCaptor.getValue().getHostedUIOptions();
assertNotNull(hostedUIOptions);
assertEquals("Facebook", hostedUIOptions.getIdentityProvider());
}
use of com.amazonaws.mobile.client.SignInUIOptions in project amplify-android by aws-amplify.
the class AWSCognitoAuthPlugin method signInWithWebUIHelper.
private void signInWithWebUIHelper(@Nullable AuthProvider authProvider, @NonNull Activity callingActivity, @NonNull AuthWebUISignInOptions options, @NonNull Consumer<AuthSignInResult> onSuccess, @NonNull Consumer<AuthException> onException) {
HostedUIOptions.Builder optionsBuilder = HostedUIOptions.builder();
SignInUIOptions.Builder signInUIOptionsBuilder = SignInUIOptions.builder();
if (options != null) {
if (options.getScopes() != null) {
optionsBuilder.scopes(options.getScopes().toArray(new String[options.getScopes().size()]));
}
if (!options.getSignInQueryParameters().isEmpty()) {
optionsBuilder.signInQueryParameters(options.getSignInQueryParameters());
}
if (!options.getSignOutQueryParameters().isEmpty()) {
optionsBuilder.signOutQueryParameters(options.getSignOutQueryParameters());
}
if (!options.getTokenQueryParameters().isEmpty()) {
optionsBuilder.tokenQueryParameters(options.getTokenQueryParameters());
}
if (options instanceof AWSCognitoAuthWebUISignInOptions) {
AWSCognitoAuthWebUISignInOptions cognitoOptions = (AWSCognitoAuthWebUISignInOptions) options;
optionsBuilder.idpIdentifier(cognitoOptions.getIdpIdentifier()).federationProviderName(cognitoOptions.getFederationProviderName());
signInUIOptionsBuilder.browserPackage(cognitoOptions.getBrowserPackage());
}
if (authProvider != null) {
optionsBuilder.identityProvider(AuthProviderConverter.getIdentityProvider(authProvider));
}
}
SignInUIOptions signInUIOptions = signInUIOptionsBuilder.hostedUIOptions(optionsBuilder.build()).build();
awsMobileClient.showSignIn(callingActivity, signInUIOptions, new Callback<UserStateDetails>() {
@Override
public void onResult(UserStateDetails details) {
fetchAndSetUserId(() -> onSuccess.accept(new AuthSignInResult(UserState.SIGNED_IN.equals(details.getUserState()), new AuthNextSignInStep(AuthSignInStep.DONE, details.getDetails(), null))));
}
@Override
public void onError(Exception error) {
if (error instanceof AuthNavigationException) {
onException.accept(new AuthException.UserCancelledException("The user cancelled the sign-in attempt, so it did not complete.", error, "To recover: catch this error, and show the sign-in screen again."));
} else {
onException.accept(new AuthException("Sign-in with web UI failed", error, "See attached exception for more details"));
}
}
});
}
Aggregations