Skip to content

Commit 39f5e0c

Browse files
authored
chore(auth): Move password functions to usecases (#2995)
1 parent e31c581 commit 39f5e0c

29 files changed

+541
-692
lines changed

aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -313,13 +313,13 @@ class AWSCognitoAuthPlugin : AuthPlugin<AWSCognitoAuthService>() {
313313
options: AuthResetPasswordOptions,
314314
onSuccess: Consumer<AuthResetPasswordResult>,
315315
onError: Consumer<AuthException>
316-
) = enqueue(onSuccess, onError) { queueFacade.resetPassword(username, options) }
316+
) = enqueue(onSuccess, onError) { useCaseFactory.resetPassword().execute(username, options) }
317317

318318
override fun resetPassword(
319319
username: String,
320320
onSuccess: Consumer<AuthResetPasswordResult>,
321321
onError: Consumer<AuthException>
322-
) = enqueue(onSuccess, onError) { queueFacade.resetPassword(username) }
322+
) = enqueue(onSuccess, onError) { useCaseFactory.resetPassword().execute(username) }
323323

324324
override fun confirmResetPassword(
325325
username: String,
@@ -329,7 +329,7 @@ class AWSCognitoAuthPlugin : AuthPlugin<AWSCognitoAuthService>() {
329329
onSuccess: Action,
330330
onError: Consumer<AuthException>
331331
) = enqueue(onSuccess, onError) {
332-
queueFacade.confirmResetPassword(username, newPassword, confirmationCode, options)
332+
useCaseFactory.confirmResetPassword().execute(username, newPassword, confirmationCode, options)
333333
}
334334

335335
override fun confirmResetPassword(
@@ -338,14 +338,16 @@ class AWSCognitoAuthPlugin : AuthPlugin<AWSCognitoAuthService>() {
338338
confirmationCode: String,
339339
onSuccess: Action,
340340
onError: Consumer<AuthException>
341-
) = enqueue(onSuccess, onError) { queueFacade.confirmResetPassword(username, newPassword, confirmationCode) }
341+
) = enqueue(onSuccess, onError) {
342+
useCaseFactory.confirmResetPassword().execute(username, newPassword, confirmationCode)
343+
}
342344

343345
override fun updatePassword(
344346
oldPassword: String,
345347
newPassword: String,
346348
onSuccess: Action,
347349
onError: Consumer<AuthException>
348-
) = enqueue(onSuccess, onError) { queueFacade.updatePassword(oldPassword, newPassword) }
350+
) = enqueue(onSuccess, onError) { useCaseFactory.updatePassword().execute(oldPassword, newPassword) }
349351

350352
override fun fetchUserAttributes(onSuccess: Consumer<List<AuthUserAttribute>>, onError: Consumer<AuthException>) =
351353
enqueue(onSuccess, onError) { useCaseFactory.fetchUserAttributes().execute() }

aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/KotlinAuthFacadeInternal.kt

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,14 @@ import com.amplifyframework.auth.AuthProvider
2222
import com.amplifyframework.auth.AuthSession
2323
import com.amplifyframework.auth.cognito.options.FederateToIdentityPoolOptions
2424
import com.amplifyframework.auth.cognito.result.FederateToIdentityPoolResult
25-
import com.amplifyframework.auth.options.AuthConfirmResetPasswordOptions
2625
import com.amplifyframework.auth.options.AuthConfirmSignInOptions
2726
import com.amplifyframework.auth.options.AuthConfirmSignUpOptions
2827
import com.amplifyframework.auth.options.AuthFetchSessionOptions
2928
import com.amplifyframework.auth.options.AuthResendSignUpCodeOptions
30-
import com.amplifyframework.auth.options.AuthResetPasswordOptions
3129
import com.amplifyframework.auth.options.AuthSignInOptions
3230
import com.amplifyframework.auth.options.AuthSignOutOptions
3331
import com.amplifyframework.auth.options.AuthSignUpOptions
3432
import com.amplifyframework.auth.options.AuthWebUISignInOptions
35-
import com.amplifyframework.auth.result.AuthResetPasswordResult
3633
import com.amplifyframework.auth.result.AuthSignInResult
3734
import com.amplifyframework.auth.result.AuthSignOutResult
3835
import com.amplifyframework.auth.result.AuthSignUpResult
@@ -194,60 +191,6 @@ internal class KotlinAuthFacadeInternal(private val delegate: RealAWSCognitoAuth
194191
)
195192
}
196193

