From 20ee27da2157da6c2c4559d28e44ae844a1a3a6d Mon Sep 17 00:00:00 2001
From: Ryan Harg <3821-ryan_harg@users.noreply.dev.funkwhale.audio>
Date: Sat, 11 Jun 2022 14:37:38 +0000
Subject: [PATCH] fix authorization

---
 .../audio/funkwhale/ffa/utils/Extensions.kt   |  8 +++-
 .../java/audio/funkwhale/ffa/utils/OAuth.kt   | 37 +++++++++++++------
 2 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt
index 0a250a52..af35567b 100644
--- a/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/utils/Extensions.kt
@@ -76,8 +76,13 @@ fun Request.authorize(context: Context, oAuth: OAuth): Request {
           val old = state.accessToken
           val auth = ClientSecretPost(oAuth.state().clientSecret)
           val done = CompletableDeferred<Boolean>()
+          val tokenService = oAuth.service(context)
 
-          state.performActionWithFreshTokens(oAuth.service(context), auth) { token, _, _ ->
+          state.performActionWithFreshTokens(tokenService, auth) { token, _, e ->
+            if (e != null) {
+              Log.e("Request.authorize()", "performActionWithFreshToken failed: ${e}")
+              Log.e("Request.authorize()", Log.getStackTraceString(e))
+            }
             if (token == old) {
               Log.i("Request.authorize()", "Accesstoken not renewed")
             }
@@ -88,6 +93,7 @@ fun Request.authorize(context: Context, oAuth: OAuth): Request {
             done.complete(true)
           }
           done.await()
+          tokenService.dispose()
           return@runBlocking this
         }
       }
diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt
index 5164358e..9a637a0e 100644
--- a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt
+++ b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt
@@ -98,15 +98,22 @@ class OAuth(private val authorizationServiceFactory: AuthorizationServiceFactory
     return if (state.refreshToken != null) {
       val refreshRequest = state.createTokenRefreshRequest()
       val auth = ClientSecretPost(state.clientSecret)
+      val refreshService = service(context)
       runBlocking {
-        service(context).performTokenRequest(refreshRequest, auth) { response, e ->
-          state.apply {
-            Log.i("OAuth", "applying new authState")
-            update(response, e)
-            save()
+        refreshService.performTokenRequest(refreshRequest, auth) { response, e ->
+          if (e != null) {
+            Log.e("OAuth", "performTokenRequest failed: ${e}")
+            Log.e("OAuth", Log.getStackTraceString(e))
+          } else {
+            state.apply {
+              Log.i("OAuth", "applying new authState")
+              update(response, e)
+              save()
+            }
           }
         }
       }
+      refreshService.dispose()
       true
     } else {
       false
@@ -202,17 +209,23 @@ class OAuth(private val authorizationServiceFactory: AuthorizationServiceFactory
 
       AuthorizationResponse.fromIntent(authorization)?.let {
         val auth = ClientSecretPost(state().clientSecret)
-
-        service(context).performTokenRequest(it.createTokenExchangeRequest(), auth) { response, e ->
-          state
-            .apply {
-              update(response, e)
-              save()
-            }
+        val requestService = service(context)
+
+        requestService.performTokenRequest(it.createTokenExchangeRequest(), auth) { response, e ->
+          if (e != null) {
+            Log.e("FFA", "performTokenRequest failed: ${e}")
+            Log.e("FFA", Log.getStackTraceString(e))
+          } else {
+            state.apply {
+                update(response, e)
+                save()
+              }
+          }
 
           if (response != null) success()
           else Log.e("FFA", "performTokenRequest() not successful")
         }
+        requestService.dispose()
       }
     }
   }
-- 
GitLab