Add sendPasswordResetRequest() method
This commit is contained in:
parent
008887c359
commit
84d9a6779d
7 changed files with 69 additions and 6 deletions
|
@ -191,10 +191,14 @@ class Scrapper {
|
||||||
HomepageRepository(serviceManager.getHomepageService())
|
HomepageRepository(serviceManager.getHomepageService())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPasswordResetCaptcha(registerBaseUrl: String, symbol: String = "Default"): Single<String> {
|
fun getPasswordResetCaptcha(registerBaseUrl: String, symbol: String): Single<String> {
|
||||||
return register.getPasswordResetCaptcha(registerBaseUrl, symbol)
|
return register.getPasswordResetCaptcha(registerBaseUrl, symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun sendPasswordResetRequest(registerBaseUrl: String, symbol: String, email: String, captchaCode: String): Single<Pair<Boolean, String>> {
|
||||||
|
return register.sendPasswordResetRequest(registerBaseUrl, symbol, email, captchaCode)
|
||||||
|
}
|
||||||
|
|
||||||
fun getStudents() = register.getStudents()
|
fun getStudents() = register.getStudents()
|
||||||
|
|
||||||
fun getSemesters() = if (useNewStudent) studentStart.getSemesters() else snpStart.getSemesters()
|
fun getSemesters() = if (useNewStudent) studentStart.getSemesters() else snpStart.getSemesters()
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package io.github.wulkanowy.sdk.scrapper.register
|
||||||
|
|
||||||
|
import org.jsoup.nodes.Element
|
||||||
|
import pl.droidsonroids.jspoon.annotation.Selector
|
||||||
|
|
||||||
|
class SentUnlockAccountResponse {
|
||||||
|
|
||||||
|
@Selector("title")
|
||||||
|
lateinit var title: String
|
||||||
|
|
||||||
|
@Selector(".ErrorMessage, #ErrorTextLabel, .UnlockAccountSummary p, #box .box-p")
|
||||||
|
lateinit var message: String
|
||||||
|
|
||||||
|
@Selector("html")
|
||||||
|
lateinit var doc: Element
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ package io.github.wulkanowy.sdk.scrapper.register
|
||||||
|
|
||||||
import pl.droidsonroids.jspoon.annotation.Selector
|
import pl.droidsonroids.jspoon.annotation.Selector
|
||||||
|
|
||||||
class UnlockAccount {
|
class UnlockAccountResponse {
|
||||||
|
|
||||||
@Selector(".g-recaptcha", attr = "data-sitekey")
|
@Selector(".g-recaptcha", attr = "data-sitekey")
|
||||||
lateinit var recaptcha: String
|
lateinit var recaptcha: String
|
|
@ -41,6 +41,20 @@ class RegisterRepository(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getPasswordResetCaptcha(registerBaseUrl: String, symbol: String): Single<String> {
|
fun getPasswordResetCaptcha(registerBaseUrl: String, symbol: String): Single<String> {
|
||||||
|
return get(registerBaseUrl, symbol)
|
||||||
|
.flatMap { register.getPasswordResetPageWithCaptcha(it) }
|
||||||
|
.map { it.recaptcha }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sendPasswordResetRequest(registerBaseUrl: String, symbol: String, email: String, captchaCode: String): Single<Pair<Boolean, String>> {
|
||||||
|
return get(registerBaseUrl, symbol)
|
||||||
|
.flatMap { register.sendPasswordResetRequest(it, email, captchaCode) }
|
||||||
|
.map {
|
||||||
|
(it.title == "Podsumowanie operacji") to it.message
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun get(registerBaseUrl: String, symbol: String): Single<String> {
|
||||||
val url = URL(registerBaseUrl)
|
val url = URL(registerBaseUrl)
|
||||||
return when (url.host) {
|
return when (url.host) {
|
||||||
"fakelog.cf" -> Single.just("https://cufs.fakelog.cf/Default/AccountManage/UnlockAccount")
|
"fakelog.cf" -> Single.just("https://cufs.fakelog.cf/Default/AccountManage/UnlockAccount")
|
||||||
|
@ -56,7 +70,7 @@ class RegisterRepository(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else -> throw ScrapperException("Nieznany dziennik")
|
else -> throw ScrapperException("Nieznany dziennik")
|
||||||
}.flatMap { register.getPasswordResetPageWithCaptcha(it) }.map { it.recaptcha }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getStudents(): Single<List<Student>> {
|
fun getStudents(): Single<List<Student>> {
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
package io.github.wulkanowy.sdk.scrapper.service
|
package io.github.wulkanowy.sdk.scrapper.service
|
||||||
|
|
||||||
import io.github.wulkanowy.sdk.scrapper.register.LoginForm
|
import io.github.wulkanowy.sdk.scrapper.register.LoginForm
|
||||||
import io.github.wulkanowy.sdk.scrapper.register.UnlockAccount
|
import io.github.wulkanowy.sdk.scrapper.register.SentUnlockAccountResponse
|
||||||
|
import io.github.wulkanowy.sdk.scrapper.register.UnlockAccountResponse
|
||||||
import io.reactivex.Single
|
import io.reactivex.Single
|
||||||
|
import retrofit2.http.Field
|
||||||
|
import retrofit2.http.FormUrlEncoded
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
|
import retrofit2.http.POST
|
||||||
import retrofit2.http.Url
|
import retrofit2.http.Url
|
||||||
|
|
||||||
interface RegisterService {
|
interface RegisterService {
|
||||||
|
@ -12,5 +16,13 @@ interface RegisterService {
|
||||||
fun getFormType(@Url url: String): Single<LoginForm>
|
fun getFormType(@Url url: String): Single<LoginForm>
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
fun getPasswordResetPageWithCaptcha(@Url url: String): Single<UnlockAccount>
|
fun getPasswordResetPageWithCaptcha(@Url url: String): Single<UnlockAccountResponse>
|
||||||
|
|
||||||
|
@POST
|
||||||
|
@FormUrlEncoded
|
||||||
|
fun sendPasswordResetRequest(
|
||||||
|
@Url registerBaseUrl: String,
|
||||||
|
@Field("Email") email: String,
|
||||||
|
@Field("g-recaptcha-response") captchaCode: String
|
||||||
|
): Single<SentUnlockAccountResponse>
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,19 @@ class ScrapperRemoteTest : BaseTest() {
|
||||||
assertEquals("6LeAGMYUAAAAAMszd5VWZTEb5WQHqsNT1F4GCqUd", codeObserver.values()[0])
|
assertEquals("6LeAGMYUAAAAAMszd5VWZTEb5WQHqsNT1F4GCqUd", codeObserver.values()[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun sendPasswordResetRequest() {
|
||||||
|
val res = api.sendPasswordResetRequest("https://fakelog.cf", "Default", "jan@fakelog.cf", "03AOLTBLQRPyr0pWvWLRAgD4hRLfxktoqD2IVweeMuXwbkpR_8S9YQtcS3cAXqUOyEw3NxfvwzV0lTjgFWyl8j3UXGQpsc2nvQcqIofj1N8DYfxvtZO-h24W_S0Z9-fDnfXErd7vERS-Ny4d5IU1FupBAEKvT8rrf3OA3GYYbMM7TwB8b_o9Tt192TqYnSxkyIYE4UdaZnLBA0KIXxlBAoqM6QGlPEsSPK9gmCGx-0hn68w-UBQkv_ghRruf4kpv2Shw5emcP-qHBlv3YjAagsb_358K0v8uGJeyLrx4dXN9Ky02TXFMKYWNHz29fjhfunxT73u_PrsLj56f-MjOXrqO894NkUlJ7RkTTclwIsqXtJ794LEBH--mtsqZBND0miR5-odmZszqiNB3V5UsS5ObsqF_fWMl2TCWyNTTvF4elOGwOEeKiumVpjB6e740COxvxN3vbkNWxP9eeghpd5nPN5l2wUV3VL2R5s44TbqHqkrkNpUOd3h7efs3cQtCfGc-tCXoqLC26LxT7aztvKpjXMuqGEf-7wbQ")
|
||||||
|
val resObserver = TestObserver<Pair<Boolean, String>>()
|
||||||
|
res.subscribe(resObserver)
|
||||||
|
resObserver.assertComplete()
|
||||||
|
|
||||||
|
with(resObserver.values()[0]) {
|
||||||
|
assertEquals(true, first)
|
||||||
|
assertTrue(second.startsWith("Wysłano wiadomość na zapisany w systemie adres e-mail"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun studentsTest() {
|
fun studentsTest() {
|
||||||
val students = api.getStudents()
|
val students = api.getStudents()
|
||||||
|
@ -124,7 +137,7 @@ class ScrapperRemoteTest : BaseTest() {
|
||||||
}
|
}
|
||||||
|
|
||||||
values[6].run {
|
values[6].run {
|
||||||
// assertEquals(12, semesterId)
|
// assertEquals(12, semesterId)
|
||||||
// assertEquals(2, semesterNumber)
|
// assertEquals(2, semesterNumber)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -171,6 +171,10 @@ class Sdk {
|
||||||
return scrapper.getPasswordResetCaptcha(registerBaseUrl, symbol)
|
return scrapper.getPasswordResetCaptcha(registerBaseUrl, symbol)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun sendPasswordResetRequest(registerBaseUrl: String, symbol: String, email: String, captchaCode: String): Single<Pair<Boolean, String>> {
|
||||||
|
return scrapper.sendPasswordResetRequest(registerBaseUrl, symbol, email, captchaCode)
|
||||||
|
}
|
||||||
|
|
||||||
fun getStudentsFromMobileApi(token: String, pin: String, symbol: String, apiKey: String = ""): Single<List<Student>> {
|
fun getStudentsFromMobileApi(token: String, pin: String, symbol: String, apiKey: String = ""): Single<List<Student>> {
|
||||||
return mobile.getCertificate(token, pin, symbol, buildTag, androidVersion)
|
return mobile.getCertificate(token, pin, symbol, buildTag, androidVersion)
|
||||||
.flatMap { mobile.getStudents(it, apiKey) }
|
.flatMap { mobile.getStudents(it, apiKey) }
|
||||||
|
|
Loading…
Reference in a new issue