From 1411d49107989888c3c622b4120761b8064acdf5 Mon Sep 17 00:00:00 2001 From: Hafiz Date: Sun, 13 Jul 2025 14:03:27 -0500 Subject: [PATCH] add language-agnostic invalid_credentials error handling --- .../data/implementation/ApiClientImpl.kt | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt index cc1de1710..ebae405fb 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/data/implementation/ApiClientImpl.kt @@ -161,24 +161,16 @@ class ApiClientImpl( val path = response.request.url.encodedPath if (!path.contains("/user/auth/update-password") && !path.contains("group-plans")) { - val bodyStr = try { - response.peekBody(1024).string() - } catch (_: Exception) { - "" - } + val bodyStr = runCatching { response.peekBody(1024).string() }.getOrDefault("") - val (errField, msgField) = try { - val obj = JSONObject(bodyStr) - obj.optString("error", "") to obj.optString("message", "") - } catch (_: Exception) { - "" to "" - } - - val shouldLogout = errField.equals("missingAuthHeaders", ignoreCase = true) - || errField.equals("invalidCredentials", ignoreCase = true) - || msgField.contains("invalidCredentials", ignoreCase = true) - || msgField.contains("Missing authentication headers", ignoreCase = true) - || msgField.contains("There is no account that uses those credentials", ignoreCase = true) + val (errField, _) = runCatching { + JSONObject(bodyStr).let { + it.optString("error", "") to it.optString("message", "") + } + }.getOrDefault("" to "") + + // logout if language agnostic "invalid_credentials" error is returned + val shouldLogout = errField.equals("invalid_credentials", ignoreCase = true) if (shouldLogout) { HabiticaBaseApplication.logout(context)