Extract UrlGenerator to separate file
This commit is contained in:
parent
55b2283c33
commit
42dbd67a39
7 changed files with 51 additions and 38 deletions
|
@ -7,7 +7,7 @@ plugins {
|
|||
}
|
||||
|
||||
ext {
|
||||
PUBLISH_VERSION = '1.8.3'
|
||||
PUBLISH_VERSION = '1.8.4-SNAPSHOT'
|
||||
SITE_URL = 'https://github.com/wulkanowy/sdk'
|
||||
GIT_URL = 'https://github.com/wulkanowy/sdk.git'
|
||||
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
package io.github.wulkanowy.sdk.scrapper.login
|
||||
|
||||
import java.net.URL
|
||||
|
||||
class UrlGenerator(
|
||||
private val schema: String,
|
||||
private val host: String,
|
||||
var symbol: String,
|
||||
var schoolId: String,
|
||||
) {
|
||||
|
||||
constructor(url: URL, symbol: String, schoolId: String) : this(url.protocol, url.host, symbol, schoolId)
|
||||
|
||||
enum class Site {
|
||||
BASE, LOGIN, HOME, SNP, STUDENT, MESSAGES
|
||||
}
|
||||
|
||||
fun generate(type: Site): String {
|
||||
if (type == Site.BASE) return "$schema://$host"
|
||||
return "$schema://${getSubDomain(type)}.$host/$symbol/${if (type == Site.SNP || type == Site.STUDENT) "$schoolId/" else ""}"
|
||||
}
|
||||
|
||||
private fun getSubDomain(type: Site): String {
|
||||
return when (type) {
|
||||
Site.LOGIN -> "cufs"
|
||||
Site.HOME -> "uonetplus"
|
||||
Site.SNP -> "uonetplus-opiekun"
|
||||
Site.STUDENT -> "uonetplus-uczen"
|
||||
Site.MESSAGES -> "uonetplus-wiadomosciplus"
|
||||
else -> error("unknown")
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,6 +13,7 @@ import io.github.wulkanowy.sdk.scrapper.exception.InvalidCaptchaException
|
|||
import io.github.wulkanowy.sdk.scrapper.exception.InvalidEmailException
|
||||
import io.github.wulkanowy.sdk.scrapper.exception.NoAccountFoundException
|
||||
import io.github.wulkanowy.sdk.scrapper.exception.PasswordResetErrorException
|
||||
import io.github.wulkanowy.sdk.scrapper.login.UrlGenerator
|
||||
import io.github.wulkanowy.sdk.scrapper.service.AccountService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.ServiceManager
|
||||
import java.net.URL
|
||||
|
@ -83,7 +84,7 @@ class AccountRepository(private val account: AccountService) {
|
|||
}
|
||||
|
||||
return if (unlockUrl.first == AUTO) {
|
||||
val loginType = getLoginType(ServiceManager.UrlGenerator(url, symbol, ""))
|
||||
val loginType = getLoginType(UrlGenerator(url, symbol, ""))
|
||||
loginType to when (loginType) {
|
||||
STANDARD -> "https://cufs.vulcan.net.pl/$symbol/AccountManage/UnlockAccount"
|
||||
ADFSLightScoped -> "https://adfslight.vulcan.net.pl/$symbol/AccountManage/UnlockAccountRequest"
|
||||
|
@ -92,8 +93,8 @@ class AccountRepository(private val account: AccountService) {
|
|||
} else unlockUrl
|
||||
}
|
||||
|
||||
private suspend fun getLoginType(urlGenerator: ServiceManager.UrlGenerator): Scrapper.LoginType {
|
||||
val page = account.getFormType(urlGenerator.generate(ServiceManager.UrlGenerator.Site.LOGIN) + "Account/LogOn").page
|
||||
private suspend fun getLoginType(urlGenerator: UrlGenerator): Scrapper.LoginType {
|
||||
val page = account.getFormType(urlGenerator.generate(UrlGenerator.Site.LOGIN) + "Account/LogOn").page
|
||||
|
||||
return when {
|
||||
page.select(SELECTOR_STANDARD).isNotEmpty() -> STANDARD
|
||||
|
|
|
@ -10,6 +10,7 @@ import io.github.wulkanowy.sdk.scrapper.interceptor.handleErrors
|
|||
import io.github.wulkanowy.sdk.scrapper.login.AccountPermissionException
|
||||
import io.github.wulkanowy.sdk.scrapper.login.CertificateResponse
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginHelper
|
||||
import io.github.wulkanowy.sdk.scrapper.login.UrlGenerator
|
||||
import io.github.wulkanowy.sdk.scrapper.register.AuthInfo
|
||||
import io.github.wulkanowy.sdk.scrapper.register.Diary
|
||||
import io.github.wulkanowy.sdk.scrapper.register.Permission
|
||||
|
@ -37,7 +38,7 @@ class RegisterRepository(
|
|||
private val loginHelper: LoginHelper,
|
||||
private val register: RegisterService,
|
||||
private val student: StudentService,
|
||||
private val url: ServiceManager.UrlGenerator
|
||||
private val url: UrlGenerator
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
@ -94,8 +95,8 @@ class RegisterRepository(
|
|||
return getLoginType(url.also { it.symbol = symbol })
|
||||
}
|
||||
|
||||
private suspend fun getLoginType(urlGenerator: ServiceManager.UrlGenerator): Scrapper.LoginType {
|
||||
val page = register.getFormType(urlGenerator.generate(ServiceManager.UrlGenerator.Site.LOGIN) + "Account/LogOn").page
|
||||
private suspend fun getLoginType(urlGenerator: UrlGenerator): Scrapper.LoginType {
|
||||
val page = register.getFormType(urlGenerator.generate(UrlGenerator.Site.LOGIN) + "Account/LogOn").page
|
||||
return when {
|
||||
page.select(SELECTOR_STANDARD).isNotEmpty() -> Scrapper.LoginType.STANDARD
|
||||
page.select(SELECTOR_ADFS).isNotEmpty() -> Scrapper.LoginType.ADFS
|
||||
|
@ -126,7 +127,7 @@ class RegisterRepository(
|
|||
url.schoolId = unit.symbol
|
||||
|
||||
val studentStartPage = try {
|
||||
student.getStart(url.generate(ServiceManager.UrlGenerator.Site.STUDENT) + "Start")
|
||||
student.getStart(url.generate(UrlGenerator.Site.STUDENT) + "Start")
|
||||
} catch (e: TemporarilyDisabledException) {
|
||||
logger.debug("Start page is unavailable", e)
|
||||
return listOf()
|
||||
|
@ -153,7 +154,7 @@ class RegisterRepository(
|
|||
schoolName = getScriptParam("organizationName", studentStartPage, "${unit.name} ${unit.short}"),
|
||||
className = diary.symbol.orEmpty(),
|
||||
classId = classId,
|
||||
baseUrl = url.generate(ServiceManager.UrlGenerator.Site.BASE),
|
||||
baseUrl = url.generate(UrlGenerator.Site.BASE),
|
||||
loginType = loginType,
|
||||
isParent = cache?.isParent == true,
|
||||
semesters = diaries.toSemesters(diary.studentId, classId, authInfo?.loginId ?: diary.studentId),
|
||||
|
@ -165,14 +166,14 @@ class RegisterRepository(
|
|||
}
|
||||
|
||||
private suspend fun getStudentCache(startPage: String) = student.getUserCache(
|
||||
url.generate(ServiceManager.UrlGenerator.Site.STUDENT) + "UczenCache.mvc/Get",
|
||||
url.generate(UrlGenerator.Site.STUDENT) + "UczenCache.mvc/Get",
|
||||
getScriptParam("antiForgeryToken", startPage),
|
||||
getScriptParam("appGuid", startPage),
|
||||
getScriptParam("version", startPage)
|
||||
).data
|
||||
|
||||
private suspend fun getStudentDiaries() = student
|
||||
.getSchoolInfo(url.generate(ServiceManager.UrlGenerator.Site.STUDENT) + "UczenDziennik.mvc/Get")
|
||||
.getSchoolInfo(url.generate(UrlGenerator.Site.STUDENT) + "UczenDziennik.mvc/Get")
|
||||
.handleErrors()
|
||||
.data.orEmpty()
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.github.wulkanowy.sdk.scrapper.interceptor.HttpErrorInterceptor
|
|||
import io.github.wulkanowy.sdk.scrapper.interceptor.StudentCookieInterceptor
|
||||
import io.github.wulkanowy.sdk.scrapper.interceptor.UserAgentInterceptor
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginHelper
|
||||
import io.github.wulkanowy.sdk.scrapper.login.UrlGenerator
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
|
@ -215,29 +216,4 @@ class ServiceManager(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
class UrlGenerator(private val schema: String, private val host: String, var symbol: String, var schoolId: String) {
|
||||
|
||||
constructor(url: URL, symbol: String, schoolId: String) : this(url.protocol, url.host, symbol, schoolId)
|
||||
|
||||
enum class Site {
|
||||
BASE, LOGIN, HOME, SNP, STUDENT, MESSAGES
|
||||
}
|
||||
|
||||
fun generate(type: Site): String {
|
||||
if (type == Site.BASE) return "$schema://$host"
|
||||
return "$schema://${getSubDomain(type)}.$host/$symbol/${if (type == Site.SNP || type == Site.STUDENT) "$schoolId/" else ""}"
|
||||
}
|
||||
|
||||
private fun getSubDomain(type: Site): String {
|
||||
return when (type) {
|
||||
Site.LOGIN -> "cufs"
|
||||
Site.HOME -> "uonetplus"
|
||||
Site.SNP -> "uonetplus-opiekun"
|
||||
Site.STUDENT -> "uonetplus-uczen"
|
||||
Site.MESSAGES -> "uonetplus-wiadomosciplus"
|
||||
else -> error("unknown")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import io.github.wulkanowy.sdk.scrapper.BaseLocalTest
|
|||
import io.github.wulkanowy.sdk.scrapper.Scrapper
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginHelper
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginTest
|
||||
import io.github.wulkanowy.sdk.scrapper.login.UrlGenerator
|
||||
import io.github.wulkanowy.sdk.scrapper.repository.RegisterRepository
|
||||
import io.github.wulkanowy.sdk.scrapper.service.LoginService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.RegisterService
|
||||
|
@ -52,7 +53,7 @@ class RegisterTest : BaseLocalTest() {
|
|||
)
|
||||
),
|
||||
student = getService(StudentService::class.java, "http://fakelog.localhost:3000", false),
|
||||
url = ServiceManager.UrlGenerator("http", "fakelog.localhost:3000", "default", "123")
|
||||
url = UrlGenerator("http", "fakelog.localhost:3000", "default", "123")
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import io.github.wulkanowy.sdk.scrapper.exception.VulcanException
|
|||
import io.github.wulkanowy.sdk.scrapper.interceptor.ErrorInterceptorTest
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginHelper
|
||||
import io.github.wulkanowy.sdk.scrapper.login.LoginTest
|
||||
import io.github.wulkanowy.sdk.scrapper.login.UrlGenerator
|
||||
import io.github.wulkanowy.sdk.scrapper.register.RegisterTest
|
||||
import io.github.wulkanowy.sdk.scrapper.service.LoginService
|
||||
import io.github.wulkanowy.sdk.scrapper.service.RegisterService
|
||||
|
@ -39,7 +40,7 @@ class RegisterRepositoryTest : BaseLocalTest() {
|
|||
okHttp = getOkHttp(errorInterceptor = false, autoLoginInterceptorOn = false)
|
||||
),
|
||||
student = getService(service = StudentService::class.java, html = false),
|
||||
url = ServiceManager.UrlGenerator("http", "fakelog.localhost:3000", symbol, "")
|
||||
url = UrlGenerator("http", "fakelog.localhost:3000", symbol, "")
|
||||
)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue