Search in sources :

Example 1 with AWSMobileClient

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

the class AuthComponentTest method getEscapeHatch.

/**
 * Tests that the getEscapeHatch method of the Auth wrapper of AWSMobileClient (AMC) returns the instance of
 * AWSMobileClient held by the plugin.
 */
@Test
public void getEscapeHatch() {
    AWSCognitoAuthPlugin plugin = (AWSCognitoAuthPlugin) authCategory.getPlugin(PLUGIN_KEY);
    AWSMobileClient client = plugin.getEscapeHatch();
    assertEquals(mobileClient, client);
}
Also used : AWSMobileClient(com.amazonaws.mobile.client.AWSMobileClient) Test(org.junit.Test)

Example 2 with AWSMobileClient

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

the class KinesisVideoCredentialsProviderImpl method updateCredentials.

@Override
protected KinesisVideoCredentials updateCredentials() throws KinesisVideoException {
    // Refresh the token first
    log.debug("Refreshing credentials");
    credentialsProvider.refresh();
    // Get the AWS credentials and create Kinesis Video Credentials
    final AWSCredentials awsCredentials = credentialsProvider.getCredentials();
    String sessionToken = null;
    if (awsCredentials instanceof AWSSessionCredentials) {
        final AWSSessionCredentials sessionCredentials = (AWSSessionCredentials) awsCredentials;
        sessionToken = sessionCredentials.getSessionToken();
    }
    Date expiration = KinesisVideoCredentials.CREDENTIALS_NEVER_EXPIRE;
    if (credentialsProvider instanceof CognitoCredentialsProvider) {
        final CognitoCredentialsProvider cognitoCredentialsProvider = (CognitoCredentialsProvider) credentialsProvider;
        expiration = cognitoCredentialsProvider.getSessionCredentialsExpiration();
        log.debug("Refreshed token expiration is %s", expiration);
    } else if (credentialsProvider instanceof AWSMobileClient) {
        AWSMobileClient awsMobileClient = (AWSMobileClient) credentialsProvider;
        try {
            expiration = awsMobileClient.getTokens().getAccessToken().getExpiration();
            log.debug("Refreshed token expiration is %s", expiration);
        } catch (Exception e) {
            throw new KinesisVideoException("Failed to refresh! " + e.getMessage());
        }
    }
    log.debug("Returning %scredentials with expiration %s", sessionToken == null ? "" : "session ", expiration);
    return new KinesisVideoCredentials(awsCredentials.getAWSAccessKeyId(), awsCredentials.getAWSSecretKey(), sessionToken, expiration);
}
Also used : CognitoCredentialsProvider(com.amazonaws.auth.CognitoCredentialsProvider) KinesisVideoCredentials(com.amazonaws.kinesisvideo.auth.KinesisVideoCredentials) AWSSessionCredentials(com.amazonaws.auth.AWSSessionCredentials) AWSMobileClient(com.amazonaws.mobile.client.AWSMobileClient) AWSCredentials(com.amazonaws.auth.AWSCredentials) KinesisVideoException(com.amazonaws.kinesisvideo.common.exception.KinesisVideoException) Date(java.util.Date) KinesisVideoException(com.amazonaws.kinesisvideo.common.exception.KinesisVideoException)

Example 3 with AWSMobileClient

use of com.amazonaws.mobile.client.AWSMobileClient in project hypertrack-live-android by hypertrack.

the class CognitoClient method signIn.

public void signIn(final String email, final String password, @NonNull final Callback callback) {
    final AWSMobileClient awsMobileClient = AWSMobileClient.getInstance();
    awsMobileClient.signIn(email, password, null, new InnerCallback<SignInResult>(callback) {

        @Override
        public void onResult(SignInResult result) {
            sharedHelper.setAccountEmail(email);
            updatePublishableKey(callback);
        }

        @Override
        public void onError(Exception e) {
            awsMobileClient.signIn(email.toLowerCase(), password, null, new InnerCallback<SignInResult>(callback) {

                @Override
                public void onResult(SignInResult result) {
                    sharedHelper.setAccountEmail(email);
                    updatePublishableKey(callback);
                }

                @Override
                public void onError(Exception e) {
                    super.onError(e);
                    signUpEmail = email;
                    signUpPassword = password;
                }
            });
        }
    });
}
Also used : AWSMobileClient(com.amazonaws.mobile.client.AWSMobileClient) JsonSyntaxException(com.google.gson.JsonSyntaxException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) SignInResult(com.amazonaws.mobile.client.results.SignInResult)

Example 4 with AWSMobileClient

use of com.amazonaws.mobile.client.AWSMobileClient 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 5 with AWSMobileClient

use of com.amazonaws.mobile.client.AWSMobileClient 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

AWSMobileClient (com.amazonaws.mobile.client.AWSMobileClient)5 SignInResult (com.amazonaws.mobile.client.results.SignInResult)3 Context (android.content.Context)2 NonNull (androidx.annotation.NonNull)2 Nullable (androidx.annotation.Nullable)2 Callback (com.amazonaws.mobile.client.Callback)2 UserStateDetails (com.amazonaws.mobile.client.UserStateDetails)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 AWSCredentials (com.amazonaws.auth.AWSCredentials)1 AWSSessionCredentials (com.amazonaws.auth.AWSSessionCredentials)1 CognitoCredentialsProvider (com.amazonaws.auth.CognitoCredentialsProvider)1 KinesisVideoCredentials (com.amazonaws.kinesisvideo.auth.KinesisVideoCredentials)1 KinesisVideoException (com.amazonaws.kinesisvideo.common.exception.KinesisVideoException)1 LogFactory (com.amazonaws.logging.LogFactory)1