use of com.amplifyframework.auth.AuthException in project amplify-android by aws-amplify.
the class AWSCognitoAuthPlugin method updateUserAttributes.
@Override
public void updateUserAttributes(@NonNull List<AuthUserAttribute> attributes, @NonNull AuthUpdateUserAttributesOptions options, @NonNull Consumer<Map<AuthUserAttributeKey, AuthUpdateAttributeResult>> onSuccess, @NonNull Consumer<AuthException> onError) {
final Map<String, String> clientMetadata = new HashMap<>();
if (options instanceof AWSCognitoAuthUpdateUserAttributesOptions) {
AWSCognitoAuthUpdateUserAttributesOptions cognitoOptions = (AWSCognitoAuthUpdateUserAttributesOptions) options;
clientMetadata.putAll(cognitoOptions.getMetadata());
}
Map<String, String> attributesMap = new HashMap<>();
for (AuthUserAttribute attribute : attributes) {
attributesMap.put(attribute.getKey().getKeyString(), attribute.getValue());
}
awsMobileClient.updateUserAttributes(attributesMap, clientMetadata, new Callback<List<UserCodeDeliveryDetails>>() {
@Override
public void onResult(List<UserCodeDeliveryDetails> result) {
Map<String, UserCodeDeliveryDetails> codeDetailsMap = new HashMap<>();
Map<AuthUserAttributeKey, AuthUpdateAttributeResult> resultMap = new HashMap<>();
for (UserCodeDeliveryDetails details : result) {
codeDetailsMap.put(details.getAttributeName(), details);
}
for (String attributeKey : attributesMap.keySet()) {
if (codeDetailsMap.containsKey(attributeKey)) {
resultMap.put(AuthUserAttributeKey.custom(attributeKey), new AuthUpdateAttributeResult(true, new AuthNextUpdateAttributeStep(AuthUpdateAttributeStep.CONFIRM_ATTRIBUTE_WITH_CODE, Collections.emptyMap(), convertCodeDeliveryDetails(codeDetailsMap.get(attributeKey)))));
} else {
resultMap.put(AuthUserAttributeKey.custom(attributeKey), new AuthUpdateAttributeResult(true, new AuthNextUpdateAttributeStep(AuthUpdateAttributeStep.DONE, Collections.emptyMap(), null)));
}
}
onSuccess.accept(resultMap);
}
@Override
public void onError(Exception error) {
onError.accept(new AuthException("Failed to update user attributes", error, "See attached exception for more details"));
}
});
}
use of com.amplifyframework.auth.AuthException in project amplify-android by aws-amplify.
the class AWSCognitoAuthPlugin method configure.
@Override
public void configure(@NonNull JSONObject pluginConfiguration, @NonNull Context context) throws AuthException {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicReference<Exception> asyncException = new AtomicReference<>();
JSONObject mobileClientConfig;
LogFactory.setLevel(LogFactory.Level.OFF);
try {
mobileClientConfig = new JSONObject(pluginConfiguration.toString());
mobileClientConfig.put("UserAgentOverride", UserAgent.string());
} catch (JSONException exception) {
throw new AuthException("Failed to set user agent string", exception, AmplifyException.REPORT_BUG_TO_AWS_SUGGESTION);
}
awsMobileClient.initialize(context, new AWSConfiguration(mobileClientConfig), new Callback<UserStateDetails>() {
@Override
public void onResult(UserStateDetails result) {
switch(result.getUserState()) {
case GUEST:
case SIGNED_OUT:
lastEvent = AuthChannelEventName.SIGNED_OUT;
userId = null;
break;
case SIGNED_IN:
lastEvent = AuthChannelEventName.SIGNED_IN;
userId = getUserIdFromToken(result.getDetails().get(MOBILE_CLIENT_TOKEN_KEY));
break;
case SIGNED_OUT_USER_POOLS_TOKENS_INVALID:
case SIGNED_OUT_FEDERATED_TOKENS_INVALID:
lastEvent = AuthChannelEventName.SESSION_EXPIRED;
userId = getUserIdFromToken(result.getDetails().get(MOBILE_CLIENT_TOKEN_KEY));
break;
default:
userId = null;
lastEvent = null;
}
// Set up a listener to asynchronously update the user id if the user state changes in the future
awsMobileClient.addUserStateListener(userStateDetails -> {
switch(userStateDetails.getUserState()) {
case SIGNED_OUT:
case GUEST:
userId = null;
if (lastEvent != AuthChannelEventName.SIGNED_OUT) {
lastEvent = AuthChannelEventName.SIGNED_OUT;
Amplify.Hub.publish(HubChannel.AUTH, HubEvent.create(AuthChannelEventName.SIGNED_OUT));
}
break;
case SIGNED_IN:
fetchAndSetUserId(() -> {
if (lastEvent != AuthChannelEventName.SIGNED_IN) {
lastEvent = AuthChannelEventName.SIGNED_IN;
Amplify.Hub.publish(HubChannel.AUTH, HubEvent.create(AuthChannelEventName.SIGNED_IN));
}
});
break;
case SIGNED_OUT_FEDERATED_TOKENS_INVALID:
case SIGNED_OUT_USER_POOLS_TOKENS_INVALID:
fetchAndSetUserId(() -> {
/* No response needed */
});
if (lastEvent != AuthChannelEventName.SESSION_EXPIRED) {
lastEvent = AuthChannelEventName.SESSION_EXPIRED;
Amplify.Hub.publish(HubChannel.AUTH, HubEvent.create(AuthChannelEventName.SESSION_EXPIRED));
}
break;
default:
userId = null;
}
});
latch.countDown();
}
@Override
public void onError(Exception error) {
asyncException.set(error);
latch.countDown();
}
});
try {
if (latch.await(SECONDS_BEFORE_TIMEOUT, TimeUnit.SECONDS)) {
if (asyncException.get() != null) {
throw new AuthException("Failed to instantiate AWSMobileClient", asyncException.get(), "See attached exception for more details");
}
return;
} else {
throw new AuthException("Failed to instantiate AWSMobileClient within " + SECONDS_BEFORE_TIMEOUT + " seconds", "Check network connectivity");
}
} catch (InterruptedException error) {
throw new AuthException("Failed to instantiate AWSMobileClient", error, "See attached exception for more details");
}
}
use of com.amplifyframework.auth.AuthException in project amplify-android by aws-amplify.
the class AWSCognitoAuthPlugin method confirmSignUp.
@Override
public void confirmSignUp(@NonNull String username, @NonNull String confirmationCode, @NonNull AuthConfirmSignUpOptions options, @NonNull final Consumer<AuthSignUpResult> onSuccess, @NonNull final Consumer<AuthException> onException) {
final Map<String, String> clientMetadata = new HashMap<>();
if (options instanceof AWSCognitoAuthConfirmSignUpOptions) {
AWSCognitoAuthConfirmSignUpOptions cognitoOptions = (AWSCognitoAuthConfirmSignUpOptions) options;
clientMetadata.putAll(cognitoOptions.getClientMetadata());
}
awsMobileClient.confirmSignUp(username, confirmationCode, clientMetadata, new Callback<SignUpResult>() {
@Override
public void onResult(SignUpResult result) {
onSuccess.accept(convertSignUpResult(result, username));
}
@Override
public void onError(Exception error) {
onException.accept(CognitoAuthExceptionConverter.lookup(error, "Confirm sign up failed"));
}
});
}
use of com.amplifyframework.auth.AuthException 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"));
}
}
});
}
use of com.amplifyframework.auth.AuthException in project amplify-android by aws-amplify.
the class AWSCognitoAuthPlugin method updateUserAttribute.
@Override
public void updateUserAttribute(@NonNull AuthUserAttribute attribute, @NonNull AuthUpdateUserAttributeOptions options, @NonNull Consumer<AuthUpdateAttributeResult> onSuccess, @NonNull Consumer<AuthException> onError) {
final Map<String, String> clientMetadata = new HashMap<>();
if (options instanceof AWSCognitoAuthUpdateUserAttributeOptions) {
AWSCognitoAuthUpdateUserAttributeOptions cognitoOptions = (AWSCognitoAuthUpdateUserAttributeOptions) options;
clientMetadata.putAll(cognitoOptions.getMetadata());
}
awsMobileClient.updateUserAttributes(Collections.singletonMap(attribute.getKey().getKeyString(), attribute.getValue()), clientMetadata, new Callback<List<UserCodeDeliveryDetails>>() {
@Override
public void onResult(List<UserCodeDeliveryDetails> result) {
if (result.size() == 0) {
onSuccess.accept(new AuthUpdateAttributeResult(true, new AuthNextUpdateAttributeStep(AuthUpdateAttributeStep.DONE, Collections.emptyMap(), null)));
} else {
onSuccess.accept(new AuthUpdateAttributeResult(true, new AuthNextUpdateAttributeStep(AuthUpdateAttributeStep.CONFIRM_ATTRIBUTE_WITH_CODE, Collections.emptyMap(), convertCodeDeliveryDetails(result.get(0)))));
}
}
@Override
public void onError(Exception error) {
onError.accept(new AuthException("Failed to update user attributes", error, "See attached exception for more details"));
}
});
}
Aggregations