Add support for new AccountInactiveException error message
This commit is contained in:
parent
c900846ca9
commit
1056a1ff2a
5 changed files with 124 additions and 16 deletions
|
@ -95,15 +95,16 @@ internal class AutoLoginInterceptor(
|
|||
|
||||
val messages = getModuleCookies(UrlGenerator.Site.MESSAGES)
|
||||
val student = getModuleCookies(UrlGenerator.Site.STUDENT)
|
||||
val studentPlus = if (isEduOne) {
|
||||
getModuleCookies(UrlGenerator.Site.STUDENT_PLUS)
|
||||
} else null
|
||||
val studentPlus = when {
|
||||
isEduOne -> getModuleCookies(UrlGenerator.Site.STUDENT_PLUS)
|
||||
else -> null
|
||||
}
|
||||
|
||||
when {
|
||||
"wiadomosciplus" in uri.host -> messages.getOrThrow()
|
||||
"uczenplus" in uri.host -> studentPlus?.getOrThrow()
|
||||
"uczen" in uri.host -> student.getOrThrow()
|
||||
else -> logger.info("Resource don't need further login")
|
||||
else -> logger.info("Resource don't need further login anyway")
|
||||
}
|
||||
chain.proceed(chain.request().attachModuleHeaders())
|
||||
} catch (e: IOException) {
|
||||
|
|
|
@ -81,6 +81,9 @@ internal class ErrorInterceptor(
|
|||
doc.select("h2.error").let {
|
||||
if (it.isNotEmpty()) throw AccountPermissionException(it.text())
|
||||
}
|
||||
doc.select("h2").text().let {
|
||||
if (it == "Strona nie znaleziona") throw ScrapperException(it, httpCode)
|
||||
}
|
||||
|
||||
doc.selectFirst("form")?.attr("action")?.let {
|
||||
if ("SetNewPassword" in it) {
|
||||
|
@ -94,13 +97,18 @@ internal class ErrorInterceptor(
|
|||
throw AccountInactiveException(it.select(".additionalText").text())
|
||||
}
|
||||
}
|
||||
doc.select(".info-error-message-text").let {
|
||||
if ("Nie masz wystarczających uprawnień" in it.text()) {
|
||||
throw AccountInactiveException(it.text())
|
||||
}
|
||||
}
|
||||
|
||||
when (doc.title()) {
|
||||
"Błąd" -> throw VulcanException(doc.body().text(), httpCode)
|
||||
"Błąd strony" -> throw VulcanException(doc.select(".errorMessage").text(), httpCode)
|
||||
"Logowanie" -> throw AccountPermissionException(
|
||||
buildString {
|
||||
val newMessage = doc.select(".info-error-message-text").first()?.text().orEmpty()
|
||||
val newMessage = doc.select(".info-error-message-text").first()?.ownText().orEmpty()
|
||||
val oldMessage = doc.select("div").last()?.ownText().orEmpty().split(" Jeśli")[0]
|
||||
append(newMessage.ifBlank { oldMessage })
|
||||
},
|
||||
|
@ -121,9 +129,6 @@ internal class ErrorInterceptor(
|
|||
"Strona nie została odnaleziona" -> throw ScrapperException(doc.title(), httpCode)
|
||||
"Strona nie znaleziona" -> throw ScrapperException(doc.selectFirst("div div")?.text().orEmpty(), httpCode)
|
||||
}
|
||||
doc.select("h2").text().let {
|
||||
if (it == "Strona nie znaleziona") throw ScrapperException(it, httpCode)
|
||||
}
|
||||
if (isBobCmn(doc, redirectUrl)) {
|
||||
throw ConnectionBlockedException("Połączenie zablokowane przez system antybotowy. Spróbuj ponownie za chwilę")
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@ import io.github.wulkanowy.sdk.scrapper.exception.VulcanException
|
|||
import io.github.wulkanowy.sdk.scrapper.interceptor.ErrorInterceptorTest
|
||||
import io.github.wulkanowy.sdk.scrapper.service.LoginService
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
|
@ -120,19 +121,31 @@ class LoginTest : BaseLocalTest() {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun accessAccountInactiveException() {
|
||||
fun accessAccountInactiveException() = runTest {
|
||||
with(server) {
|
||||
enqueue("Logowanie-uonet.html")
|
||||
enqueue("Logowanie-nieaktywne.html")
|
||||
start(3000)
|
||||
}
|
||||
|
||||
try {
|
||||
runBlocking { normal.login("jan@fakelog.cf", "jan1234") }
|
||||
} catch (e: Throwable) {
|
||||
assertEquals(AccountInactiveException::class, e::class)
|
||||
assertEquals("Login i hasło użytkownika są poprawne, ale konto nie jest aktywne w żadnej jednostce sprawozdawczej", e.message)
|
||||
val result = runCatching { normal.login("jan@fakelog.cf", "jan1234") }
|
||||
val error = result.exceptionOrNull()!!
|
||||
assertEquals(AccountInactiveException::class, error::class)
|
||||
assertEquals("Login i hasło użytkownika są poprawne, ale konto nie jest aktywne w żadnej jednostce sprawozdawczej", error.message)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessAccountInactiveNewException() = runTest {
|
||||
with(server) {
|
||||
enqueue("Logowanie-uonet.html")
|
||||
enqueue("Logowanie-nieaktywne2.html")
|
||||
start(3000)
|
||||
}
|
||||
|
||||
val result = runCatching { normal.login("jan@fakelog.cf", "jan1234") }
|
||||
val error = result.exceptionOrNull()!!
|
||||
assertEquals(AccountInactiveException::class, error::class)
|
||||
assertEquals("Nie masz wystarczających uprawnień, by używać aplikacji", error.message)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -165,18 +178,32 @@ class LoginTest : BaseLocalTest() {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun accessPermissionException() {
|
||||
fun accessPermissionException() = runTest {
|
||||
with(server) {
|
||||
enqueue("Logowanie-uonet.html")
|
||||
enqueue("Logowanie-brak-dostepu.html")
|
||||
start(3000)
|
||||
}
|
||||
|
||||
val result = runCatching { adfs.login("jan@fakelog.cf", "jan1234") }
|
||||
val exception = result.exceptionOrNull()!!
|
||||
assertEquals(AccountPermissionException::class, exception::class)
|
||||
assertEquals("Adres nie został zarejestrowany w dzienniku uczniowskim jako adres rodzica, bądź ucznia.", exception.message)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun accessPermissionNewException() {
|
||||
with(server) {
|
||||
enqueue("Logowanie-uonet.html")
|
||||
enqueue("Logowanie-brak-dostepu2.html")
|
||||
start(3000)
|
||||
}
|
||||
|
||||
try {
|
||||
runBlocking { adfs.login("jan@fakelog.cf", "jan1234") }
|
||||
} catch (e: Throwable) {
|
||||
assertTrue(e is AccountPermissionException)
|
||||
assertEquals("Adres mikolajpich@gmail.com nie został zarejestrowany w dzienniku uczniowskim jako adres rodzica, bądź ucznia.", e.message)
|
||||
assertEquals("Login nie został zarejestrowany w bazie szkoły, do której się logujesz.", e.message)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Logowanie</title>
|
||||
</head>
|
||||
<body>
|
||||
<form method="post" action="./LoginEndpoint.aspx?__customer__group=powiatwulkanowy&__customer__symbol=" id="form1">
|
||||
<div class="aspNetHidden">
|
||||
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTM0MjUyMzM2OWRk0gXlR1z7JdsJG359rlaIHF0NGtk="/>
|
||||
</div>
|
||||
|
||||
<div class="aspNetHidden">
|
||||
|
||||
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="14C11D55"/>
|
||||
</div>
|
||||
<div class="startScreen startScreen-start">
|
||||
<div class="info-error-content-info">
|
||||
<span class="info-error-message-text">
|
||||
Login <b>jan@fakelog.cf</b> nie został zarejestrowany w bazie szkoły, do której się logujesz.
|
||||
</span>
|
||||
<span class="info-error-message-text">
|
||||
Sprawdź poprawność wpisanego w pasku przeglądarki adresu strony.
|
||||
<br/>
|
||||
Każda szkoła ma unikalny adres dziennika.
|
||||
<br/>
|
||||
Adres strony startowej systemu przekazuje szkoła i jest to jedyne źródło pozyskania prawidłowego adresu witryny.
|
||||
<br/>
|
||||
Adres strony systemu należy wpisać do górnego paska przeglądarki, nie do wyszukiwarki Google.
|
||||
<br/>
|
||||
Większość szkół publikuje odnośnik do systemu na swojej stronie www.
|
||||
</span>
|
||||
<span class="info-error-message-text">
|
||||
W drugiej kolejności skontaktuj się z sekretarzem w szkole lub wychowawcą.
|
||||
</span>
|
||||
|
||||
<a href="/powiatwulkanowy/" class="extra-button extra-button-gray" title="Powrót do strony głównej"><span>Powrót do strony głównej</span></a>
|
||||
<a href="/powiatwulkanowy/LoginEndpoint.aspx?logout=true" class="extra-button extra-button-gray"><span>Wyloguj</span></a>
|
||||
</div>
|
||||
|
||||
<div class="bottomBar">
|
||||
<span>
|
||||
<a class="appVersion" href="http://www.vulcan.edu.pl/" title="VULCAN sp. z o.o." target="_blank">VULCAN sp. z o.o., Dziennik VULCAN, wersja 23.15.0011.57737</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="pl">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dziennik VULCAN</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="startScreen startScreen-start">
|
||||
<div class="info-error-content-info">
|
||||
<span class="info-error-message-text">Nie masz wystarczających uprawnień, by używać aplikacji</span>
|
||||
<a href="https://uonetplus.fakelog.cf/powiatwulkanowy/" class="extra-button extra-button-gray"><span>Odśwież</span></a>
|
||||
<a href="https://uonetplus.fakelog.cf/powiatwulkanowy/LoginEndpoint.aspx?logout=true"
|
||||
class="extra-button extra-button-gray"><span>Wyloguj</span></a>
|
||||
</div>
|
||||
|
||||
<div class="bottomBar">
|
||||
<span>
|
||||
<a class="appVersion" href="http://www.vulcan.edu.pl/" title="VULCAN sp. z o.o." target="_blank">VULCAN sp. z o.o., Dziennik VULCAN, wersja 23.15.0011.57737</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue