From 0a2323acf369093abc00067ff708adf58247dfe5 Mon Sep 17 00:00:00 2001 From: Kacper Ziubryniewicz Date: Tue, 12 May 2020 20:25:45 +0200 Subject: [PATCH] [API/Podlasie] Implement first login and login page. --- .../pl/szczodrzynski/edziennik/Extensions.kt | 2 + .../edziennik/data/api/Constants.kt | 4 + .../edziennik/data/api/Errors.kt | 7 ++ .../edziennik/data/api/LoginMethods.kt | 1 + .../data/api/edziennik/EdziennikTask.kt | 2 + .../api/edziennik/podlasie/DataPodlasie.kt | 60 +++++++++- .../data/api/edziennik/podlasie/Podlasie.kt | 17 ++- .../edziennik/podlasie/PodlasieFeatures.kt | 9 ++ .../edziennik/podlasie/data/PodlasieApi.kt | 107 ++++++++++++++++++ .../edziennik/podlasie/data/PodlasieData.kt | 42 +++++++ .../podlasie/firstlogin/PodlasieFirstLogin.kt | 59 +++++++++- .../edziennik/podlasie/login/PodlasieLogin.kt | 54 +++++++++ .../podlasie/login/PodlasieLoginApi.kt | 10 +- .../edziennik/ui/modules/login/LoginInfo.kt | 28 +++++ .../drawable-nodpi/login_logo_podlasie.png | Bin 0 -> 34964 bytes .../login_mode_podlasie_api.png | Bin 0 -> 27362 bytes app/src/main/res/values/errors.xml | 18 +++ app/src/main/res/values/strings.xml | 4 + 18 files changed, 408 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/PodlasieFeatures.kt create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieApi.kt create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieData.kt create mode 100644 app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLogin.kt create mode 100644 app/src/main/res/drawable-nodpi/login_logo_podlasie.png create mode 100644 app/src/main/res/drawable-xhdpi/login_mode_podlasie_api.png diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt index e95854e7..2443679b 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/Extensions.kt @@ -1245,3 +1245,5 @@ val SwipeRefreshLayout.onScrollListener: RecyclerView.OnScrollListener operator fun Iterable>.get(key: K): V? { return firstOrNull { it.first == key }?.second } + +fun ByteArray.toHexString() = joinToString("") { "%02x".format(it) } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt index c2c5e47e..ee52cf1a 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Constants.kt @@ -118,3 +118,7 @@ const val VULCAN_WEB_ENDPOINT_LUCKY_NUMBER = "Start.mvc/GetKidsLuckyNumbers" const val VULCAN_WEB_ENDPOINT_REGISTER_DEVICE = "RejestracjaUrzadzeniaToken.mvc/Get" const val EDUDZIENNIK_USER_AGENT = "Szkolny.eu/${BuildConfig.VERSION_NAME}" + +const val PODLASIE_API_VERSION = "1.0.31" +const val PODLASIE_API_URL = "https://cpdklaser.zeto.bialystok.pl/api" +const val PODLASIE_API_USER_ENDPOINT = "/pobierzDaneUcznia" diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt index 55d50c11..8301f62f 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/Errors.kt @@ -200,6 +200,12 @@ const val ERROR_EDUDZIENNIK_WEB_LIMITED_ACCESS = 521 const val ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED = 522 const val ERROR_EDUDZIENNIK_WEB_TEAM_MISSING = 530 +const val ERROR_LOGIN_PODLASIE_API_INVALID_TOKEN = 601 +const val ERROR_LOGIN_PODLASIE_API_DEVICE_LIMIT = 602 +const val ERROR_PODLASIE_API_NO_TOKEN = 630 +const val ERROR_PODLASIE_API_OTHER = 631 +const val ERROR_PODLASIE_API_DATA_MISSING = 632 + const val ERROR_TEMPLATE_WEB_OTHER = 801 const val EXCEPTION_API_TASK = 900 @@ -222,5 +228,6 @@ const val EXCEPTION_EDUDZIENNIK_FILE_REQUEST = 921 const val ERROR_ONEDRIVE_DOWNLOAD = 930 const val EXCEPTION_VULCAN_WEB_LOGIN = 931 const val EXCEPTION_VULCAN_WEB_REQUEST = 932 +const val EXCEPTION_PODLASIE_API_REQUEST = 940 const val LOGIN_NO_ARGUMENTS = 1201 diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt index 58159e71..24444a58 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/LoginMethods.kt @@ -143,6 +143,7 @@ val edudziennikLoginMethods = listOf( ) const val LOGIN_TYPE_PODLASIE = 6 +const val LOGIN_MODE_PODLASIE_API = 0 const val LOGIN_METHOD_PODLASIE_API = 100 val podlasieLoginMethods = listOf( LoginMethod(LOGIN_TYPE_PODLASIE, LOGIN_METHOD_PODLASIE_API, PodlasieLoginApi::class.java) diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt index 13de2f17..bd609cdb 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/EdziennikTask.kt @@ -12,6 +12,7 @@ import pl.szczodrzynski.edziennik.data.api.edziennik.edudziennik.Edudziennik import pl.szczodrzynski.edziennik.data.api.edziennik.idziennik.Idziennik import pl.szczodrzynski.edziennik.data.api.edziennik.librus.Librus import pl.szczodrzynski.edziennik.data.api.edziennik.mobidziennik.Mobidziennik +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.Podlasie import pl.szczodrzynski.edziennik.data.api.edziennik.template.Template import pl.szczodrzynski.edziennik.data.api.edziennik.vulcan.Vulcan import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback @@ -74,6 +75,7 @@ open class EdziennikTask(override val profileId: Int, val request: Any) : IApiTa LOGIN_TYPE_VULCAN -> Vulcan(app, profile, loginStore, taskCallback) LOGIN_TYPE_IDZIENNIK -> Idziennik(app, profile, loginStore, taskCallback) LOGIN_TYPE_EDUDZIENNIK -> Edudziennik(app, profile, loginStore, taskCallback) + LOGIN_TYPE_PODLASIE -> Podlasie(app, profile, loginStore, taskCallback) LOGIN_TYPE_TEMPLATE -> Template(app, profile, loginStore, taskCallback) else -> null } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/DataPodlasie.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/DataPodlasie.kt index a56c65bd..45edda13 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/DataPodlasie.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/DataPodlasie.kt @@ -1,7 +1,12 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie import pl.szczodrzynski.edziennik.App -import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_TEMPLATE_API +import pl.szczodrzynski.edziennik.crc32 +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_PODLASIE_API import pl.szczodrzynski.edziennik.data.api.models.Data import pl.szczodrzynski.edziennik.data.db.entity.LoginStore import pl.szczodrzynski.edziennik.data.db.entity.Profile @@ -14,12 +19,10 @@ class DataPodlasie(app: App, profile: Profile?, loginStore: LoginStore) : Data(a override fun satisfyLoginMethods() { loginMethods.clear() if (isApiLoginValid()) - loginMethods += LOGIN_METHOD_TEMPLATE_API + loginMethods += LOGIN_METHOD_PODLASIE_API } - override fun generateUserCode(): String { - TODO("Not yet implemented") - } + override fun generateUserCode(): String = "$schoolShortName:$loginShort:${studentId?.crc32()}" /* _ /\ (_) @@ -33,4 +36,51 @@ class DataPodlasie(app: App, profile: Profile?, loginStore: LoginStore) : Data(a var apiToken: String? get() { mApiToken = mApiToken ?: loginStore.getLoginData("apiToken", null); return mApiToken } set(value) { loginStore.putLoginData("apiToken", value); mApiToken = value } + + private var mApiUrl: String? = null + var apiUrl: String? + get() { mApiUrl = mApiUrl ?: profile?.getStudentData("apiUrl", null); return mApiUrl } + set(value) { profile?.putStudentData("apiUrl", value) ?: return; mApiUrl = value } + + /* ____ _ _ + / __ \| | | | + | | | | |_| |__ ___ _ __ + | | | | __| '_ \ / _ \ '__| + | |__| | |_| | | | __/ | + \____/ \__|_| |_|\___|*/ + private var mStudentId: String? = null + var studentId: String? + get() { mStudentId = mStudentId ?: profile?.getStudentData("studentId", null); return mStudentId } + set(value) { profile?.putStudentData("studentId", value) ?: return; mStudentId = value } + + private var mStudentLogin: String? = null + var studentLogin: String? + get() { mStudentLogin = mStudentLogin ?: profile?.getStudentData("studentLogin", null); return mStudentLogin } + set(value) { profile?.putStudentData("studentLogin", value) ?: return; mStudentLogin = value } + + private var mSchoolName: String? = null + var schoolName: String? + get() { mSchoolName = mSchoolName ?: profile?.getStudentData("schoolName", null); return mSchoolName } + set(value) { profile?.putStudentData("schoolName", value) ?: return; mSchoolName = value } + + private var mClassName: String? = null + var className: String? + get() { mClassName = mClassName ?: profile?.getStudentData("className", null); return mClassName } + set(value) { profile?.putStudentData("className", value) ?: return; mClassName = value } + + private var mSchoolYear: String? = null + var schoolYear: String? + get() { mSchoolYear = mSchoolYear ?: profile?.getStudentData("schoolYear", null); return mSchoolYear } + set(value) { profile?.putStudentData("schoolYear", value) ?: return; mSchoolYear = value } + + private var mCurrentSemester: Int? = null + var currentSemester: Int + get() { mCurrentSemester = mCurrentSemester ?: profile?.getStudentData("currentSemester", 0); return mCurrentSemester ?: 0 } + set(value) { profile?.putStudentData("currentSemester", value) ?: return; mCurrentSemester = value } + + val schoolShortName: String? + get() = studentLogin?.replace(".podlaskie.pl", "") + + val loginShort: String? + get() = studentLogin?.split('@')?.get(0) } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/Podlasie.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/Podlasie.kt index 99c02eec..b2b5cf31 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/Podlasie.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/Podlasie.kt @@ -1,14 +1,19 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie import com.google.gson.JsonObject import pl.szczodrzynski.edziennik.App +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.data.PodlasieData import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.firstlogin.PodlasieFirstLogin -import pl.szczodrzynski.edziennik.data.api.edziennik.template.TemplateFeatures +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.login.PodlasieLogin import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikCallback import pl.szczodrzynski.edziennik.data.api.interfaces.EdziennikInterface import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.data.api.podlasieLoginMethods import pl.szczodrzynski.edziennik.data.api.prepare -import pl.szczodrzynski.edziennik.data.api.templateLoginMethods import pl.szczodrzynski.edziennik.data.db.entity.LoginStore import pl.szczodrzynski.edziennik.data.db.entity.Profile import pl.szczodrzynski.edziennik.data.db.entity.Teacher @@ -47,10 +52,14 @@ class Podlasie(val app: App, val profile: Profile?, val loginStore: LoginStore, |__*/ override fun sync(featureIds: List, viewId: Int?, onlyEndpoints: List?, arguments: JsonObject?) { data.arguments = arguments - data.prepare(templateLoginMethods, TemplateFeatures, featureIds, viewId, onlyEndpoints) + data.prepare(podlasieLoginMethods, PodlasieFeatures, featureIds, viewId, onlyEndpoints) Utils.d(TAG, "LoginMethod IDs: ${data.targetLoginMethodIds}") Utils.d(TAG, "Endpoint IDs: ${data.targetEndpointIds}") - + PodlasieLogin(data) { + PodlasieData(data) { + completed() + } + } } override fun getMessage(message: MessageFull) { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/PodlasieFeatures.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/PodlasieFeatures.kt new file mode 100644 index 00000000..c799753c --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/PodlasieFeatures.kt @@ -0,0 +1,9 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie + +import pl.szczodrzynski.edziennik.data.api.models.Feature + +val PodlasieFeatures = listOf() diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieApi.kt new file mode 100644 index 00000000..9ebf57b1 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieApi.kt @@ -0,0 +1,107 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.data + +import com.google.gson.JsonObject +import im.wangchao.mhttp.Request +import im.wangchao.mhttp.RequestParams +import im.wangchao.mhttp.Response +import im.wangchao.mhttp.callback.JsonCallbackHandler +import pl.szczodrzynski.edziennik.data.api.* +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.DataPodlasie +import pl.szczodrzynski.edziennik.data.api.models.ApiError +import pl.szczodrzynski.edziennik.getInt +import pl.szczodrzynski.edziennik.getJsonObject +import pl.szczodrzynski.edziennik.toHexString +import pl.szczodrzynski.edziennik.utils.Utils +import java.security.MessageDigest +import java.text.SimpleDateFormat +import java.util.* + +open class PodlasieApi(open val data: DataPodlasie, open val lastSync: Long?) { + companion object { + const val TAG = "PodlasieApi" + } + + val profileId + get() = data.profile?.id ?: -1 + + val profile + get() = data.profile + + fun apiGet(tag: String, endpoint: String, onSuccess: (json: JsonObject) -> Unit) { + val url = PODLASIE_API_URL + endpoint + + Utils.d(tag, "Request: Podlasie/Api - $url") + + if (data.apiToken == null) { + data.error(tag, ERROR_PODLASIE_API_NO_TOKEN) + return + } + + val callback = object : JsonCallbackHandler() { + override fun onSuccess(json: JsonObject?, response: Response?) { + if (json == null || response == null) { + data.error(ApiError(TAG, ERROR_RESPONSE_EMPTY) + .withResponse(response)) + return + } + + val error = json.getJsonObject("system_message")?.getInt("code") + + error?.let { code -> + when (code) { + 0 -> ERROR_PODLASIE_API_DATA_MISSING + 4 -> ERROR_LOGIN_PODLASIE_API_DEVICE_LIMIT + 5 -> ERROR_LOGIN_PODLASIE_API_INVALID_TOKEN + 200 -> null // Not an error + else -> ERROR_PODLASIE_API_OTHER + }?.let { errorCode -> + data.error(ApiError(tag, errorCode) + .withApiResponse(json) + .withResponse(response)) + return@onSuccess + } + } + + try { + onSuccess(json) + } catch (e: Exception) { + data.error(ApiError(tag, EXCEPTION_PODLASIE_API_REQUEST) + .withResponse(response) + .withThrowable(e) + .withApiResponse(json)) + } + } + + override fun onFailure(response: Response?, throwable: Throwable?) { + data.error(ApiError(tag, ERROR_REQUEST_FAILURE) + .withResponse(response) + .withThrowable(throwable)) + } + } + + Request.builder() + .url(url) + .userAgent(SYSTEM_USER_AGENT) + .requestParams(RequestParams(mapOf( + "token" to data.apiToken, + "securityToken" to getSecurityToken(), + "mobileId" to data.app.deviceId, + "ver" to PODLASIE_API_VERSION + ))) + .callback(callback) + .build() + .enqueue() + } + + private fun getSecurityToken(): String { + val format = SimpleDateFormat("yyyy-MM-dd HH", Locale.ENGLISH).format(Calendar.getInstance().time.time) + val instance = MessageDigest.getInstance("SHA-256") + val digest = instance.digest("-EYlwYu8u16miVd8tT?oO7cvoUVQrQN0vr!$format".toByteArray()).toHexString() + val digest2 = instance.digest(data.apiToken!!.toByteArray()).toHexString() + return instance.digest("$digest$digest2".toByteArray()).toHexString() + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieData.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieData.kt new file mode 100644 index 00000000..98cbb539 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/data/PodlasieData.kt @@ -0,0 +1,42 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.data + +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.DataPodlasie +import pl.szczodrzynski.edziennik.utils.Utils + +class PodlasieData(val data: DataPodlasie, val onSuccess: () -> Unit) { + companion object { + const val TAG = "PodlasieData" + } + + init { + nextEndpoint(onSuccess) + } + + private fun nextEndpoint(onSuccess: () -> Unit) { + if (data.targetEndpointIds.isEmpty()) { + onSuccess() + return + } + if (data.cancelled) { + onSuccess() + return + } + val id = data.targetEndpointIds.firstKey() + val lastSync = data.targetEndpointIds.remove(id) + useEndpoint(id, lastSync) { + data.progress(data.progressStep) + nextEndpoint(onSuccess) + } + } + + private fun useEndpoint(endpointId: Int, lastSync: Long?, onSuccess: (endpointId: Int) -> Unit) { + Utils.d(TAG, "Using endpoint $endpointId. Last sync time = $lastSync") + when (endpointId) { + else -> onSuccess(endpointId) + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/firstlogin/PodlasieFirstLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/firstlogin/PodlasieFirstLogin.kt index 5603222b..bedd9a25 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/firstlogin/PodlasieFirstLogin.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/firstlogin/PodlasieFirstLogin.kt @@ -1,13 +1,70 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.firstlogin +import org.greenrobot.eventbus.EventBus +import pl.szczodrzynski.edziennik.* +import pl.szczodrzynski.edziennik.data.api.LOGIN_TYPE_PODLASIE +import pl.szczodrzynski.edziennik.data.api.PODLASIE_API_USER_ENDPOINT import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.DataPodlasie +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.data.PodlasieApi +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.login.PodlasieLoginApi +import pl.szczodrzynski.edziennik.data.api.events.FirstLoginFinishedEvent +import pl.szczodrzynski.edziennik.data.db.entity.Profile class PodlasieFirstLogin(val data: DataPodlasie, val onSuccess: () -> Unit) { companion object { const val TAG = "PodlasieFirstLogin" } + private val api = PodlasieApi(data, null) + init { - // TODO + val loginStoreId = data.loginStore.id + val loginStoreType = LOGIN_TYPE_PODLASIE + + PodlasieLoginApi(data) { + api.apiGet(TAG, PODLASIE_API_USER_ENDPOINT) { json -> + val uuid = json.getString("Uuid") + val login = json.getString("Login") + val firstName = json.getString("FirstName") + val lastName = json.getString("LastName") + val studentNameLong = "$firstName $lastName".fixName() + val studentNameShort = studentNameLong.getShortName() + val schoolName = json.getString("SchoolName") + val className = json.getString("SchoolClass") + val schoolYear = json.getString("ActualSchoolYear")?.replace(' ', '/') + val semester = json.getString("ActualTermShortcut")?.length + val apiUrl = json.getString("URL") + + val profile = Profile( + loginStoreId, + loginStoreId, + loginStoreType, + studentNameLong, + login, + studentNameLong, + studentNameShort, + null + ).apply { + studentData["studentId"] = uuid + studentData["studentLogin"] = login + studentData["schoolName"] = schoolName + studentData["className"] = className + studentData["schoolYear"] = schoolYear + studentData["currentSemester"] = semester ?: 1 + studentData["apiUrl"] = apiUrl + + schoolYear?.split('/')?.get(0)?.toInt()?.let { + studentSchoolYearStart = it + } + } + + EventBus.getDefault().postSticky(FirstLoginFinishedEvent(listOf(profile), data.loginStore)) + onSuccess() + } + } } } diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLogin.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLogin.kt new file mode 100644 index 00000000..406bb997 --- /dev/null +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLogin.kt @@ -0,0 +1,54 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + +package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.login + +import pl.szczodrzynski.edziennik.R +import pl.szczodrzynski.edziennik.data.api.LOGIN_METHOD_PODLASIE_API +import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.DataPodlasie +import pl.szczodrzynski.edziennik.utils.Utils + +class PodlasieLogin(val data: DataPodlasie, val onSuccess: () -> Unit) { + companion object { + const val TAG = "PodlasieLogin" + } + + private var cancelled = false + + init { + nextLoginMethod(onSuccess) + } + + private fun nextLoginMethod(onSuccess: () -> Unit) { + if (data.targetLoginMethodIds.isEmpty()) { + onSuccess() + return + } + if (cancelled) { + onSuccess() + return + } + useLoginMethod(data.targetLoginMethodIds.removeAt(0)) { usedMethodId -> + data.progress(data.progressStep) + if (usedMethodId != -1) + data.loginMethods.add(usedMethodId) + nextLoginMethod(onSuccess) + } + } + + private fun useLoginMethod(loginMethodId: Int, onSuccess: (usedMethodId: Int) -> Unit) { + // this should never be true + if (data.loginMethods.contains(loginMethodId)) { + onSuccess(-1) + return + } + Utils.d(TAG, "Using login method $loginMethodId") + when (loginMethodId) { + LOGIN_METHOD_PODLASIE_API -> { + data.startProgress(R.string.edziennik_progress_login_podlasie_api) + PodlasieLoginApi(data) { onSuccess(loginMethodId) } + } + } + } +} diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLoginApi.kt b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLoginApi.kt index 70c5258a..6eb70d06 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLoginApi.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/data/api/edziennik/podlasie/login/PodlasieLoginApi.kt @@ -1,7 +1,10 @@ +/* + * Copyright (c) Kacper Ziubryniewicz 2020-5-12 + */ + package pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.login import pl.szczodrzynski.edziennik.data.api.ERROR_LOGIN_DATA_MISSING -import pl.szczodrzynski.edziennik.data.api.ERROR_PROFILE_MISSING import pl.szczodrzynski.edziennik.data.api.edziennik.podlasie.DataPodlasie import pl.szczodrzynski.edziennik.data.api.models.ApiError @@ -11,11 +14,6 @@ class PodlasieLoginApi(val data: DataPodlasie, val onSuccess: () -> Unit) { } init { run { - if (data.profile == null) { - data.error(ApiError(TAG, ERROR_PROFILE_MISSING)) - return@run - } - if (data.isApiLoginValid()) { onSuccess() } else { diff --git a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginInfo.kt b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginInfo.kt index 679bcb68..d7230356 100644 --- a/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginInfo.kt +++ b/app/src/main/java/pl/szczodrzynski/edziennik/ui/modules/login/LoginInfo.kt @@ -333,6 +333,34 @@ object LoginInfo { ) ) ) + ), + Register( + loginType = LOGIN_TYPE_PODLASIE, + internalName = "podlasie", + registerName = R.string.login_type_podlasie, + registerLogo = R.drawable.login_logo_podlasie, + loginModes = listOf( + Mode( + loginMode = LOGIN_MODE_PODLASIE_API, + name = R.string.login_mode_podlasie_api, + icon = R.drawable.login_mode_podlasie_api, + guideText = R.string.login_mode_podlasie_api_guide, + credentials = listOf( + Credential( + keyName = "apiToken", + name = R.string.login_hint_token, + icon = CommunityMaterial.Icon2.cmd_lock_outline, + emptyText = R.string.login_error_no_token, + invalidText = R.string.login_error_incorrect_token, + errorCodes = mapOf(), + isRequired = true, + validationRegex = "[a-zA-Z0-9]{10}", + caseMode = Credential.CaseMode.UNCHANGED + ) + ), + errorCodes = mapOf() + ) + ) ) ) } diff --git a/app/src/main/res/drawable-nodpi/login_logo_podlasie.png b/app/src/main/res/drawable-nodpi/login_logo_podlasie.png new file mode 100644 index 0000000000000000000000000000000000000000..ed46d77ca925db8fda5d40774b46e90fed3214be GIT binary patch literal 34964 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�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 R=W#Fqfv2mV%Q~loCIG!lxETNd literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/login_mode_podlasie_api.png b/app/src/main/res/drawable-xhdpi/login_mode_podlasie_api.png new file mode 100644 index 0000000000000000000000000000000000000000..c951d6864002e6a032a77dc21ceb3f870e68e9d8 GIT binary patch literal 27362 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 z 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%0D}O<@WkUd*q*0Tii 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/errors.xml b/app/src/main/res/values/errors.xml index db856eb0..0fe3df08 100644 --- a/app/src/main/res/values/errors.xml +++ b/app/src/main/res/values/errors.xml @@ -160,6 +160,12 @@ ERROR_EDUDZIENNIK_WEB_SESSION_EXPIRED ERROR_EDUDZIENNIK_WEB_TEAM_MISSING + ERROR_LOGIN_PODLASIE_API_INVALID_TOKEN + ERROR_LOGIN_PODLASIE_API_DEVICE_LIMIT + ERROR_PODLASIE_API_NO_TOKEN + ERROR_PODLASIE_API_OTHER + ERROR_PODLASIE_API_DATA_MISSING + ERROR_TEMPLATE_WEB_OTHER EXCEPTION_API_TASK @@ -180,6 +186,9 @@ EXCEPTION_EDUDZIENNIK_WEB_REQUEST EXCEPTION_EDUDZIENNIK_FILE_REQUEST ERROR_ONEDRIVE_DOWNLOAD + EXCEPTION_VULCAN_WEB_LOGIN + EXCEPTION_VULCAN_WEB_REQUEST + EXCEPTION_PODLASIE_API_REQUEST LOGIN_NO_ARGUMENTS @@ -339,6 +348,12 @@ Sesja wygasła Nie można pobrać informacji o klasie i szkole + Nieprawidłowy token + Przekroczono maksymalną liczbę urządzeń (5) + ERROR_PODLASIE_API_NO_TOKEN + ERROR_PODLASIE_API_OTHER + Brak danych. Zgłoś błąd programiście. + ERROR_TEMPLATE_WEB_OTHER Błąd synchronizacji. Upewnij się, że masz połączenie z internetem, a następnie zgłoś błąd. @@ -359,6 +374,9 @@ Wystąpił błąd Wystąpił błąd podczas pobierania pliku Nie udało się pobrać pliku z OneDrive + EXCEPTION_VULCAN_WEB_LOGIN + EXCEPTION_VULCAN_WEB_REQUEST + Zgłoś błąd: wyjątek w API PPE Nie podano parametrów diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1ee557ac..2ad4d82b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1352,4 +1352,8 @@ Zaloguj używając e-maila i hasła Użyj danych, które podajesz na stronie internetowej e-dziennika Podaj adres e-mail i hasło, których używasz do logowania w przeglądarce na stronie EduDziennika. + Podlaska Platforma Edukacyjna + Zaloguj używając tokenu + Podaj token aplikacji mobilnej. + Logowanie do PPE…