Map RecoveryException
This commit is contained in:
parent
1131bc88c9
commit
89a9da81e9
3 changed files with 75 additions and 0 deletions
|
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* 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 io.element.android.libraries.matrix.api.encryption
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.exception.ClientException
|
||||||
|
|
||||||
|
sealed class RecoveryException(message: String) : Exception(message) {
|
||||||
|
class SecretStorage(message: String) : RecoveryException(message)
|
||||||
|
data object BackupExistsOnServer : RecoveryException("BackupExistsOnServer")
|
||||||
|
data class Client(val exception: ClientException) : RecoveryException(exception.message ?: "Unknown error")
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023 New Vector Ltd
|
||||||
|
*
|
||||||
|
* 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 io.element.android.libraries.matrix.impl.encryption
|
||||||
|
|
||||||
|
import io.element.android.libraries.matrix.api.encryption.RecoveryException
|
||||||
|
import io.element.android.libraries.matrix.api.exception.ClientException
|
||||||
|
import io.element.android.libraries.matrix.impl.exception.mapClientException
|
||||||
|
import org.matrix.rustcomponents.sdk.RecoveryException as RustRecoveryException
|
||||||
|
|
||||||
|
fun Throwable.mapRecoveryException(): RecoveryException {
|
||||||
|
return when (this) {
|
||||||
|
is RustRecoveryException.SecretStorage -> RecoveryException.SecretStorage(
|
||||||
|
message = errorMessage
|
||||||
|
)
|
||||||
|
is RustRecoveryException.BackupExistsOnServer -> RecoveryException.BackupExistsOnServer
|
||||||
|
is RustRecoveryException.Client -> RecoveryException.Client(
|
||||||
|
source.mapClientException()
|
||||||
|
)
|
||||||
|
else -> RecoveryException.Client(
|
||||||
|
ClientException.Other("Unknown error")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -17,6 +17,7 @@
|
||||||
package io.element.android.libraries.matrix.impl.encryption
|
package io.element.android.libraries.matrix.impl.encryption
|
||||||
|
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
|
import io.element.android.libraries.core.extensions.mapFailure
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupState
|
import io.element.android.libraries.matrix.api.encryption.BackupState
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
||||||
import io.element.android.libraries.matrix.api.encryption.EnableRecoveryProgress
|
import io.element.android.libraries.matrix.api.encryption.EnableRecoveryProgress
|
||||||
|
|
@ -110,6 +111,8 @@ internal class RustEncryptionService(
|
||||||
override suspend fun enableBackups(): Result<Unit> = withContext(dispatchers.io) {
|
override suspend fun enableBackups(): Result<Unit> = withContext(dispatchers.io) {
|
||||||
runCatching {
|
runCatching {
|
||||||
service.enableBackups()
|
service.enableBackups()
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapRecoveryException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -127,6 +130,8 @@ internal class RustEncryptionService(
|
||||||
)
|
)
|
||||||
// enableRecovery returns the encryption key, but we read it from the state flow
|
// enableRecovery returns the encryption key, but we read it from the state flow
|
||||||
.let { }
|
.let { }
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapRecoveryException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -164,24 +169,32 @@ internal class RustEncryptionService(
|
||||||
override suspend fun disableRecovery(): Result<Unit> = withContext(dispatchers.io) {
|
override suspend fun disableRecovery(): Result<Unit> = withContext(dispatchers.io) {
|
||||||
runCatching {
|
runCatching {
|
||||||
service.disableRecovery()
|
service.disableRecovery()
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapRecoveryException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun isLastDevice(): Result<Boolean> = withContext(dispatchers.io) {
|
override suspend fun isLastDevice(): Result<Boolean> = withContext(dispatchers.io) {
|
||||||
runCatching {
|
runCatching {
|
||||||
service.isLastDevice()
|
service.isLastDevice()
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapRecoveryException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun resetRecoveryKey(): Result<String> = withContext(dispatchers.io) {
|
override suspend fun resetRecoveryKey(): Result<String> = withContext(dispatchers.io) {
|
||||||
runCatching {
|
runCatching {
|
||||||
service.resetRecoveryKey()
|
service.resetRecoveryKey()
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapRecoveryException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun recover(recoveryKey: String): Result<Unit> = withContext(dispatchers.io) {
|
override suspend fun recover(recoveryKey: String): Result<Unit> = withContext(dispatchers.io) {
|
||||||
runCatching {
|
runCatching {
|
||||||
service.recover(recoveryKey)
|
service.recover(recoveryKey)
|
||||||
|
}.mapFailure {
|
||||||
|
it.mapRecoveryException()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue