diff --git a/app/build.gradle b/app/build.gradle index c60f45f..db4888a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -68,8 +68,8 @@ dependencies { implementation 'com.github.bumptech.glide:glide:4.12.0' implementation 'jp.wasabeef:glide-transformations:4.3.0' - implementation 'com.afollestad.material-dialogs:core:3.3.0' - implementation 'com.afollestad.material-dialogs:bottomsheets:3.3.0' + implementation 'com.afollestad.material-dialogs:core:3.3.0' // TODO remove once unused + implementation 'com.afollestad.material-dialogs:bottomsheets:3.3.0' // TODO remove once unused implementation "io.ktor:ktor-client-core:$ktor_version" implementation "io.ktor:ktor-client-android:$ktor_version" diff --git a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt index d2b24bb..c1e9992 100644 --- a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt +++ b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt @@ -52,6 +52,8 @@ object Crunchyroll { } } private const val baseUrl = "https://beta-api.crunchyroll.com" + private const val basicApiTokenUrl = "https://gitlab.com/-/snippets/2274956/raw/main/snippetfile1.txt" + private var basicApiToken: String = "" private lateinit var token: Token private var tokenValidUntil: Long = 0 @@ -64,6 +66,19 @@ object Crunchyroll { private val browsingCache = arrayListOf() + /** + * Load the pai token, see: + * https://git.mosad.xyz/mosad/NonePublicIssues/issues/1 + * + * TODO handle empty file + */ + fun initBasicApiToken() = runBlocking { + withContext(Dispatchers.IO) { + basicApiToken = (client.get(basicApiTokenUrl) as HttpResponse).readText() + Log.i(TAG, "basic auth token: $basicApiToken") + } + } + /** * Login to the crunchyroll API. * @@ -85,7 +100,7 @@ object Crunchyroll { withContext(Dispatchers.IO) { // TODO handle exceptions val response: HttpResponse = client.submitForm("$baseUrl$tokenEndpoint", formParameters = formData) { - header("Authorization", "Basic ") + header("Authorization", "Basic $basicApiToken") } token = response.receive() tokenValidUntil = System.currentTimeMillis() + (token.expiresIn * 1000) diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt b/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt index 9bd2b4a..863f6f6 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/main/MainActivity.kt @@ -137,6 +137,9 @@ class MainActivity : AppCompatActivity(), NavigationBarView.OnItemSelectedListen Preferences.load(this) EncryptedPreferences.readCredentials(this) + // always initialize the api token + Crunchyroll.initBasicApiToken() + // show onboarding if no password is set, or login fails if (EncryptedPreferences.password.isEmpty() || !Crunchyroll.login( EncryptedPreferences.login,