From e184f9a786b10cbbeae4d6eb5439e62a9b2b1719 Mon Sep 17 00:00:00 2001 From: Taras Smakula <tarassmakula@gmail.com> Date: Thu, 20 Oct 2022 19:07:42 +0300 Subject: [PATCH] Create change password uia task --- .../session/account/ChangePasswordUIATask.kt | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordUIATask.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordUIATask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordUIATask.kt new file mode 100644 index 00000000..a84f0e01 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordUIATask.kt @@ -0,0 +1,60 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License 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 org.matrix.android.sdk.internal.session.account + +import org.matrix.android.sdk.api.auth.UIABaseAuth +import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor +import org.matrix.android.sdk.api.session.uia.UiaResult +import org.matrix.android.sdk.internal.auth.registration.handleUIA +import org.matrix.android.sdk.internal.network.GlobalErrorReceiver +import org.matrix.android.sdk.internal.network.executeRequest +import org.matrix.android.sdk.internal.task.Task +import javax.inject.Inject + +internal interface ChangePasswordUIATask : Task<ChangePasswordUIATask.Params, Unit> { + data class Params( + val logoutAllDevices: Boolean, + val userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor, + val userAuthParam: UIABaseAuth? = null + ) +} + +internal class DefaultChangePasswordUIATask @Inject constructor( + private val accountAPI: AccountAPI, + private val globalErrorReceiver: GlobalErrorReceiver +) : ChangePasswordUIATask { + + override suspend fun execute(params: ChangePasswordUIATask.Params) { + val changePasswordParams = ChangePasswordUIAParams.create(params.userAuthParam, params.logoutAllDevices) + try { + executeRequest(globalErrorReceiver) { + accountAPI.changePasswordUIA(changePasswordParams) + } + } catch (throwable: Throwable) { + if (handleUIA( + failure = throwable, + interceptor = params.userInteractiveAuthInterceptor, + retryBlock = { authUpdate -> + execute(params.copy(userAuthParam = authUpdate)) + } + ) != UiaResult.SUCCESS + ) { + throw throwable + } + } + } +} -- GitLab