Search in sources :

Example 1 with Callback

use of com.amazonaws.mobile.client.Callback in project amplify-android by aws-amplify.

the class SynchronousMobileClient method initialize.

/**
 * Initialize the client for use, in a synchronous way, by delegating to
 * {@link AWSMobileClient#initialize(Context, Callback)}.
 * @param context An Android Context
 * @param awsConfiguration custom AWS configuration to use for initializing Mobile Client
 * @return The result received by {@link AWSMobileClient#initialize(Context, Callback)}, if successful
 * @throws MobileClientException A wrapped form of the error received by the async callback.
 */
@NonNull
public UserStateDetails initialize(@NonNull Context context, @NonNull AWSConfiguration awsConfiguration) throws MobileClientException {
    Objects.requireNonNull(context);
    Objects.requireNonNull(awsConfiguration);
    final UserStateDetails userStateDetails;
    try {
        userStateDetails = Await.<UserStateDetails, Exception>result((onResult, onError) -> {
            Callback<UserStateDetails> callback = DelegatingCallback.with(onResult, onError);
            awsMobileClient.initialize(context, awsConfiguration, callback);
        });
    } catch (Exception initializationError) {
        throw new MobileClientException("Failed to initialize Mobile Client", initializationError);
    }
    return Objects.requireNonNull(userStateDetails);
}
Also used : Objects(java.util.Objects) Context(android.content.Context) Consumer(com.amplifyframework.core.Consumer) Nullable(androidx.annotation.Nullable) Callback(com.amazonaws.mobile.client.Callback) NonNull(androidx.annotation.NonNull) Await(com.amplifyframework.testutils.Await) UserStateDetails(com.amazonaws.mobile.client.UserStateDetails) SignInResult(com.amazonaws.mobile.client.results.SignInResult) AWSMobileClient(com.amazonaws.mobile.client.AWSMobileClient) ApplicationProvider(androidx.test.core.app.ApplicationProvider) AWSConfiguration(com.amazonaws.mobile.config.AWSConfiguration) Callback(com.amazonaws.mobile.client.Callback) UserStateDetails(com.amazonaws.mobile.client.UserStateDetails) NonNull(androidx.annotation.NonNull)

Example 2 with Callback

