From 4280cba8d79d5bcdfda2771c2baa612fcb00052f Mon Sep 17 00:00:00 2001 From: Taras <tarassmakula@gmail.com> Date: Sun, 13 Mar 2022 12:43:32 +0200 Subject: [PATCH] Update error parser for token validation --- .../java/com/futo/circles/core/Constants.kt | 11 ++++++-- .../java/com/futo/circles/core/ErrorParser.kt | 26 +++++++++++++++++++ .../com/futo/circles/core/ReflectionUtils.kt | 2 +- .../circles/extensions/LiveDataExtensions.kt | 5 ++-- .../RegistrationWizardExtensions.kt | 8 +++--- .../data_source/CreateGroupDataSource.kt | 2 +- .../circles/feature/groups/GroupsViewModel.kt | 2 +- .../data_source/SelectUsersDataSource.kt | 2 +- 8 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/futo/circles/core/ErrorParser.kt diff --git a/app/src/main/java/com/futo/circles/core/Constants.kt b/app/src/main/java/com/futo/circles/core/Constants.kt index 7ca9158d6..372f11834 100644 --- a/app/src/main/java/com/futo/circles/core/Constants.kt +++ b/app/src/main/java/com/futo/circles/core/Constants.kt @@ -1,4 +1,11 @@ -package com.futo.circles.utils +package com.futo.circles.core const val GROUP_TAG = "social.kombucha.group" -const val DEFAULT_USER_PREFIX = "@notices:" \ No newline at end of file +const val DEFAULT_USER_PREFIX = "@notices:" + + +const val DEFAULT_ERROR_MESSAGE = "Something went wrong" +const val AUTH_EXCEPTION_REASON_KEY = "reason" + +const val PENDING_SESSION_PROPERTY_NAME = "pendingSessionData" +const val CURRENT_SESSION_PROPERTY_NAME = "currentSession" \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/core/ErrorParser.kt b/app/src/main/java/com/futo/circles/core/ErrorParser.kt new file mode 100644 index 000000000..8f945aff1 --- /dev/null +++ b/app/src/main/java/com/futo/circles/core/ErrorParser.kt @@ -0,0 +1,26 @@ +package com.futo.circles.core + +import org.json.JSONObject +import org.matrix.android.sdk.api.failure.Failure +import retrofit2.HttpException + +object ErrorParser { + + + fun getErrorMessage(t: Throwable): String = + handleErrorBodyException(t) ?: handleServerException(t) ?: DEFAULT_ERROR_MESSAGE + + + private fun handleErrorBodyException(t: Throwable): String? = + (t as? HttpException)?.response()?.errorBody()?.string()?.let { + try { + JSONObject(it).getString(AUTH_EXCEPTION_REASON_KEY) + } catch (e: Exception) { + null + } + } + + private fun handleServerException(t: Throwable): String? = + (t as? Failure.ServerError)?.error?.message ?: t.message + +} \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt b/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt index 59aa78629..50931f79a 100644 --- a/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt +++ b/app/src/main/java/com/futo/circles/core/ReflectionUtils.kt @@ -1,4 +1,4 @@ -package com.futo.circles.utils +package com.futo.circles.core fun <T : Any> T.getPrivateProperty(variableName: String): Any? { return javaClass.getDeclaredField(variableName).let { field -> diff --git a/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt b/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt index 037a1c64a..f32b7633e 100644 --- a/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt +++ b/app/src/main/java/com/futo/circles/extensions/LiveDataExtensions.kt @@ -2,9 +2,9 @@ package com.futo.circles.extensions import androidx.fragment.app.Fragment import androidx.lifecycle.LiveData +import com.futo.circles.core.ErrorParser import com.futo.circles.core.HasLoadingState import com.futo.circles.core.SingleEventLiveData -import org.matrix.android.sdk.api.failure.Failure fun <T> SingleEventLiveData<Response<T>>.observeResponse( hasLoadingState: HasLoadingState, @@ -35,8 +35,7 @@ suspend fun <T> createResult(block: suspend () -> T): Response<T> { return try { Response.Success(block()) } catch (t: Throwable) { - val message = (t as? Failure.ServerError)?.error?.message ?: t.message - Response.Error(message ?: "Something went wrong") + Response.Error(ErrorParser.getErrorMessage(t)) } } diff --git a/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt b/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt index c15128010..839ebb5f0 100644 --- a/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt +++ b/app/src/main/java/com/futo/circles/extensions/RegistrationWizardExtensions.kt @@ -1,8 +1,10 @@ package com.futo.circles.extensions -import com.futo.circles.utils.getPrivateProperty +import com.futo.circles.core.CURRENT_SESSION_PROPERTY_NAME +import com.futo.circles.core.PENDING_SESSION_PROPERTY_NAME +import com.futo.circles.core.getPrivateProperty import org.matrix.android.sdk.api.auth.registration.RegistrationWizard fun RegistrationWizard.getPendingSignUpSessionId() = - getPrivateProperty("pendingSessionData") - ?.getPrivateProperty("currentSession")?.toString() ?: "" \ No newline at end of file + getPrivateProperty(PENDING_SESSION_PROPERTY_NAME) + ?.getPrivateProperty(CURRENT_SESSION_PROPERTY_NAME)?.toString() ?: "" \ No newline at end of file diff --git a/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt b/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt index 38ae86c6c..5b41d4ef1 100644 --- a/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt +++ b/app/src/main/java/com/futo/circles/feature/create_group/data_source/CreateGroupDataSource.kt @@ -4,7 +4,7 @@ import android.net.Uri import com.futo.circles.extensions.createResult import com.futo.circles.model.UserListItem import com.futo.circles.provider.MatrixSessionProvider -import com.futo.circles.utils.GROUP_TAG +import com.futo.circles.core.GROUP_TAG import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams import org.matrix.android.sdk.api.session.room.model.create.CreateRoomPreset diff --git a/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt b/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt index a8fd123bb..0baed56b3 100644 --- a/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt +++ b/app/src/main/java/com/futo/circles/feature/groups/GroupsViewModel.kt @@ -4,7 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.map import com.futo.circles.extensions.toGroupsList import com.futo.circles.provider.MatrixSessionProvider -import com.futo.circles.utils.GROUP_TAG +import com.futo.circles.core.GROUP_TAG import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams diff --git a/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt b/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt index 4a6a9959e..48ba04c96 100644 --- a/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt +++ b/app/src/main/java/com/futo/circles/feature/select_users/data_source/SelectUsersDataSource.kt @@ -7,7 +7,7 @@ import com.futo.circles.model.InviteMemberListItem import com.futo.circles.model.NoResultsItem import com.futo.circles.model.UserListItem import com.futo.circles.provider.MatrixSessionProvider -import com.futo.circles.utils.DEFAULT_USER_PREFIX +import com.futo.circles.core.DEFAULT_USER_PREFIX import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.* import org.matrix.android.sdk.api.session.user.model.User -- GitLab