[APIv2/Librus] Update Librus login methods.

This commit is contained in:
Kuba Szczodrzyński 2019-09-24 20:12:25 +02:00
parent e95d9ee514
commit 4cbb573d17
7 changed files with 54 additions and 24 deletions

View File

@ -1,6 +0,0 @@
/*
* Copyright (c) Kuba Szczodrzyński 2019-9-21.
*/
package pl.szczodrzynski.edziennik.api.v2.librus

View File

@ -5,13 +5,34 @@
package pl.szczodrzynski.edziennik.api.v2.librus.data
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.api.interfaces.ProgressCallback
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_API
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_MESSAGES
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_PORTAL
import pl.szczodrzynski.edziennik.api.v2.LOGIN_METHOD_LIBRUS_SYNERGIA
import pl.szczodrzynski.edziennik.api.v2.models.Data
import pl.szczodrzynski.edziennik.currentTimeUnix
import pl.szczodrzynski.edziennik.datamodels.LoginStore
import pl.szczodrzynski.edziennik.datamodels.Profile
import pl.szczodrzynski.edziennik.isNotNullNorEmpty
class DataLibrus(app: App, profile: Profile?, loginStore: LoginStore) : Data(app, profile, loginStore) {
fun isPortalLoginValid() = portalTokenExpiryTime-30 > currentTimeUnix() && portalRefreshToken.isNotNullNorEmpty() && portalAccessToken.isNotNullNorEmpty()
fun isApiLoginValid() = apiTokenExpiryTime-30 > currentTimeUnix() && apiAccessToken.isNotNullNorEmpty()
fun isSynergiaLoginValid() = synergiaSessionIdExpiryTime-30 > currentTimeUnix() && synergiaSessionId.isNotNullNorEmpty()
fun isMessagesLoginValid() = messagesSessionIdExpiryTime-30 > currentTimeUnix() && messagesSessionId.isNotNullNorEmpty()
override fun satisfyLoginMethods() {
if (isPortalLoginValid())
loginMethods += LOGIN_METHOD_LIBRUS_PORTAL
if (isApiLoginValid())
loginMethods += LOGIN_METHOD_LIBRUS_API
if (isSynergiaLoginValid())
loginMethods += LOGIN_METHOD_LIBRUS_SYNERGIA
if (isMessagesLoginValid())
loginMethods += LOGIN_METHOD_LIBRUS_MESSAGES
}
/* _____ _ _
| __ \ | | | |
| |__) |__ _ __| |_ __ _| |

View File

@ -37,7 +37,7 @@ class LoginLibrusApi {
return
}
if (data.apiTokenExpiryTime-30 > currentTimeUnix() && data.apiAccessToken.isNotNullNorEmpty()) {
if (data.isApiLoginValid()) {
onSuccess()
}
else {

View File

@ -20,27 +20,33 @@ class LoginLibrusMessages(val data: DataLibrus, val onSuccess: () -> Unit) {
return@run
}
if (data.messagesSessionIdExpiryTime-30 > currentTimeUnix() && data.messagesSessionId.isNotNullNorEmpty()) {
if (data.isMessagesLoginValid()) {
onSuccess()
}
else {
when (data.loginStore.mode) {
LOGIN_MODE_LIBRUS_SYNERGIA -> loginWithCredentials()
else -> {
loginWithSynergia()
}
if (data.loginMethods.contains(LOGIN_METHOD_LIBRUS_SYNERGIA)) {
loginWithSynergia()
}
else if (data.apiLogin != null && data.apiPassword != null) {
loginWithCredentials()
}
else {
data.error(TAG, ERROR_LOGIN_DATA_MISSING)
}
}
}}
/**
* XML (Flash messages website) login method. Uses a Synergia login and password.
*/
private fun loginWithCredentials() {
if (data.apiLogin == null || data.apiPassword == null) {
if (!data.loginMethods.contains(LOGIN_METHOD_LIBRUS_SYNERGIA)) {
data.error(TAG, ERROR_LOGIN_METHOD_NOT_SATISFIED)
return
}
data.error(TAG, ERROR_LOGIN_DATA_MISSING)
return
}
}
/**
* A login method using the Synergia website (/wiadomosci2 Auto Login).
*/
private fun loginWithSynergia() {
}
}

View File

@ -33,7 +33,7 @@ class LoginLibrusPortal(val data: DataLibrus, val onSuccess: () -> Unit) {
}
// succeed having a non-expired access token and a refresh token
if (data.portalTokenExpiryTime-30 > currentTimeUnix() && data.portalRefreshToken.isNotNullNorEmpty() && data.portalAccessToken.isNotNullNorEmpty()) {
if (data.isPortalLoginValid()) {
onSuccess()
}
else if (data.portalRefreshToken != null) {

View File

@ -29,7 +29,7 @@ class LoginLibrusSynergia(val data: DataLibrus, val onSuccess: () -> Unit) {
return@run
}
if (data.synergiaSessionIdExpiryTime-30 > currentTimeUnix() && data.synergiaSessionId.isNotNullNorEmpty()) {
if (data.isSynergiaLoginValid()) {
onSuccess()
}
else {
@ -48,6 +48,7 @@ class LoginLibrusSynergia(val data: DataLibrus, val onSuccess: () -> Unit) {
/**
* HTML form-based login method. Uses a Synergia login and password.
*/
// TODO if loginWithCredentials fails and it is possible to use API, use it
private fun loginWithCredentials() {
}

View File

@ -25,6 +25,14 @@ open class Data(val app: App, val profile: Profile?, val loginStore: LoginStore)
*/
val loginMethods = mutableListOf<Int>()
/**
* A method which may be overridden in child Data* classes.
*
* Calling it should populate [loginMethods] with all
* already available login methods (e.g. non-expired OAuth token).
*/
open fun satisfyLoginMethods() {}
val teacherList = LongSparseArray<Teacher>()
val subjectList = LongSparseArray<Subject>()
val teamList = mutableListOf<Team>()