diff --git a/src/all/kamyroll/build.gradle b/src/all/kamyroll/build.gradle index 6f00889de..010d20906 100644 --- a/src/all/kamyroll/build.gradle +++ b/src/all/kamyroll/build.gradle @@ -6,7 +6,7 @@ ext { extName = 'Kamyroll' pkgNameSuffix = 'all.kamyroll' extClass = '.Kamyroll' - extVersionCode = 5 + extVersionCode = 6 libVersion = '13' } diff --git a/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/AccessTokenInterceptor.kt b/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/AccessTokenInterceptor.kt index f0077817e..63b3ded39 100644 --- a/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/AccessTokenInterceptor.kt +++ b/src/all/kamyroll/src/eu/kanade/tachiyomi/animeextension/all/kamyroll/AccessTokenInterceptor.kt @@ -1,10 +1,10 @@ package eu.kanade.tachiyomi.animeextension.all.kamyroll import android.content.SharedPreferences -import eu.kanade.tachiyomi.network.POST +import eu.kanade.tachiyomi.network.GET import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json -import okhttp3.FormBody +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Request @@ -13,12 +13,18 @@ import java.net.HttpURLConnection class AccessTokenInterceptor(val baseUrl: String, val json: Json, val preferences: SharedPreferences) : Interceptor { private val deviceId = randomId() + private var accessToken = preferences.getString("access_token", null) ?: "" override fun intercept(chain: Interceptor.Chain): Response { - val accessToken = getAccessToken() - val request = chain.request().newBuilder() - .header("authorization", accessToken) - .build() + if (accessToken.isBlank()) accessToken = refreshAccessToken() + + val request = if (chain.request().url.toString().contains("kamyroll")) { + chain.request().newBuilder() + .header("authorization", accessToken) + .build() + } else { + chain.request() + } val response = chain.proceed(request) if (response.code == HttpURLConnection.HTTP_UNAUTHORIZED) { @@ -27,13 +33,15 @@ class AccessTokenInterceptor(val baseUrl: String, val json: Json, val preference val newAccessToken = refreshAccessToken() // Access token is refreshed in another thread. if (accessToken != newAccessToken) { - return chain.proceed(newRequestWithAccessToken(request, newAccessToken)) + accessToken = newAccessToken + return chain.proceed(newRequestWithAccessToken(chain.request(), newAccessToken)) } // Need to refresh an access token val updatedAccessToken = refreshAccessToken() + accessToken = updatedAccessToken // Retry the request - return chain.proceed(newRequestWithAccessToken(request, updatedAccessToken)) + return chain.proceed(newRequestWithAccessToken(chain.request(), updatedAccessToken)) } } @@ -46,18 +54,14 @@ class AccessTokenInterceptor(val baseUrl: String, val json: Json, val preference .build() } - private fun getAccessToken(): String { - return preferences.getString("access_token", null) ?: "" - } - private fun refreshAccessToken(): String { val client = OkHttpClient().newBuilder().build() - val formData = FormBody.Builder() - .add("device_id", deviceId) - .add("device_type", "aniyomi") - .add("access_token", "HMbQeThWmZq4t7w") + val url = "$baseUrl/auth/v1/token".toHttpUrlOrNull()!!.newBuilder() + .addQueryParameter("device_id", deviceId) + .addQueryParameter("device_type", "aniyomi") + .addQueryParameter("access_token", "HMbQeThWmZq4t7w") .build() - val response = client.newCall(POST(url = "$baseUrl/auth/v1/token", body = formData)).execute() + val response = client.newCall(GET(url.toString())).execute() val parsedJson = json.decodeFromString(response.body!!.string()) val token = "${parsedJson.token_type} ${parsedJson.access_token}" preferences.edit().putString("access_token", token).apply()