197-
suspend fun resetPassword(username: String): AuthResetPasswordResult = suspendCoroutine { continuation ->
198-
delegate.resetPassword(
199-
username,
200-
{ continuation.resume(it) },
201-
{ continuation.resumeWithException(it) }
202-
)
203-
}
204-
205-
suspend fun resetPassword(username: String, options: AuthResetPasswordOptions): AuthResetPasswordResult =
206-
suspendCoroutine { continuation ->
207-
delegate.resetPassword(
208-
username,
209-
options,
210-
{ continuation.resume(it) },
211-
{ continuation.resumeWithException(it) }
212-
)
213-
}
214-
215-
suspend fun confirmResetPassword(username: String, newPassword: String, confirmationCode: String) =
216-
suspendCoroutine { continuation ->
217-
delegate.confirmResetPassword(
218-
username,
219-
newPassword,
220-
confirmationCode,
221-
{ continuation.resume(Unit) },
222-
{ continuation.resumeWithException(it) }
223-
)
224-
}
225-
226-
suspend fun confirmResetPassword(
227-
username: String,
228-
newPassword: String,
229-
confirmationCode: String,
230-
options: AuthConfirmResetPasswordOptions
231-
) = suspendCoroutine { continuation ->
232-
delegate.confirmResetPassword(
233-
username,
234-
newPassword,
235-
confirmationCode,
236-
options,
237-
{ continuation.resume(Unit) },
238-
{ continuation.resumeWithException(it) }
239-
)
240-
}
241-
242-
suspend fun updatePassword(oldPassword: String, newPassword: String) = suspendCoroutine { continuation ->
243-
delegate.updatePassword(
244-
oldPassword,
245-
newPassword,
246-
{ continuation.resume(Unit) },
247-
{ continuation.resumeWithException(it) }
248-
)
249-
}
250-
251194
suspend fun signOut(): AuthSignOutResult = suspendCoroutine { continuation ->
252195
delegate.signOut { continuation.resume(it) }
253196
}

aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/RealAWSCognitoAuthPlugin.kt

