Skip to content
Snippets Groups Projects
Commit 256d29d1 authored by Taras's avatar Taras
Browse files

Merge branch 'feature/change_password' into main

parents d4e56d63 57ee5199
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@ apply plugin: 'maven-publish'
def groupIdString = "org.matrix.android"
def artifactIdString = "matrix-sdk-android"
def versionName = "1.5.2.3"
def versionName = "1.5.2.4"
def artifactPath = "$buildDir/outputs/aar/$artifactIdString-release.aar"
def publicationName = "release"
def projectId = "16"
......
......@@ -52,4 +52,7 @@ interface AccountService {
eraseAllData: Boolean,
userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor
)
//Added for password UIA stages
suspend fun changePasswordStages(userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor, logoutAllDevices: Boolean = true)
}
......@@ -36,4 +36,8 @@ internal interface AccountAPI {
*/
@POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "account/deactivate")
suspend fun deactivate(@Body params: DeactivateAccountParams)
//Added to handle reAuth uia stages
@POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "account/auth")
suspend fun changePasswordUIA(@Body params: ChangePasswordUIAParams)
}
......@@ -44,4 +44,7 @@ internal abstract class AccountModule {
@Binds
abstract fun bindAccountService(service: DefaultAccountService): AccountService
@Binds
abstract fun bindChangePasswordUIATask(task: DefaultChangePasswordUIATask): ChangePasswordUIATask
}
/*
* 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 com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import org.matrix.android.sdk.api.auth.UIABaseAuth
@JsonClass(generateAdapter = true)
internal data class ChangePasswordUIAParams(
@Json(name = "logout_devices")
val logoutDevices: Boolean = true,
@Json(name = "auth")
val auth: Map<String, *>? = null
) {
companion object {
fun create(auth: UIABaseAuth?, logoutDevices: Boolean): ChangePasswordUIAParams {
return ChangePasswordUIAParams(
auth = auth?.asMap(),
logoutDevices = logoutDevices
)
}
}
}
\ No newline at end of file
/*
* 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
}
}
}
}
......@@ -22,7 +22,8 @@ import javax.inject.Inject
internal class DefaultAccountService @Inject constructor(
private val changePasswordTask: ChangePasswordTask,
private val deactivateAccountTask: DeactivateAccountTask
private val deactivateAccountTask: DeactivateAccountTask,
private val changePasswordUIATask: ChangePasswordUIATask
) : AccountService {
override suspend fun changePassword(password: String, newPassword: String, logoutAllDevices: Boolean) {
......@@ -32,4 +33,9 @@ internal class DefaultAccountService @Inject constructor(
override suspend fun deactivateAccount(eraseAllData: Boolean, userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor) {
deactivateAccountTask.execute(DeactivateAccountTask.Params(eraseAllData, userInteractiveAuthInterceptor))
}
//Added for password UIA stages
override suspend fun changePasswordStages(userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor, logoutAllDevices: Boolean) {
changePasswordUIATask.execute(ChangePasswordUIATask.Params(logoutAllDevices, userInteractiveAuthInterceptor))
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment