@@ -18,11 +18,9 @@ package com.amplifyframework.auth.cognito
1818import android.app.Activity
1919import android.content.Intent
2020import androidx.annotation.WorkerThread
21- import aws.sdk.kotlin.services.cognitoidentityprovider.confirmForgotPassword
2221import aws.sdk.kotlin.services.cognitoidentityprovider.getUser
2322import aws.sdk.kotlin.services.cognitoidentityprovider.model.AnalyticsMetadataType
2423import aws.sdk.kotlin.services.cognitoidentityprovider.model.ChallengeNameType
25- import aws.sdk.kotlin.services.cognitoidentityprovider.model.ChangePasswordRequest
2624import aws.sdk.kotlin.services.cognitoidentityprovider.model.EmailMfaSettingsType
2725import aws.sdk.kotlin.services.cognitoidentityprovider.model.SmsMfaSettingsType
2826import aws.sdk.kotlin.services.cognitoidentityprovider.model.SoftwareTokenMfaSettingsType
@@ -58,7 +56,6 @@ import com.amplifyframework.auth.cognito.helpers.getMFATypeOrNull
5856import com.amplifyframework.auth.cognito.helpers.identityProviderName
5957import com.amplifyframework.auth.cognito.helpers.isMfaSetupSelectionChallenge
6058import com.amplifyframework.auth.cognito.helpers.value
61- import com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmResetPasswordOptions
6259import com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmSignInOptions
6360import com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmSignUpOptions
6461import com.amplifyframework.auth.cognito.options.AWSCognitoAuthResendSignUpCodeOptions
@@ -73,25 +70,22 @@ import com.amplifyframework.auth.cognito.result.FederateToIdentityPoolResult
7370import com.amplifyframework.auth.cognito.result.GlobalSignOutError
7471import com.amplifyframework.auth.cognito.result.HostedUIError
7572import com.amplifyframework.auth.cognito.result.RevokeTokenError
76- import com.amplifyframework.auth.cognito.usecases.ResetPasswordUseCase
73+ import com.amplifyframework.auth.cognito.util.toAuthCodeDeliveryDetails
7774import com.amplifyframework.auth.exceptions.ConfigurationException
7875import com.amplifyframework.auth.exceptions.InvalidStateException
7976import com.amplifyframework.auth.exceptions.NotAuthorizedException
8077import com.amplifyframework.auth.exceptions.ServiceException
8178import com.amplifyframework.auth.exceptions.SessionExpiredException
8279import com.amplifyframework.auth.exceptions.SignedOutException
8380import com.amplifyframework.auth.exceptions.UnknownException
84- import com.amplifyframework.auth.options.AuthConfirmResetPasswordOptions
8581import com.amplifyframework.auth.options.AuthConfirmSignInOptions
8682import com.amplifyframework.auth.options.AuthConfirmSignUpOptions
8783import com.amplifyframework.auth.options.AuthFetchSessionOptions
8884import com.amplifyframework.auth.options.AuthResendSignUpCodeOptions
89- import com.amplifyframework.auth.options.AuthResetPasswordOptions
9085import com.amplifyframework.auth.options.AuthSignInOptions
9186import com.amplifyframework.auth.options.AuthSignOutOptions
9287import com.amplifyframework.auth.options.AuthSignUpOptions
9388import com.amplifyframework.auth.options.AuthWebUISignInOptions
94- import com.amplifyframework.auth.result.AuthResetPasswordResult
9589import com.amplifyframework.auth.result.AuthSignInResult
9690import com.amplifyframework.auth.result.AuthSignOutResult
9791import com.amplifyframework.auth.result.AuthSignUpResult
@@ -144,9 +138,7 @@ import java.util.concurrent.atomic.AtomicReference
144138import kotlin.coroutines.resume
145139import kotlin.coroutines.resumeWithException
146140import kotlin.coroutines.suspendCoroutine
147- import kotlinx.coroutines.DelicateCoroutinesApi
148141import kotlinx.coroutines.GlobalScope
149- import kotlinx.coroutines.async
150142import kotlinx.coroutines.flow.collect
151143import kotlinx.coroutines.flow.drop
152144import kotlinx.coroutines.flow.onStart
@@ -486,21 +478,7 @@ internal class RealAWSCognitoAuthPlugin(
486478 encodedContextData?.let { this .userContextData { encodedData = it } }
487479 }
488480
489- val deliveryDetails = response?.codeDeliveryDetails?.let { details ->
490- mapOf (
491- " DESTINATION" to details.destination,
492- " MEDIUM" to details.deliveryMedium?.value,
493- " ATTRIBUTE" to details.attributeName
494- )
495- }
496-
497- val codeDeliveryDetails = AuthCodeDeliveryDetails (
498- deliveryDetails?.getValue(" DESTINATION" ) ? : " " ,
499- AuthCodeDeliveryDetails .DeliveryMedium .fromString(
500- deliveryDetails?.getValue(" MEDIUM" )
501- ),
502- deliveryDetails?.getValue(" ATTRIBUTE" )
503- )
481+ val codeDeliveryDetails = response?.codeDeliveryDetails.toAuthCodeDeliveryDetails()
504482 onSuccess.accept(codeDeliveryDetails)
505483 logger.verbose(" ResendSignUpCode Execution complete" )
506484 } catch (exception: Exception ) {
@@ -1466,154 +1444,6 @@ internal class RealAWSCognitoAuthPlugin(
14661444 )
14671445 }
14681446
1469- @OptIn(DelicateCoroutinesApi ::class )
1470- fun resetPassword (
1471- username : String ,
1472- options : AuthResetPasswordOptions ,
1473- onSuccess : Consumer <AuthResetPasswordResult >,
1474- onError : Consumer <AuthException >
1475- ) {
1476- try {
1477- val cognitoIdentityProviderClient = requireNotNull(
1478- authEnvironment.cognitoAuthService.cognitoIdentityProviderClient
1479- )
1480-
1481- val appClient = requireNotNull(configuration.userPool?.appClient)
1482- GlobalScope .launch {
1483- val encodedData = authEnvironment.getUserContextData(username)
1484- val pinpointEndpointId = authEnvironment.getPinpointEndpointId()
1485-
1486- ResetPasswordUseCase (
1487- cognitoIdentityProviderClient,
1488- appClient,
1489- configuration.userPool?.appClientSecret
1490- ).execute(
1491- username,
1492- options,
1493- encodedData,
1494- pinpointEndpointId,
1495- onSuccess,
1496- onError
1497- )
1498- }
1499- } catch (ex: Exception ) {
1500- onError.accept(InvalidUserPoolConfigurationException ())
1501- }
1502- }
1503-
1504- fun resetPassword (
1505- username : String ,
1506- onSuccess : Consumer <AuthResetPasswordResult >,
1507- onError : Consumer <AuthException >
1508- ) {
1509- resetPassword(username, AuthResetPasswordOptions .defaults(), onSuccess, onError)
1510- }
1511-
1512- fun confirmResetPassword (
1513- username : String ,
1514- newPassword : String ,
1515- confirmationCode : String ,
1516- options : AuthConfirmResetPasswordOptions ,
1517- onSuccess : Action ,
1518- onError : Consumer <AuthException >
1519- ) {
1520- authStateMachine.getCurrentState { authState ->
1521- if (authState.authNState is AuthenticationState .NotConfigured ) {
1522- onError.accept(
1523- ConfigurationException (
1524- " Confirm Reset Password failed." ,
1525- " Cognito User Pool not configured. Please check amplifyconfiguration.json file."
1526- )
1527- )
1528- return @getCurrentState
1529- }
1530-
1531- GlobalScope .launch {
1532- try {
1533- val encodedContextData = authEnvironment.getUserContextData(username)
1534- val pinpointEndpointId = authEnvironment.getPinpointEndpointId()
1535-
1536- authEnvironment.cognitoAuthService.cognitoIdentityProviderClient!! .confirmForgotPassword {
1537- this .username = username
1538- this .confirmationCode = confirmationCode
1539- password = newPassword
1540- secretHash = AuthHelper .getSecretHash(
1541- username,
1542- configuration.userPool?.appClient,
1543- configuration.userPool?.appClientSecret
1544- )
1545- clientMetadata =
1546- (options as ? AWSCognitoAuthConfirmResetPasswordOptions )?.metadata ? : mapOf ()
1547- clientId = configuration.userPool?.appClient
1548- encodedContextData?.let { this .userContextData { encodedData = it } }
1549- pinpointEndpointId?.let {
1550- this .analyticsMetadata = AnalyticsMetadataType .invoke { analyticsEndpointId = it }
1551- }
1552- }.let { onSuccess.call() }
1553- } catch (ex: Exception ) {
1554- onError.accept(
1555- CognitoAuthExceptionConverter .lookup(ex, AmplifyException .REPORT_BUG_TO_AWS_SUGGESTION )
1556- )
1557- }
1558- }
1559- }
1560- }
1561-
1562- fun confirmResetPassword (
1563- username : String ,
1564- newPassword : String ,
1565- confirmationCode : String ,
1566- onSuccess : Action ,
1567- onError : Consumer <AuthException >
1568- ) {
1569- confirmResetPassword(
1570- username,
1571- newPassword,
1572- confirmationCode,
1573- AuthConfirmResetPasswordOptions .defaults(),
1574- onSuccess,
1575- onError
1576- )
1577- }
1578-
1579- fun updatePassword (oldPassword : String , newPassword : String , onSuccess : Action , onError : Consumer <AuthException >) {
1580- authStateMachine.getCurrentState { authState ->
1581- when (authState.authNState) {
1582- // Check if user signed in
1583- is AuthenticationState .SignedIn -> {
1584- _updatePassword (oldPassword, newPassword, onSuccess, onError)
1585- }
1586- is AuthenticationState .SignedOut -> onError.accept(SignedOutException ())
1587- else -> onError.accept(InvalidStateException ())
1588- }
1589- }
1590- }
1591-
1592- private fun _updatePassword (
1593- oldPassword : String ,
1594- newPassword : String ,
1595- onSuccess : Action ,
1596- onError : Consumer <AuthException >
1597- ) {
1598- GlobalScope .async {
1599- val tokens = getSession().userPoolTokensResult
1600- val changePasswordRequest = ChangePasswordRequest .invoke {
1601- previousPassword = oldPassword
1602- proposedPassword = newPassword
1603- this .accessToken = tokens.value?.accessToken
1604- }
1605- try {
1606- authEnvironment.cognitoAuthService
1607- .cognitoIdentityProviderClient?.changePassword(
1608- changePasswordRequest
1609- )
1610- onSuccess.call()
1611- } catch (e: Exception ) {
1612- onError.accept(CognitoAuthExceptionConverter .lookup(e, e.toString()))
1613- }
1614- }
1615- }
1616-
16171447 fun signOut (onComplete : Consumer <AuthSignOutResult >) {
16181448 signOut(AuthSignOutOptions .builder().build(), onComplete)
16191449 }
0 commit comments