Skip to content

Commit

Permalink
chore: merge main into notifications (#167)
Browse files Browse the repository at this point in the history
* fix(core): remove unused dynamic nav dependency (#2132)

* fix(datastore): remove typename from ModelMetadata (#2122)

* fix(datastore): remove typename from ModelMetadata

* Test a potential fix

* Test a potential fix

* fix: callbacks not invoked when attached using getTransfer api (#2111)

* fix: listener not invoked when attached using getTransfer api

* address PR comments

* default state to unknown

* add comment

* add comment

* override getRequest in storage operation & make SocketExcpetion retryable

* add nullable annotation

* address nullable request

Co-authored-by: Tyler Roach <[email protected]>

* Prevent attempting to read backed up EncryptedSharedPreferences that are no longer readable (#2113)

* fix(auth): device metadata migration (#2114)

* Number of attributes being too high is not retryable (#2112)

* Number of attributes being too high is not retryable

* Match iOS at not retrying bad request error -- covering multiple 400 errors

* Fix lint

* Fix lint

* Update Kotlin SDK version

Co-authored-by: Thomas Leing <[email protected]>

* Change errors returned on some apis while federated (#2116)

* release: Amplify Android 2.0.0 (#2115)

* release: Amplify Android 2.0.0

* add core-kotlin changelog

* add more info in changelog

* revert unintended change

* remove breaking change for analytics

* fix(datastore): remove typename from ModelMetadata

* fix(datastore): remove typename from ModelMetadata

* remove unneeded file

* small cleanup

* remove print statements

* fix comment

* force tests

* force tests

* force tests

Co-authored-by: Michael Law <[email protected]>
Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Sunil Timalsina <[email protected]>

* chore: Remove deprecated maven plugin (#2137)

* Remove deprecated maven project

* Fix task name grep

* chore: Remove Javadoc tasks (#2139)

* Remove deprecated maven project

* Fix task name grep

* Remove Javadoc tasks

* fix: Change order of updating state in local cache (#2141)

* fix: fix integration test and added logger to integration test (#2143)

* fix: Change order of updating state in local cache

* change order for updating status and add logger to integ tests

* change log level to debug

* Fix for when move to idle state is called twice (#2152)

* Update README.md (#2120)

remove dev-preview APIs note.

* Dengdan stress test (#2153)

* Initial commit

* Work in progress

* finish codes

* change build

* update build

* test excludeStressTest

* Revert "Merge branch 'main' into dengdan-stress-test"

This reverts commit b50840e, reversing
changes made to 3bacf1b.

* remove categories

* remove external changes

* remove external changes

* remove more changes

* Update copyright and refactor

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* linting

* Update StorageStressTest.kt

* Delete StorageStressTest.kt

* Delete amplifyconfigurationupdated.json

* Delete amplifyconfigurationupdated.json

* Update DataStoreStressTest.kt

* Fix(Auth): Sign up if successful should return DONE instead of Confirm sign up (#2130)

* If sign up is successful in the first try return DONE

* Sign up should send DONE if it is successful

* revert jsongenerator cleandir fun

* lint fix

* Feat(Auth Test): Custom party testing for Custom Test without SRP (#2149)

* Adding custom auth test cases

* Updating test cases for Custom Auth to ensure they pass

* lint format

* Fix for phone number

* Recreate all tests

* Unignore storage and pinpoint tests (#2156)

* unignore tests

* extend timeout to 60s

Co-authored-by: Saijad Dhuka <[email protected]>

* feat(Geo): Add Kotlin Geo Facade (#2155)

* Add Kotlin Geo Facade

* Add return docs to the function comments

* Add tests to verify options are passed

* fix: Add missing apis in storage Kotlin & RxJava facade (#2160)

* fix: Add pause, resume api to kotlin and rxJava facade

* add unit tests

* remove irrelevant code changes

* add assertion

* Update DeviceFarm build config (#2168)

* fix: user metadata was persisted empty in the database (#2165)

* fix: usermeta was persisted as empty in the database

* fix compilation error

* fix compilation error

* avoid adding metadata if it is null

* Add Geo Rx Bindings (#2159)

* chore: Re-add storage tests (#2163)

* Readd storage tests

* rename file

* reduce stress

Co-authored-by: Saijad Dhuka <[email protected]>

* Add a network status listener to restart DataStore after the network … (#2148)

* Add a network status listener to restart DataStore after the network comes back online.

* Add Reachability monitor

* working pretty well

* cleanup

* update test

* fix: fix integration test and added logger to integration test (#2143)

* fix: Change order of updating state in local cache

* change order for updating status and add logger to integ tests

* change log level to debug

* Fix for when move to idle state is called twice (#2152)

* Update README.md (#2120)

remove dev-preview APIs note.

* Dengdan stress test (#2153)

* Initial commit

* Work in progress

* finish codes

* change build

* update build

* test excludeStressTest

* Revert "Merge branch 'main' into dengdan-stress-test"

This reverts commit b50840e, reversing
changes made to 3bacf1b.

* remove categories

* remove external changes

* remove external changes

* remove more changes

* Update copyright and refactor

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* Update StorageStressTest.kt

* linting

* Update StorageStressTest.kt

* Delete StorageStressTest.kt

* Delete amplifyconfigurationupdated.json

* Delete amplifyconfigurationupdated.json

* Update DataStoreStressTest.kt

* force build

* force build

* force build

* fix typo

* Add a network status listener to restart DataStore after the network comes back online.

* Add Reachability monitor

* working pretty well

* cleanup

* update test

* force build

* force build

* force build

* fix typo

* reply to comments

* Add testImplementation lin eto compile tests correctly in intellij

* reply to comments

* make ReachabilityMonitor expose the observable

* Update datastore plugin to use the reachability monitor

* cleanup

* cleanup

* cleanup

* force tests

Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: gpanshu <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: dengdan154 <[email protected]>

* chore: Upgrade Gradle, AGP, and KtLint (#2172)

* Remove deprecated maven project

* Fix task name grep

* Upgrade Gradle to 7.5.1

* Upgrade AGP

* Add VERSION_NAME back to BuildConfig

This was removed for library projects in AGP 4.1. We may consider renaming this in the future to disambiguate the Amplify version and the application version.

* Update KtLint and fix all new lint errors

* Use JDK11 on codebuild

* Use JDK11 in workflows

* Upgrade compileSdkVersion to 31

* Try using custom commands to install Android SDK 31

* Update device farm buildspec with manual Android SDK install

* Fix additional ktlint errors

* Upgrade Desugar to JDK11-compatible version

* Upgrade Robolectric

* Set locale explicitly to match expectation

* fix(geo): Increase Geo timeout so that it runs successfully on a Pixel 3a XL (#2177)

* Increase Geo timeout so that it runs successfully on a Pixel 3a XL

* Fix lint

Co-authored-by: Thomas Leing <[email protected]>

* Add a buildspec file for nightly tests (#2180)

* Chore(Auth): Implementation of the custom auth with SRP parity testing use case (#2167)

* Added the test case for custom auth with SRP

* ktlint

* release: Amplify Android 2.1.0 (manually created) (#2185)

Co-authored-by: Thomas Leing <[email protected]>

* chore: Add PR checker workflow (#2188)

* fix(Auth): Fix for when loading credentials the success/error is fired twice (#2184)

* chore: update changelog for Amplify Android 2.1.0 (#2193)

* feat(Auth): Overriding sign in when the State machine is already in the signing in state (#2187)

* chore: fix inconsistency with endpointWithAttributes test (#2196)

* chore: update changelog for v2.1.0 (#2198)

* chore: replace md5 with sha-256 for file data validation (#2199)

* chore: Remove unused version and group properties (#2186)

* chore: Add a label that will disable the PR title check (#2195)

Co-authored-by: gpanshu <[email protected]>

* chore: add release tag to PR title checker config (#2194)

Co-authored-by: Matt Creaser <[email protected]>

* fix(datastore): Fix lock contention issue when running DataStore.start() from the callback of DataStore.stop() (#2208)

Co-authored-by: Michael Schneider <[email protected]>

* chore: Add group and version back to all subprojects (#2213)

* chore: Remove the release-kotlin_v block from prepare release script (#2231)

* fix(core): Remove unused dependencies (#2207)

Co-authored-by: Matt Creaser <[email protected]>

* chore: Modify the bump_version branch name to be specific to the base branch (#2240)

* fix(geo): Bump MapLibre SDK to 9.6.0 (#2254)

* release: Amplify Android 2.1.1 (#2257)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* fix(analytics): Remove test dependencies from implementation configuration (#2253)

* chore: Ignore clearStopsSyncAndDeletesDatabase test (#2262)

* fix(auth): Fix Authorization header for HostedUI fetchToken when appSecret is used (#2264)

* chore: Supply base_branch when calling `create_next_release_pr` lane (#2245)

* chore: Update PR template to include security checklist item (#2251)

* feat(auth): add required hash param to cognito api calls (#2266)

Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: AWS Mobile SDK Bot <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>

* feat(datastore): Add recoverability improvements (#2201)

Co-authored-by: Matt Creaser <[email protected]>

* feat(auth): Added parity test for fetchDevices,rememberDevice,forgetDevice and fetchUserAttributes (#2174)

Co-authored-by: Sunil Timalsina <[email protected]>
Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: gpanshu <[email protected]>
Co-authored-by: AWS Mobile SDK Bot <[email protected]>

* release: Amplify Android 2.2.0 (#2269)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* chore: Convert build.gradle files to Kotlin (#2183)

* Convert build.gradle files to Kotlin

* Fix missing test dependency

* Update copyright year

* chore: Set the signing information in project extras (#2277)

* fix(auth): Moving credential provider to main (#2273)

* chore(analytics): Simplify error code checking, uniformly across platforms (#2274)

Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>

* feat(auth): added kover plugin for coverage (#2267)

Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: gpanshu <[email protected]>

* release: Amplify Android 2.2.1 (#2285)

Co-authored-by: amplify-android-dev+ghops <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>

* chore: Remove circleci configuration file (#2279)

Co-authored-by: gpanshu <[email protected]>

* fix(auth): fix npe in initialize fetch auth session (#2284)

Co-authored-by: Banji Jolaoso <[email protected]>

* fix(auth): Fix confirm signin when incorrect MFA code is entered (#2286)

* release: Amplify Android 2.2.2 (#2292)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* chore: Fix using amplify-android in a composite build (#2294)

* chore: update device farm configuration for nightly build (#2281)

* chore: remove buildspec files (#2308)

* chore: remove amplify-data from codeowners (#2252)

Co-authored-by: Saijad Dhuka <[email protected]>

* fix(datastore): Fix aliasing of column names (#2312)

* feat(storage): Add support for S3 acceleration mode (#2304)

* feat(aws-datastore): Make the reachability component configurable (#2307)

Signed-off-by: Manuel Iglesias <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>

* release: Amplify Android 2.3.0 (#2323)

Co-authored-by: amplify-android-dev+ghops <[email protected]>

* feat(aws-api,aws-datastore): WebSocket improvements (#2283)

Signed-off-by: Manuel Iglesias <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>

* chore(auth): Use restricted API to surface the JSON used to configure the Auth category (#2311)

Co-authored-by: Thomas Leing <[email protected]>

* chore: Remove incorrect Developer Preview label (#2328)

* fix(auth): Delete user invalid state fixes (#2326)

Co-authored-by: Anshul Gupta <[email protected]>
Co-authored-by: gpanshu <[email protected]>

* Restore publishing sources jar (#2329)

Co-authored-by: Thomas Leing <[email protected]>

* release: Amplify Android 2.3.0 (#2330)

Co-authored-by: amplify-android-dev+ghops <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>

* feat(auth): Add aws-core and AWSCredentialsProvider (#2316)

Co-authored-by: Tim Schmelter <[email protected]>
Co-authored-by: Erica Eaton <[email protected]>
Co-authored-by: Divyesh Chitroda <[email protected]>

---------

Signed-off-by: Manuel Iglesias <[email protected]>
Co-authored-by: Erica Eaton <[email protected]>
Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Michael Law <[email protected]>
Co-authored-by: Michael Schneider <[email protected]>
Co-authored-by: Saijad Dhuka <[email protected]>
Co-authored-by: Tyler Roach <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Thomas Leing <[email protected]>
Co-authored-by: Sunil Timalsina <[email protected]>
Co-authored-by: Matt Creaser <[email protected]>
Co-authored-by: gpanshu <[email protected]>
Co-authored-by: dengdan154 <[email protected]>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: amplify-android-dev+ghops <[email protected]>
Co-authored-by: banji180 <[email protected]>
Co-authored-by: Banji Jolaoso <[email protected]>
Co-authored-by: AWS Mobile SDK Bot <[email protected]>
Co-authored-by: Manuel Iglesias <[email protected]>
Co-authored-by: Dane Pilcher <[email protected]>
Co-authored-by: Anshul Gupta <[email protected]>
Co-authored-by: Tim Schmelter <[email protected]>
  • Loading branch information
22 people authored Mar 14, 2023
1 parent 58ca09d commit 09dc518
Show file tree
Hide file tree
Showing 50 changed files with 430 additions and 150 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,14 @@
### Features
- **storage:** Add support for S3 acceleration mode ([#2304](https://github.com/aws-amplify/amplify-android/issues/2304))
- **aws-datastore:** Make the reachability component configurable ([#2307](https://github.com/aws-amplify/amplify-android/issues/2307))
- **aws-api,aws-datastore:** WebSocket improvements ([#2283](https://github.com/aws-amplify/amplify-android/issues/2283))

### Bug Fixes
- **datastore:** Fix aliasing of column names ([#2312](https://github.com/aws-amplify/amplify-android/issues/2312))
- **auth:** Delete user invalid state fixes ([#2326](https://github.com/aws-amplify/amplify-android/issues/2326))

### Miscellaneous
- Restore publishing sources jar ([#2329](https://github.com/aws-amplify/amplify-android/issues/2329))

[See all changes between 2.2.2 and 2.3.0](https://github.com/aws-amplify/amplify-android/compare/release_v2.2.2...release_v2.3.0)

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Amplify for Android (Developer Preview)
## Amplify for Android
<img src="https://s3.amazonaws.com/aws-mobile-hub-images/aws-amplify-logo.png" alt="AWS Amplify" width="550">

[![DiscordChat](https://img.shields.io/discord/308323056592486420?logo=discord)](https://discord.gg/jWVbPfC)
Expand Down
1 change: 1 addition & 0 deletions annotations/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
46 changes: 46 additions & 0 deletions annotations/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

plugins {
id("com.android.library")
id("kotlin-android")
}

apply(from = rootProject.file("configuration/checkstyle.gradle"))
apply(from = rootProject.file("configuration/publishing.gradle"))

group = properties["POM_GROUP"].toString()

android {
kotlinOptions {
moduleName = "com.amplifyframework.annotations"
}
}

dependencies {
implementation(dependency.kotlin.stdlib)
}

afterEvaluate {
// Disables this warning:
// warning: listOf(classfile) MethodParameters attribute
// introduced in version 52.0 class files is ignored in
// version 51.0 class files
// Root project has -Werror, so this warning
// would fail the build, otherwise.
tasks.withType<JavaCompile>().configureEach {
options.compilerArgs.add("-Xlint:-classfile")
}
}
4 changes: 4 additions & 0 deletions annotations/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
POM_ARTIFACT_ID=annotations
POM_NAME=Amplify Framework for Android - Annotations
POM_DESCRIPTION=Amplify Framework for Android - Annotations for AWS Amplify Libraries
POM_PACKAGING=aar
20 changes: 20 additions & 0 deletions annotations/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License").
You may not use this file except in compliance with the License.
A copy of the License is located at
http://aws.amazon.com/apache2.0
or in the "license" file accompanying this file. This file is distributed
on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
express or implied. See the License for the specific language governing
permissions and limitations under the License.
-->

<manifest package="com.amplifyframework.annotations"
xmlns:android="http://schemas.android.com/apk/res/android">
</manifest>

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/*
* Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/

package com.amplifyframework.annotations

/**
* API marked with this annotation is internal to Amplify, and it is not intended to be used outside.
* It could be modified or removed without any notice.
*
* We strongly recommend to not use such API.
*/
@Suppress("DEPRECATION")
@RequiresOptIn(
level = RequiresOptIn.Level.WARNING,
message = "This API is internal to Amplify and should not be used. It could be removed or changed without notice.",
)
@Target(
AnnotationTarget.CLASS,
AnnotationTarget.TYPEALIAS,
AnnotationTarget.FUNCTION,
AnnotationTarget.PROPERTY,
AnnotationTarget.FIELD,
AnnotationTarget.CONSTRUCTOR,
)
public annotation class InternalApiWarning
1 change: 1 addition & 0 deletions aws-analytics-pinpoint/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ group = properties["POM_GROUP"].toString()

dependencies {
implementation(project(":core"))
implementation(project(":aws-core"))
implementation(project(":aws-pinpoint-core"))

implementation(dependency.androidx.appcompat)
Expand Down
1 change: 1 addition & 0 deletions aws-api-appsync/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ group = properties["POM_GROUP"].toString()

dependencies {
implementation(project(":core"))
implementation(project(":aws-core"))

implementation(dependency.androidx.annotation)
implementation(dependency.androidx.core)
Expand Down
1 change: 1 addition & 0 deletions aws-api/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ group = properties["POM_GROUP"].toString()

dependencies {
api(project(":core"))
api(project(":aws-core"))
implementation(project(":aws-api-appsync"))

implementation(dependency.androidx.appcompat)
Expand Down
1 change: 1 addition & 0 deletions aws-auth-cognito/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ group = properties["POM_GROUP"].toString()

dependencies {
implementation(project(":core"))
implementation(project(":aws-core"))
implementation(dependency.kotlin.coroutines)
implementation(dependency.kotlin.serializationJson)
implementation(dependency.androidx.appcompat)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package com.amplifyframework.auth.cognito
import android.app.Activity
import android.content.Context
import android.content.Intent
import androidx.annotation.RestrictTo
import androidx.annotation.VisibleForTesting
import com.amplifyframework.AmplifyException
import com.amplifyframework.auth.AuthCodeDeliveryDetails
Expand Down Expand Up @@ -91,6 +92,13 @@ class AWSCognitoAuthPlugin : AuthPlugin<AWSCognitoAuthService>() {
}
}

private lateinit var pluginConfigurationJSON: JSONObject

@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
fun getPluginConfiguration(): JSONObject {
return pluginConfigurationJSON
}

private fun Exception.toAuthException(): AuthException {
return if (this is AuthException) {
this
Expand All @@ -105,6 +113,7 @@ class AWSCognitoAuthPlugin : AuthPlugin<AWSCognitoAuthService>() {

@Throws(AmplifyException::class)
override fun configure(pluginConfiguration: JSONObject, context: Context) {
pluginConfigurationJSON = pluginConfiguration
try {
val configuration = AuthConfiguration.fromJson(pluginConfiguration)
val credentialStoreClient = CredentialStoreClient(configuration, context, logger)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ package com.amplifyframework.auth.cognito

import aws.sdk.kotlin.services.cognitoidentity.CognitoIdentityClient
import aws.sdk.kotlin.services.cognitoidentityprovider.CognitoIdentityProviderClient
import aws.sdk.kotlin.services.cognitoidentityprovider.endpoints.EndpointProvider
import aws.smithy.kotlin.runtime.client.endpoints.Endpoint
import aws.smithy.kotlin.runtime.client.endpoints.EndpointProvider
import com.amplifyframework.statemachine.codegen.data.AuthConfiguration

interface AWSCognitoAuthService {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -833,7 +833,8 @@ internal class RealAWSCognitoAuthPlugin(
when (val authNState = it.authNState) {
is AuthenticationState.SigningOut -> {
(authNState.signOutState as? SignOutState.SigningOutHostedUI)?.let { signOutState ->
if (callbackUri == null && signOutState.signedInData.signInMethod !=
if (callbackUri == null && !signOutState.bypassCancel &&
signOutState.signedInData.signInMethod !=
SignInMethod.ApiBased(SignInMethod.ApiBased.AuthType.UNKNOWN)
) {
authStateMachine.send(
Expand Down Expand Up @@ -1734,40 +1735,35 @@ internal class RealAWSCognitoAuthPlugin(

private fun _deleteUser(token: String, onSuccess: Action, onError: Consumer<AuthException>) {
val listenerToken = StateChangeListenerToken()
var deleteUserException: Exception? = null
authStateMachine.listen(
listenerToken,
{ authState ->
when (val authNState = authState.authNState) {
is AuthenticationState.SignedOut -> {
val event = DeleteUserEvent(DeleteUserEvent.EventType.SignOutDeletedUser())
authStateMachine.send(event)
}
is AuthenticationState.Error -> {
val event = DeleteUserEvent(DeleteUserEvent.EventType.ThrowError(authNState.exception))
authStateMachine.send(event)
}
else -> {
// No-op
}
}
val authZState = authState.authZState as? AuthorizationState.DeletingUser
when (val deleteUserState = authZState?.deleteUserState) {
is DeleteUserState.UserDeleted -> {
onSuccess.call()
sendHubEvent(AuthChannelEventName.USER_DELETED.toString())
authStateMachine.cancel(listenerToken)
}
is DeleteUserState.Error -> {
authStateMachine.cancel(listenerToken)
onError.accept(
CognitoAuthExceptionConverter.lookup(
deleteUserState.exception,
"Request to delete user may have failed. Please check exception stack"
if (authState is AuthState.Configured) {
val (authNState, authZState) = authState
val exception = deleteUserException
when {
authZState is AuthorizationState.DeletingUser &&
authZState.deleteUserState is DeleteUserState.Error -> {
deleteUserException = authZState.deleteUserState.exception
}
authNState is AuthenticationState.SignedOut && authZState is AuthorizationState.Configured -> {
sendHubEvent(AuthChannelEventName.USER_DELETED.toString())
authStateMachine.cancel(listenerToken)
onSuccess.call()
}
authZState is AuthorizationState.SessionEstablished && exception != null -> {
authStateMachine.cancel(listenerToken)
onError.accept(
CognitoAuthExceptionConverter.lookup(
exception,
"Request to delete user may have failed. Please check exception stack"
)
)
)
}
else -> {
// No-op
}
else -> {
// No - op
}
}
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,31 +22,48 @@ import com.amplifyframework.statemachine.Action
import com.amplifyframework.statemachine.codegen.actions.DeleteUserActions
import com.amplifyframework.statemachine.codegen.data.SignOutData
import com.amplifyframework.statemachine.codegen.events.AuthenticationEvent
import com.amplifyframework.statemachine.codegen.events.AuthorizationEvent
import com.amplifyframework.statemachine.codegen.events.DeleteUserEvent

internal object DeleteUserCognitoActions : DeleteUserActions {
override fun initDeleteUserAction(accessToken: String): Action =
Action<AuthEnvironment>("DeleteUser") { id, dispatcher ->
logger.verbose("$id Starting execution")
val evt = try {
try {
cognitoAuthService.cognitoIdentityProviderClient?.deleteUser(
DeleteUserRequest.invoke { this.accessToken = accessToken }
)
AuthenticationEvent(AuthenticationEvent.EventType.SignOutRequested(SignOutData(globalSignOut = false)))
val evt = DeleteUserEvent(DeleteUserEvent.EventType.UserDeleted())
logger.verbose("$id Sending event ${evt.type}")
dispatcher.send(evt)
} catch (e: Exception) {
logger.warn("Failed to delete user.", e)
if (e is UserNotFoundException) {
// The user could have been remotely deleted, clear local session
AuthenticationEvent(
AuthenticationEvent.EventType.SignOutRequested(
SignOutData(globalSignOut = false)
)
)
val evt = DeleteUserEvent(DeleteUserEvent.EventType.ThrowError(e, true))
logger.verbose("$id Sending event ${evt.type}")
dispatcher.send(evt)
} else {
DeleteUserEvent(DeleteUserEvent.EventType.ThrowError(e))
val evt = DeleteUserEvent(DeleteUserEvent.EventType.ThrowError(e, false))
logger.verbose("$id Sending event ${evt.type}")
dispatcher.send(evt)
val evt2 = AuthorizationEvent(AuthorizationEvent.EventType.ThrowError(e))
logger.verbose("$id Sending event ${evt2.type}")
dispatcher.send(evt2)
}
}
}

override fun initiateSignOut(): Action =
Action<AuthEnvironment>("Sign Out Deleted User") { id, dispatcher ->
logger.verbose("$id Starting execution")
val evt = AuthorizationEvent(AuthorizationEvent.EventType.UserDeleted())
val evt2 = AuthenticationEvent(
AuthenticationEvent.EventType.SignOutRequested(SignOutData(globalSignOut = true, bypassCancel = true))
)
logger.verbose("$id Sending event ${evt.type}")
dispatcher.send(evt)
logger.verbose("$id Sending event ${evt2.type}")
dispatcher.send(evt2)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ import com.amplifyframework.statemachine.Action

internal interface DeleteUserActions {
fun initDeleteUserAction(accessToken: String): Action
fun initiateSignOut(): Action
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,5 @@ package com.amplifyframework.statemachine.codegen.data
internal data class SignOutData(
val globalSignOut: Boolean = false,
val browserPackage: String? = null,
val bypassCancel: Boolean = false // When user deleted, even if sign out is cancelled, proceed to sign out locally
)
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@ internal class DeleteUserEvent(
) : StateMachineEvent {
sealed class EventType {
data class DeleteUser(val accessToken: String) : EventType()
data class UserSignedOutAndDeleted(val id: String = "") : EventType()
data class SignOutDeletedUser(val id: String = "") : EventType()
data class ThrowError(val exception: Exception) : EventType()
data class UserDeleted(val id: String = "") : EventType()
data class ThrowError(val exception: Exception, val signOutUser: Boolean) : EventType()
}

override val type: String = eventType.javaClass.simpleName
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ internal sealed class AuthenticationState : State {
StateResolution(SigningIn(), listOf(action))
}
authenticationEvent is AuthenticationEvent.EventType.SignOutRequested -> {
val action = authenticationActions.initiateSignOutAction(authenticationEvent, null)
val action = authenticationActions
.initiateSignOutAction(authenticationEvent, null)
StateResolution(SigningOut(), listOf(action))
}
authorizationEvent is AuthorizationEvent.EventType.StartFederationToIdentityPool -> {
Expand Down
Loading

0 comments on commit 09dc518

Please sign in to comment.