Skip to content

Commit b022541

Browse files
committed
fix: delete client via /auth/logout
1 parent 9b62477 commit b022541

1 file changed

Lines changed: 25 additions & 12 deletions

File tree

app/src/main/kotlin/com/github/gotify/messages/MessagesActivity.kt

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,16 @@ import com.github.gotify.BuildConfig
3636
import com.github.gotify.CoilInstance
3737
import com.github.gotify.MissedMessageUtil
3838
import com.github.gotify.R
39+
import com.github.gotify.Settings
3940
import com.github.gotify.Utils
4041
import com.github.gotify.Utils.launchCoroutine
4142
import com.github.gotify.api.Api
4243
import com.github.gotify.api.ApiException
4344
import com.github.gotify.api.Callback
4445
import com.github.gotify.api.ClientFactory
46+
import com.github.gotify.client.ApiClient
4547
import com.github.gotify.client.api.ApplicationApi
48+
import com.github.gotify.client.api.AuthApi
4649
import com.github.gotify.client.api.ClientApi
4750
import com.github.gotify.client.api.MessageApi
4851
import com.github.gotify.client.model.Application
@@ -605,17 +608,31 @@ internal class MessagesActivity :
605608

606609
private fun deleteClientAndNavigateToLogin() {
607610
val settings = viewModel.settings
608-
val api = ClientFactory.clientToken(settings).createService(ClientApi::class.java)
611+
val tokenClient = ClientFactory.clientToken(settings)
609612
stopService(Intent(this@MessagesActivity, WebSocketService::class.java))
610613
try {
611-
val clients = Api.execute(api.clients)
612-
var currentClient: Client? = null
613-
for (client in clients) {
614-
if (client.token == settings.token) {
615-
currentClient = client
616-
break
617-
}
614+
Logger.info("Logging out...")
615+
val authApi = tokenClient.createService(AuthApi::class.java)
616+
Api.execute(authApi.logout())
617+
} catch (e: ApiException) {
618+
if (e.code == 404) {
619+
Logger.info("Logout endpoint not available, falling back to client deletion")
620+
deleteCurrentClient(tokenClient, settings)
621+
} else {
622+
Logger.error(e, "Could not logout")
618623
}
624+
}
625+
626+
viewModel.settings.clear()
627+
startActivity(Intent(this@MessagesActivity, LoginActivity::class.java))
628+
finish()
629+
}
630+
631+
private fun deleteCurrentClient(tokenClient: ApiClient, settings: Settings) {
632+
val api = tokenClient.createService(ClientApi::class.java)
633+
try {
634+
val clients = Api.execute(api.clients)
635+
val currentClient = clients.firstOrNull { it.token == settings.token }
619636
if (currentClient != null) {
620637
Logger.info("Delete client with id " + currentClient.id)
621638
Api.execute(api.deleteClient(currentClient.id))
@@ -625,10 +642,6 @@ internal class MessagesActivity :
625642
} catch (e: ApiException) {
626643
Logger.error(e, "Could not delete client")
627644
}
628-
629-
viewModel.settings.clear()
630-
startActivity(Intent(this@MessagesActivity, LoginActivity::class.java))
631-
finish()
632645
}
633646

634647
private fun updateMessagesAndStopLoading(messageWithImages: List<MessageWithImage>) {

0 commit comments

Comments
 (0)