From fb32a1047a17a0f9ba5afe9b48d2f3402223f42f Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:15:19 +1100 Subject: [PATCH] refetch community caps after 400 error --- .../org/session/libsession/database/StorageProtocol.kt | 1 + .../libsession/messaging/open_groups/OpenGroupApi.kt | 10 ++++++++-- .../thoughtcrime/securesms/database/LokiAPIDatabase.kt | 4 ++++ .../org/thoughtcrime/securesms/database/Storage.kt | 4 ++++ 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/session/libsession/database/StorageProtocol.kt b/app/src/main/java/org/session/libsession/database/StorageProtocol.kt index 1d99e66c52..030b5071c9 100644 --- a/app/src/main/java/org/session/libsession/database/StorageProtocol.kt +++ b/app/src/main/java/org/session/libsession/database/StorageProtocol.kt @@ -57,6 +57,7 @@ interface StorageProtocol { // Servers fun setServerCapabilities(server: String, capabilities: List) fun getServerCapabilities(server: String): List? + fun clearServerCapabilities(server: String) // Open Groups suspend fun addOpenGroup(urlAsString: String) diff --git a/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt b/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt index 414e65ed35..95fa616069 100644 --- a/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt +++ b/app/src/main/java/org/session/libsession/messaging/open_groups/OpenGroupApi.kt @@ -372,9 +372,15 @@ object OpenGroupApi { x25519PublicKey = serverPublicKey ) } catch (e: Exception) { - //todo ONION handle the case where we get a 400 with "Invalid authentication: this server requires the use of blinded ids" - call capabilities once and retry < FANCHAO when (e) { - is OnionError -> Log.e("SOGS", "Failed onion request: ${e.message}", e) + is OnionError -> { + Log.e("SOGS", "Failed onion request: ${e.message}", e) + + if (e.status?.code == 400 && + e.status.bodyText?.contains("Invalid authentication: this server requires the use of blinded ids", ignoreCase = true) == true) { + MessagingModuleConfiguration.shared.storage.clearServerCapabilities(request.server) + } + } else -> Log.e("SOGS", "Failed onion request", e) } throw e diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt index 6f2e3ec679..3b41b30e62 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LokiAPIDatabase.kt @@ -513,6 +513,10 @@ class LokiAPIDatabase(context: Context, helper: Provider) : }?.split(",") } + fun clearServerCapabilities(serverName: String) { + writableDatabase.delete(serverCapabilitiesTable, "$server = ?", wrap(serverName)) + } + fun setLastInboxMessageId(serverName: String, newValue: Long) { val database = writableDatabase val row = wrap(mapOf(server to serverName, lastInboxMessageServerId to newValue.toString())) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt index 84719c59d9..f77a908220 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/Storage.kt @@ -864,6 +864,10 @@ open class Storage @Inject constructor( return lokiAPIDatabase.getServerCapabilities(server) } + override fun clearServerCapabilities(server: String) { + lokiAPIDatabase.clearServerCapabilities(server) + } + override fun getAllGroups(includeInactive: Boolean): List { return groupDatabase.getAllGroups(includeInactive) }