mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add missing Authorization header on MAL refresh token request (#7686)
				
					
				
			* Add missing Authorization header on MAL refresh token request.
* Make sure to also close the response when it have failed.
(cherry picked from commit 5315467908)
			
			
This commit is contained in:
		| @@ -22,6 +22,7 @@ import kotlinx.serialization.json.jsonArray | ||||
| import kotlinx.serialization.json.jsonObject | ||||
| import kotlinx.serialization.json.jsonPrimitive | ||||
| import okhttp3.FormBody | ||||
| import okhttp3.Headers | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.Request | ||||
| import okhttp3.RequestBody | ||||
| @@ -256,13 +257,21 @@ class MyAnimeListApi(private val client: OkHttpClient, interceptor: MyAnimeListI | ||||
|             .appendPath("my_list_status") | ||||
|             .build() | ||||
|  | ||||
|         fun refreshTokenRequest(refreshToken: String): Request { | ||||
|         fun refreshTokenRequest(oauth: OAuth): Request { | ||||
|             val formBody: RequestBody = FormBody.Builder() | ||||
|                 .add("client_id", clientId) | ||||
|                 .add("refresh_token", refreshToken) | ||||
|                 .add("refresh_token", oauth.refresh_token) | ||||
|                 .add("grant_type", "refresh_token") | ||||
|                 .build() | ||||
|             return POST("$baseOAuthUrl/token", body = formBody) | ||||
|  | ||||
|             // Add the Authorization header manually as this particular | ||||
|             // request is called by the interceptor itself so it doesn't reach | ||||
|             // the part where the token is added automatically. | ||||
|             val headers = Headers.Builder() | ||||
|                 .add("Authorization", "Bearer ${oauth.access_token}") | ||||
|                 .build() | ||||
|  | ||||
|             return POST("$baseOAuthUrl/token", body = formBody, headers = headers) | ||||
|         } | ||||
|  | ||||
|         private fun getPkceChallengeCode(): String { | ||||
|   | ||||
| @@ -1,9 +1,11 @@ | ||||
| package eu.kanade.tachiyomi.data.track.myanimelist | ||||
|  | ||||
| import eu.kanade.tachiyomi.network.parseAs | ||||
| import kotlinx.serialization.decodeFromString | ||||
| import kotlinx.serialization.json.Json | ||||
| import okhttp3.Interceptor | ||||
| import okhttp3.Response | ||||
| import okhttp3.internal.closeQuietly | ||||
| import uy.kohesive.injekt.injectLazy | ||||
| import java.io.IOException | ||||
|  | ||||
| @@ -24,11 +26,22 @@ class MyAnimeListInterceptor(private val myanimelist: MyAnimeList, private var t | ||||
|         } | ||||
|         // Refresh access token if expired | ||||
|         if (oauth != null && oauth!!.isExpired()) { | ||||
|             chain.proceed(MyAnimeListApi.refreshTokenRequest(oauth!!.refresh_token)).use { | ||||
|                 if (it.isSuccessful) { | ||||
|                     setAuth(json.decodeFromString(it.body!!.string())) | ||||
|             val newOauth = runCatching { | ||||
|                 val oauthResponse = chain.proceed(MyAnimeListApi.refreshTokenRequest(oauth!!)) | ||||
|  | ||||
|                 if (oauthResponse.isSuccessful) { | ||||
|                     oauthResponse.parseAs<OAuth>() | ||||
|                 } else { | ||||
|                     oauthResponse.closeQuietly() | ||||
|                     null | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             if (newOauth.getOrNull() == null) { | ||||
|                 throw IOException("Failed to refresh the access token") | ||||
|             } | ||||
|  | ||||
|             setAuth(newOauth.getOrNull()) | ||||
|         } | ||||
|         if (oauth == null) { | ||||
|             throw IOException("No authentication token") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user