Lines changed: 2 additions & 172 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@ package com.amplifyframework.auth.cognito
1818
import android.app.Activity
1919
import android.content.Intent
2020
import androidx.annotation.WorkerThread
21-
import aws.sdk.kotlin.services.cognitoidentityprovider.confirmForgotPassword
2221
import aws.sdk.kotlin.services.cognitoidentityprovider.getUser
2322
import aws.sdk.kotlin.services.cognitoidentityprovider.model.AnalyticsMetadataType
2423
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ChallengeNameType
25-
import aws.sdk.kotlin.services.cognitoidentityprovider.model.ChangePasswordRequest
2624
import aws.sdk.kotlin.services.cognitoidentityprovider.model.EmailMfaSettingsType
2725
import aws.sdk.kotlin.services.cognitoidentityprovider.model.SmsMfaSettingsType
2826
import aws.sdk.kotlin.services.cognitoidentityprovider.model.SoftwareTokenMfaSettingsType
@@ -58,7 +56,6 @@ import com.amplifyframework.auth.cognito.helpers.getMFATypeOrNull
5856
import com.amplifyframework.auth.cognito.helpers.identityProviderName
5957
import com.amplifyframework.auth.cognito.helpers.isMfaSetupSelectionChallenge
6058
import com.amplifyframework.auth.cognito.helpers.value
61-
import com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmResetPasswordOptions
6259
import com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmSignInOptions
6360
import com.amplifyframework.auth.cognito.options.AWSCognitoAuthConfirmSignUpOptions
6461
import com.amplifyframework.auth.cognito.options.AWSCognitoAuthResendSignUpCodeOptions
@@ -73,25 +70,22 @@ import com.amplifyframework.auth.cognito.result.FederateToIdentityPoolResult
7370
import com.amplifyframework.auth.cognito.result.GlobalSignOutError
7471
import com.amplifyframework.auth.cognito.result.HostedUIError
7572
import com.amplifyframework.auth.cognito.result.RevokeTokenError
76-
import com.amplifyframework.auth.cognito.usecases.ResetPasswordUseCase
73+
import com.amplifyframework.auth.cognito.util.toAuthCodeDeliveryDetails
7774
import com.amplifyframework.auth.exceptions.ConfigurationException
7875
import com.amplifyframework.auth.exceptions.InvalidStateException
7976
import com.amplifyframework.auth.exceptions.NotAuthorizedException
8077
import com.amplifyframework.auth.exceptions.ServiceException
8178
import com.amplifyframework.auth.exceptions.SessionExpiredException
8279
import com.amplifyframework.auth.exceptions.SignedOutException
8380
import com.amplifyframework.auth.exceptions.UnknownException
84-
import com.amplifyframework.auth.options.AuthConfirmResetPasswordOptions
8581
import com.amplifyframework.auth.options.AuthConfirmSignInOptions
8682
import com.amplifyframework.auth.options.AuthConfirmSignUpOptions
8783
import com.amplifyframework.auth.options.AuthFetchSessionOptions
8884
import com.amplifyframework.auth.options.AuthResendSignUpCodeOptions
89-
import com.amplifyframework.auth.options.AuthResetPasswordOptions
9085
import com.amplifyframework.auth.options.AuthSignInOptions
9186
import com.amplifyframework.auth.options.AuthSignOutOptions
9287
import com.amplifyframework.auth.options.AuthSignUpOptions
9388
import com.amplifyframework.auth.options.AuthWebUISignInOptions
94-
import com.amplifyframework.auth.result.AuthResetPasswordResult
9589
import com.amplifyframework.auth.result.AuthSignInResult
9690
import com.amplifyframework.auth.result.AuthSignOutResult
9791
import com.amplifyframework.auth.result.AuthSignUpResult
@@ -144,9 +138,7 @@ import java.util.concurrent.atomic.AtomicReference
144138
import kotlin.coroutines.resume
145139
import kotlin.coroutines.resumeWithException
146140
import kotlin.coroutines.suspendCoroutine
147-
import kotlinx.coroutines.DelicateCoroutinesApi
148141
import kotlinx.coroutines.GlobalScope
149-
import kotlinx.coroutines.async
150142
import kotlinx.coroutines.flow.collect
151143
import kotlinx.coroutines.flow.drop
152144
import 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
}

aws-auth-cognito/src/main/java/com/amplifyframework/auth/cognito/actions/SignUpCognitoActions.kt

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import aws.sdk.kotlin.services.cognitoidentityprovider.confirmSignUp
1919
import aws.sdk.kotlin.services.cognitoidentityprovider.model.AnalyticsMetadataType
2020
import aws.sdk.kotlin.services.cognitoidentityprovider.model.AttributeType
2121
import aws.sdk.kotlin.services.cognitoidentityprovider.signUp
22-
import com.amplifyframework.auth.AuthCodeDeliveryDetails
2322
import com.amplifyframework.auth.cognito.AuthEnvironment
2423
import com.amplifyframework.auth.cognito.helpers.AuthHelper
24+
import com.amplifyframework.auth.cognito.util.toAuthCodeDeliveryDetails
2525
import com.amplifyframework.auth.result.AuthSignUpResult
2626
import com.amplifyframework.auth.result.step.AuthNextSignUpStep
2727
import com.amplifyframework.auth.result.step.AuthSignUpStep
@@ -68,13 +68,7 @@ internal object SignUpCognitoActions : SignUpActions {
6868
}
6969
}
7070

71-
val codeDeliveryDetails = AuthCodeDeliveryDetails(
72-
response?.codeDeliveryDetails?.destination ?: "",
73-
AuthCodeDeliveryDetails.DeliveryMedium.fromString(
74-
response?.codeDeliveryDetails?.deliveryMedium?.value
75-
),
76-
response?.codeDeliveryDetails?.attributeName
77-
)
71+
val codeDeliveryDetails = response?.codeDeliveryDetails.toAuthCodeDeliveryDetails()
7872
val signUpData = SignUpData(
7973
username,
8074
event.signUpData.validationData,

0 commit comments

Comments
 (0)