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 <tjroach@amazon.com>

* 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 <leint@amazon.com>

* 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 <1365977+lawmicha@users.noreply.github.com>
Co-authored-by: Michael Schneider <mikschn@amazon.com>
Co-authored-by: Saijad Dhuka <83975678+sdhuka@users.noreply.github.com>
Co-authored-by: Tyler Roach <tjroach@amazon.com>
Co-authored-by: Divyesh Chitroda <div5yesh@gmail.com>
Co-authored-by: Thomas Leing <bluezebragames@gmail.com>
Co-authored-by: Thomas Leing <leint@amazon.com>
Co-authored-by: Sunil Timalsina <sunil.timalsina@gmail.com>

* 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 <83975678+sdhuka@users.noreply.github.com>

* 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 <83975678+sdhuka@users.noreply.github.com>

* 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 <mikschn@amazon.com>
Co-authored-by: Saijad Dhuka <83975678+sdhuka@users.noreply.github.com>
Co-authored-by: gpanshu <91897496+gpanshu@users.noreply.github.com>
Co-authored-by: Divyesh Chitroda <div5yesh@gmail.com>
Co-authored-by: dengdan154 <85711456+dengdan154@users.noreply.github.com>

* 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 <leint@amazon.com>

* 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 <leint@amazon.com>

* 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 <91897496+gpanshu@users.noreply.github.com>

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

Co-authored-by: Matt Creaser <mattwcc@amazon.com>

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

Co-authored-by: Michael Schneider <mikschn@amazon.com>

* 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 <mattwcc@amazon.com>

* 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 <amplify-android-dev+ghops@amazon.com>

* 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 <banjij@amazon.com>
Co-authored-by: AWS Mobile SDK Bot <46607340+awsmobilesdk@users.noreply.github.com>
Co-authored-by: Saijad Dhuka <83975678+sdhuka@users.noreply.github.com>
Co-authored-by: Tyler Roach <tjroach@amazon.com>

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

Co-authored-by: Matt Creaser <mattwcc@amazon.com>

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

Co-authored-by: Sunil Timalsina <sunil.timalsina@gmail.com>
Co-authored-by: Banji Jolaoso <banjij@amazon.com>
Co-authored-by: Divyesh Chitroda <div5yesh@gmail.com>
Co-authored-by: Matt Creaser <mattwcc@amazon.com>
Co-authored-by: Saijad Dhuka <83975678+sdhuka@users.noreply.github.com>
Co-authored-by: Tyler Roach <tjroach@amazon.com>
Co-authored-by: Thomas Leing <bluezebragames@gmail.com>
Co-authored-by: Thomas Leing <leint@amazon.com>
Co-authored-by: gpanshu <91897496+gpanshu@users.noreply.github.com>
Co-authored-by: AWS Mobile SDK Bot <46607340+awsmobilesdk@users.noreply.github.com>

* release: Amplify Android 2.2.0 (#2269)

Co-authored-by: amplify-android-dev+ghops <amplify-android-dev+ghops@amazon.com>

* 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 <leint@amazon.com>
Co-authored-by: Matt Creaser <mattwcc@amazon.com>

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

Co-authored-by: Banji Jolaoso <banjij@amazon.com>
Co-authored-by: gpanshu <91897496+gpanshu@users.noreply.github.com>

* release: Amplify Android 2.2.1 (#2285)

Co-authored-by: amplify-android-dev+ghops <amplify-android-dev+ghops@amazon.com>
Co-authored-by: Matt Creaser <mattwcc@amazon.com>

* chore: Remove circleci configuration file (#2279)

Co-authored-by: gpanshu <91897496+gpanshu@users.noreply.github.com>

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

Co-authored-by: Banji Jolaoso <banjij@amazon.com>

* 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 <amplify-android-dev+ghops@amazon.com>

* 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 <83975678+sdhuka@users.noreply.github.com>

* 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 <6154160+manueliglesias@users.noreply.github.com>
Co-authored-by: Divyesh Chitroda <div5yesh@gmail.com>

* release: Amplify Android 2.3.0 (#2323)

Co-authored-by: amplify-android-dev+ghops <amplify-android-dev+ghops@amazon.com>

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

Signed-off-by: Manuel Iglesias <6154160+manueliglesias@users.noreply.github.com>
Co-authored-by: Divyesh Chitroda <div5yesh@gmail.com>
Co-authored-by: Matt Creaser <mattwcc@amazon.com>

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

Co-authored-by: Thomas Leing <leint@amazon.com>

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

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

Co-authored-by: Anshul Gupta <gpanshu@amazon.com>
Co-authored-by: gpanshu <91897496+gpanshu@users.noreply.github.com>

* Restore publishing sources jar (#2329)

Co-authored-by: Thomas Leing <leint@amazon.com>

* release: Amplify Android 2.3.0 (#2330)

Co-authored-by: amplify-android-dev+ghops <amplify-android-dev+ghops@amazon.com>
Co-authored-by: Thomas Leing <bluezebragames@gmail.com>

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

Co-authored-by: Tim Schmelter <schmelte+github@amazon.com>
Co-authored-by: Erica Eaton <67125657+eeatonaws@users.noreply.github.com>
Co-authored-by: Divyesh Chitroda <div5yesh@gmail.com>

---------

Signed-off-by: Manuel Iglesias <6154160+manueliglesias@users.noreply.github.com>
Co-authored-by: Erica Eaton <67125657+eeatonaws@users.noreply.github.com>
Co-authored-by: Michael Schneider <mikepschneider@users.noreply.github.com>
Co-authored-by: Michael Law <1365977+lawmicha@users.noreply.github.com>
Co-authored-by: Michael Schneider <mikschn@amazon.com>
Co-authored-by: Saijad Dhuka <83975678+sdhuka@users.noreply.github.com>
Co-authored-by: Tyler Roach <tjroach@amazon.com>
Co-authored-by: Thomas Leing <bluezebragames@gmail.com>
Co-authored-by: Thomas Leing <leint@amazon.com>
Co-authored-by: Sunil Timalsina <sunil.timalsina@gmail.com>
Co-authored-by: Matt Creaser <mattwcc@amazon.com>
Co-authored-by: gpanshu <91897496+gpanshu@users.noreply.github.com>
Co-authored-by: dengdan154 <85711456+dengdan154@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: amplify-android-dev+ghops <amplify-android-dev+ghops@amazon.com>
Co-authored-by: banji180 <banji180@gmail.com>
Co-authored-by: Banji Jolaoso <banjij@amazon.com>
Co-authored-by: AWS Mobile SDK Bot <46607340+awsmobilesdk@users.noreply.github.com>
Co-authored-by: Manuel Iglesias <6154160+manueliglesias@users.noreply.github.com>
Co-authored-by: Dane Pilcher <dppilche@amazon.com>
Co-authored-by: Anshul Gupta <gpanshu@amazon.com>
Co-authored-by: Tim Schmelter <schmelte+github@amazon.com>
  • Loading branch information
22 people committed 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
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
@@ -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
@@ -0,0 +1 @@
/build
46 changes: 46 additions & 0 deletions annotations/build.gradle.kts
@@ -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
@@ -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
@@ -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>

@@ -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
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
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
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
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
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
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
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
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)
}
}
Expand Up @@ -19,4 +19,5 @@ import com.amplifyframework.statemachine.Action

internal interface DeleteUserActions {
fun initDeleteUserAction(accessToken: String): Action
fun initiateSignOut(): Action
}
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
)
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
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

0 comments on commit 09dc518

Please sign in to comment.