use of com.amazonaws.mobile.client.Callback 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");
    }
}
Also used : NonNull(androidx.annotation.NonNull) AuthException(com.amplifyframework.auth.AuthException) AuthProvider(com.amplifyframework.auth.AuthProvider) UserStateDetails(com.amazonaws.mobile.client.UserStateDetails) AWSCognitoAuthConfirmResetPasswordOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmResetPasswordOptions) AuthConfirmResetPasswordOptions(com.amplifyframework.auth.options.AuthConfirmResetPasswordOptions) AuthSignUpOptions(com.amplifyframework.auth.options.AuthSignUpOptions) JSONException(org.json.JSONException) AuthDevice(com.amplifyframework.auth.AuthDevice) AuthNextUpdateAttributeStep(com.amplifyframework.auth.result.step.AuthNextUpdateAttributeStep) AuthClient(com.amazonaws.mobileconnectors.cognitoauth.AuthClient) Map(java.util.Map) AuthPlugin(com.amplifyframework.auth.AuthPlugin) HubEvent(com.amplifyframework.hub.HubEvent) AuthCodeDeliveryDetails(com.amplifyframework.auth.AuthCodeDeliveryDetails) AuthResendSignUpCodeOptions(com.amplifyframework.auth.options.AuthResendSignUpCodeOptions) AuthNextSignInStep(com.amplifyframework.auth.result.step.AuthNextSignInStep) AuthConfirmSignUpOptions(com.amplifyframework.auth.options.AuthConfirmSignUpOptions) AuthResetPasswordOptions(com.amplifyframework.auth.options.AuthResetPasswordOptions) AuthUpdateAttributeStep(com.amplifyframework.auth.result.step.AuthUpdateAttributeStep) CountDownLatch(java.util.concurrent.CountDownLatch) Nullable(androidx.annotation.Nullable) AuthResetPasswordResult(com.amplifyframework.auth.result.AuthResetPasswordResult) AuthNextResetPasswordStep(com.amplifyframework.auth.result.step.AuthNextResetPasswordStep) SignInUIOptions(com.amazonaws.mobile.client.SignInUIOptions) UserState(com.amazonaws.mobile.client.UserState) AuthSignInOptions(com.amplifyframework.auth.options.AuthSignInOptions) AuthChannelEventName(com.amplifyframework.auth.AuthChannelEventName) AuthUserAttributeKey(com.amplifyframework.auth.AuthUserAttributeKey) AuthSignUpResult(com.amplifyframework.auth.result.AuthSignUpResult) AuthSession(com.amplifyframework.auth.AuthSession) Device(com.amazonaws.mobile.client.results.Device) ArrayList(java.util.ArrayList) SignUpResult(com.amazonaws.mobile.client.results.SignUpResult) AuthSessionResult(com.amplifyframework.auth.result.AuthSessionResult) AuthProviderConverter(com.amplifyframework.auth.cognito.util.AuthProviderConverter) AWSCognitoAuthConfirmSignUpOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmSignUpOptions) AuthWebUISignInOptions(com.amplifyframework.auth.options.AuthWebUISignInOptions) Tokens(com.amazonaws.mobile.client.results.Tokens) Action(com.amplifyframework.core.Action) AWSMobileClient(com.amazonaws.mobile.client.AWSMobileClient) SignInState(com.amazonaws.mobile.client.results.SignInState) AuthUserAttribute(com.amplifyframework.auth.AuthUserAttribute) AWSCognitoAuthUpdateUserAttributeOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthUpdateUserAttributeOptions) AuthSignUpStep(com.amplifyframework.auth.result.step.AuthSignUpStep) AmplifyException(com.amplifyframework.AmplifyException) SignOutOptions(com.amazonaws.mobile.client.SignOutOptions) AuthSignOutOptions(com.amplifyframework.auth.options.AuthSignOutOptions) UserAgent(com.amplifyframework.util.UserAgent) AuthResetPasswordStep(com.amplifyframework.auth.result.step.AuthResetPasswordStep) AWSConfiguration(com.amazonaws.mobile.config.AWSConfiguration) JSONObject(org.json.JSONObject) AuthResendUserAttributeConfirmationCodeOptions(com.amplifyframework.auth.options.AuthResendUserAttributeConfirmationCodeOptions) SignInStateConverter(com.amplifyframework.auth.cognito.util.SignInStateConverter) AuthUser(com.amplifyframework.auth.AuthUser) AuthSignInStep(com.amplifyframework.auth.result.step.AuthSignInStep) HubChannel(com.amplifyframework.hub.HubChannel) AWSCognitoAuthWebUISignInOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthWebUISignInOptions) SignInResult(com.amazonaws.mobile.client.results.SignInResult) Objects(java.util.Objects) ListDevicesResult(com.amazonaws.mobile.client.results.ListDevicesResult) List(java.util.List) Callback(com.amazonaws.mobile.client.Callback) CognitoJWTParser(com.amazonaws.mobileconnectors.cognitoidentityprovider.util.CognitoJWTParser) AWSCognitoAuthResetPasswordOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthResetPasswordOptions) AuthUpdateUserAttributesOptions(com.amplifyframework.auth.options.AuthUpdateUserAttributesOptions) UserCodeDeliveryDetails(com.amazonaws.mobile.client.results.UserCodeDeliveryDetails) AuthNextSignUpStep(com.amplifyframework.auth.result.step.AuthNextSignUpStep) AWSCognitoAuthSignInOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthSignInOptions) LogFactory(com.amazonaws.logging.LogFactory) Context(android.content.Context) NotAuthorizedException(com.amazonaws.services.cognitoidentityprovider.model.NotAuthorizedException) AuthUpdateUserAttributeOptions(com.amplifyframework.auth.options.AuthUpdateUserAttributeOptions) HostedUIOptions(com.amazonaws.mobile.client.HostedUIOptions) AWSCognitoAuthResendSignUpCodeOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthResendSignUpCodeOptions) Intent(android.content.Intent) HashMap(java.util.HashMap) ForgotPasswordResult(com.amazonaws.mobile.client.results.ForgotPasswordResult) AtomicReference(java.util.concurrent.atomic.AtomicReference) ForgotPasswordState(com.amazonaws.mobile.client.results.ForgotPasswordState) AWSCognitoAuthConfirmSignInOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmSignInOptions) Consumer(com.amplifyframework.core.Consumer) AuthSignInResult(com.amplifyframework.auth.result.AuthSignInResult) CognitoAuthExceptionConverter(com.amplifyframework.auth.cognito.util.CognitoAuthExceptionConverter) AuthUpdateAttributeResult(com.amplifyframework.auth.result.AuthUpdateAttributeResult) AWSCognitoAuthUpdateUserAttributesOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthUpdateUserAttributesOptions) Amplify(com.amplifyframework.core.Amplify) AuthFlowType(com.amplifyframework.auth.cognito.options.AuthFlowType) AuthConfirmSignInOptions(com.amplifyframework.auth.options.AuthConfirmSignInOptions) AuthNavigationException(com.amazonaws.mobileconnectors.cognitoauth.exceptions.AuthNavigationException) TimeUnit(java.util.concurrent.TimeUnit) AWSCognitoAuthResendUserAttributeConfirmationCodeOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthResendUserAttributeConfirmationCodeOptions) AWSCognitoAuthSignOutOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthSignOutOptions) Activity(android.app.Activity) VisibleForTesting(androidx.annotation.VisibleForTesting) AWSCognitoAuthSignUpOptions(com.amplifyframework.auth.cognito.options.AWSCognitoAuthSignUpOptions) Collections(java.util.Collections) JSONException(org.json.JSONException) AuthException(com.amplifyframework.auth.AuthException) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) AWSConfiguration(com.amazonaws.mobile.config.AWSConfiguration) UserStateDetails(com.amazonaws.mobile.client.UserStateDetails) AuthException(com.amplifyframework.auth.AuthException) JSONException(org.json.JSONException) AmplifyException(com.amplifyframework.AmplifyException) NotAuthorizedException(com.amazonaws.services.cognitoidentityprovider.model.NotAuthorizedException) AuthNavigationException(com.amazonaws.mobileconnectors.cognitoauth.exceptions.AuthNavigationException) JSONObject(org.json.JSONObject)

Aggregations

Context (android.content.Context)2 NonNull (androidx.annotation.NonNull)2 Nullable (androidx.annotation.Nullable)2 AWSMobileClient (com.amazonaws.mobile.client.AWSMobileClient)2 Callback (com.amazonaws.mobile.client.Callback)2 UserStateDetails (com.amazonaws.mobile.client.UserStateDetails)2 SignInResult (com.amazonaws.mobile.client.results.SignInResult)2 AWSConfiguration (com.amazonaws.mobile.config.AWSConfiguration)2 Consumer (com.amplifyframework.core.Consumer)2 Objects (java.util.Objects)2 Activity (android.app.Activity)1 Intent (android.content.Intent)1 VisibleForTesting (androidx.annotation.VisibleForTesting)1 ApplicationProvider (androidx.test.core.app.ApplicationProvider)1 LogFactory (com.amazonaws.logging.LogFactory)1 HostedUIOptions (com.amazonaws.mobile.client.HostedUIOptions)1 SignInUIOptions (com.amazonaws.mobile.client.SignInUIOptions)1 SignOutOptions (com.amazonaws.mobile.client.SignOutOptions)1 UserState (com.amazonaws.mobile.client.UserState)1 Device (com.amazonaws.mobile.client.results.Device)1