mirror of
https://github.com/szkolny-eu/szkolny-android.git
synced 2025-04-02 06:44:27 +02:00
[API/Librus] Fix messages login when ReCaptcha is needed.
This commit is contained in:
parent
c8c758958d
commit
c49755c0eb
@ -127,6 +127,7 @@ const val ERROR_LIBRUS_API_DEVICE_REGISTERED = 185
|
|||||||
const val ERROR_LIBRUS_MESSAGES_NOT_FOUND = 186
|
const val ERROR_LIBRUS_MESSAGES_NOT_FOUND = 186
|
||||||
const val ERROR_LOGIN_LIBRUS_API_INVALID_REQUEST = 187
|
const val ERROR_LOGIN_LIBRUS_API_INVALID_REQUEST = 187
|
||||||
const val ERROR_LIBRUS_MESSAGES_ATTACHMENT_NOT_FOUND = 188
|
const val ERROR_LIBRUS_MESSAGES_ATTACHMENT_NOT_FOUND = 188
|
||||||
|
const val ERROR_LOGIN_LIBRUS_MESSAGES_TIMEOUT = 189
|
||||||
|
|
||||||
const val ERROR_LOGIN_MOBIDZIENNIK_WEB_INVALID_LOGIN = 201
|
const val ERROR_LOGIN_MOBIDZIENNIK_WEB_INVALID_LOGIN = 201
|
||||||
const val ERROR_LOGIN_MOBIDZIENNIK_WEB_OLD_PASSWORD = 202
|
const val ERROR_LOGIN_MOBIDZIENNIK_WEB_OLD_PASSWORD = 202
|
||||||
|
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Kuba Szczodrzyński 2020-5-8.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pl.szczodrzynski.edziennik.data.api.edziennik.librus
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.webkit.WebView
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import pl.szczodrzynski.edziennik.startCoroutineTimer
|
||||||
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
|
||||||
|
class LibrusRecaptchaHelper(
|
||||||
|
val context: Context,
|
||||||
|
url: String,
|
||||||
|
html: String,
|
||||||
|
val onSuccess: (url: String) -> Unit,
|
||||||
|
val onTimeout: () -> Unit
|
||||||
|
) : CoroutineScope {
|
||||||
|
companion object {
|
||||||
|
private const val TAG = "LibrusRecaptchaHelper"
|
||||||
|
}
|
||||||
|
|
||||||
|
private val job: Job = Job()
|
||||||
|
override val coroutineContext: CoroutineContext
|
||||||
|
get() = job + Dispatchers.Default
|
||||||
|
|
||||||
|
private val webView by lazy {
|
||||||
|
WebView(context).also {
|
||||||
|
it.settings.javaScriptEnabled = true
|
||||||
|
it.webViewClient = WebViewClient()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var timeout: Job? = null
|
||||||
|
|
||||||
|
inner class WebViewClient : android.webkit.WebViewClient() {
|
||||||
|
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
|
||||||
|
timeout?.cancel()
|
||||||
|
onSuccess(url)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
launch(Dispatchers.Main) {
|
||||||
|
webView.loadDataWithBaseURL(url, html, "text/html", "UTF-8", null)
|
||||||
|
}
|
||||||
|
timeout = startCoroutineTimer(delayMillis = 10000L) {
|
||||||
|
onTimeout()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@ import im.wangchao.mhttp.body.MediaTypeUtils
|
|||||||
import im.wangchao.mhttp.callback.TextCallbackHandler
|
import im.wangchao.mhttp.callback.TextCallbackHandler
|
||||||
import pl.szczodrzynski.edziennik.data.api.*
|
import pl.szczodrzynski.edziennik.data.api.*
|
||||||
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.DataLibrus
|
||||||
|
import pl.szczodrzynski.edziennik.data.api.edziennik.librus.LibrusRecaptchaHelper
|
||||||
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
import pl.szczodrzynski.edziennik.data.api.models.ApiError
|
||||||
import pl.szczodrzynski.edziennik.getUnixDate
|
import pl.szczodrzynski.edziennik.getUnixDate
|
||||||
import pl.szczodrzynski.edziennik.utils.Utils.d
|
import pl.szczodrzynski.edziennik.utils.Utils.d
|
||||||
@ -35,6 +36,19 @@ class LibrusLoginMessages(val data: DataLibrus, val onSuccess: () -> Unit) {
|
|||||||
onSuccess()
|
onSuccess()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
text?.contains("grecaptcha.ready") == true -> {
|
||||||
|
val url = response?.request()?.url()?.toString() ?: run {
|
||||||
|
data.error(TAG, ERROR_LIBRUS_MESSAGES_OTHER, response, text)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
LibrusRecaptchaHelper(data.app, url, text, onSuccess = { newUrl ->
|
||||||
|
loginWithSynergia(newUrl)
|
||||||
|
}, onTimeout = {
|
||||||
|
data.error(TAG, ERROR_LOGIN_LIBRUS_MESSAGES_TIMEOUT, response, text)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
text?.contains("<status>ok</status>") == true -> {
|
text?.contains("<status>ok</status>") == true -> {
|
||||||
saveSessionId(response, text)
|
saveSessionId(response, text)
|
||||||
onSuccess()
|
onSuccess()
|
||||||
@ -46,6 +60,7 @@ class LibrusLoginMessages(val data: DataLibrus, val onSuccess: () -> Unit) {
|
|||||||
text?.contains("<status>error</status>") == true -> data.error(TAG, ERROR_LIBRUS_MESSAGES_ERROR, response, text)
|
text?.contains("<status>error</status>") == true -> data.error(TAG, ERROR_LIBRUS_MESSAGES_ERROR, response, text)
|
||||||
text?.contains("<type>eVarWhitThisNameNotExists</type>") == true -> data.error(TAG, ERROR_LIBRUS_MESSAGES_ACCESS_DENIED, response, text)
|
text?.contains("<type>eVarWhitThisNameNotExists</type>") == true -> data.error(TAG, ERROR_LIBRUS_MESSAGES_ACCESS_DENIED, response, text)
|
||||||
text?.contains("<error>") == true -> data.error(TAG, ERROR_LIBRUS_MESSAGES_OTHER, response, text)
|
text?.contains("<error>") == true -> data.error(TAG, ERROR_LIBRUS_MESSAGES_OTHER, response, text)
|
||||||
|
else -> data.error(TAG, ERROR_LIBRUS_MESSAGES_OTHER, response, text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,6 +99,7 @@
|
|||||||
<string name="error_186" translatable="false">ERROR_LIBRUS_MESSAGES_NOT_FOUND</string>
|
<string name="error_186" translatable="false">ERROR_LIBRUS_MESSAGES_NOT_FOUND</string>
|
||||||
<string name="error_187" translatable="false">ERROR_LOGIN_LIBRUS_API_INVALID_REQUEST</string>
|
<string name="error_187" translatable="false">ERROR_LOGIN_LIBRUS_API_INVALID_REQUEST</string>
|
||||||
<string name="error_188" translatable="false">ERROR_LIBRUS_MESSAGES_ATTACHMENT_NOT_FOUND</string>
|
<string name="error_188" translatable="false">ERROR_LIBRUS_MESSAGES_ATTACHMENT_NOT_FOUND</string>
|
||||||
|
<string name="error_189" translatable="false">ERROR_LOGIN_LIBRUS_MESSAGES_TIMEOUT</string>
|
||||||
|
|
||||||
<string name="error_201" translatable="false">ERROR_LOGIN_MOBIDZIENNIK_WEB_INVALID_LOGIN</string>
|
<string name="error_201" translatable="false">ERROR_LOGIN_MOBIDZIENNIK_WEB_INVALID_LOGIN</string>
|
||||||
<string name="error_202" translatable="false">ERROR_LOGIN_MOBIDZIENNIK_WEB_OLD_PASSWORD</string>
|
<string name="error_202" translatable="false">ERROR_LOGIN_MOBIDZIENNIK_WEB_OLD_PASSWORD</string>
|
||||||
@ -277,6 +278,7 @@
|
|||||||
<string name="error_186_reason">Nie znaleziono wiadomości. Mogła zostać usunięta.</string>
|
<string name="error_186_reason">Nie znaleziono wiadomości. Mogła zostać usunięta.</string>
|
||||||
<string name="error_187_reason">Nieprawidłowe dane dostępu. Sprawdź poprawność wprowadzonych danych.</string>
|
<string name="error_187_reason">Nieprawidłowe dane dostępu. Sprawdź poprawność wprowadzonych danych.</string>
|
||||||
<string name="error_188_reason">Nie znaleziono załącznika. Mógł zostać usunięty.</string>
|
<string name="error_188_reason">Nie znaleziono załącznika. Mógł zostać usunięty.</string>
|
||||||
|
<string name="error_189_reason">Logowanie Librus Wiadomości: ReCaptcha przekroczono czas oczekiwania.</string>
|
||||||
|
|
||||||
<string name="error_201_reason">Nieprawidłowy login lub hasło</string>
|
<string name="error_201_reason">Nieprawidłowy login lub hasło</string>
|
||||||
<string name="error_202_reason">Podano stare hasło</string>
|
<string name="error_202_reason">Podano stare hasło</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user