mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 03:14:40 -05:00
better initialization
This commit is contained in:
@@ -40,8 +40,9 @@ class CloudflareInterceptor : Interceptor {
|
|||||||
|
|
||||||
logger.debug { "Cloudflare anti-bot is on, CloudflareInterceptor is kicking in..." }
|
logger.debug { "Cloudflare anti-bot is on, CloudflareInterceptor is kicking in..." }
|
||||||
|
|
||||||
if (!serverConfig.webviewEnabled)
|
if (!serverConfig.webviewEnabled) {
|
||||||
throw CloudflareBypassException("Webview is disabled, enable it in server config")
|
throw CloudflareBypassException("Webview is disabled, enable it in server config")
|
||||||
|
}
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
originalResponse.close()
|
originalResponse.close()
|
||||||
@@ -72,7 +73,12 @@ object CFClearance {
|
|||||||
private val logger = KotlinLogging.logger {}
|
private val logger = KotlinLogging.logger {}
|
||||||
private val network: NetworkHelper by injectLazy()
|
private val network: NetworkHelper by injectLazy()
|
||||||
|
|
||||||
init {
|
private var undetectedChromeInitialized = false
|
||||||
|
|
||||||
|
fun initializeUndetectedChrome() {
|
||||||
|
if (undetectedChromeInitialized) {
|
||||||
|
return
|
||||||
|
}
|
||||||
SharedInterpreter().use { jep ->
|
SharedInterpreter().use { jep ->
|
||||||
val uc = "/home/armor/programming/github-clones/undetected-chromedriver"
|
val uc = "/home/armor/programming/github-clones/undetected-chromedriver"
|
||||||
|
|
||||||
@@ -81,6 +87,7 @@ object CFClearance {
|
|||||||
|
|
||||||
jep.exec("import undetected_chromedriver") // Cache import
|
jep.exec("import undetected_chromedriver") // Cache import
|
||||||
}
|
}
|
||||||
|
undetectedChromeInitialized = true
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resolveWithWebView(originalRequest: Request): Request {
|
fun resolveWithWebView(originalRequest: Request): Request {
|
||||||
@@ -88,6 +95,7 @@ object CFClearance {
|
|||||||
|
|
||||||
logger.debug { "resolveWithWebView($url)" }
|
logger.debug { "resolveWithWebView($url)" }
|
||||||
|
|
||||||
|
initializeUndetectedChrome()
|
||||||
val cookies = SharedInterpreter().use { jep ->
|
val cookies = SharedInterpreter().use { jep ->
|
||||||
try {
|
try {
|
||||||
jep.exec("import undetected_chromedriver as uc")
|
jep.exec("import undetected_chromedriver as uc")
|
||||||
@@ -110,7 +118,7 @@ object CFClearance {
|
|||||||
// }
|
// }
|
||||||
jep.exec("driver.get('$url')")
|
jep.exec("driver.get('$url')")
|
||||||
|
|
||||||
getCookies(jep, url)
|
getCookies(jep)
|
||||||
} finally {
|
} finally {
|
||||||
jep.exec("driver.quit()")
|
jep.exec("driver.quit()")
|
||||||
}
|
}
|
||||||
@@ -152,15 +160,17 @@ object CFClearance {
|
|||||||
|
|
||||||
fun getWebViewUserAgent(): String {
|
fun getWebViewUserAgent(): String {
|
||||||
return try {
|
return try {
|
||||||
if (!serverConfig.webviewEnabled)
|
if (!serverConfig.webviewEnabled) {
|
||||||
throw CloudflareBypassException("Webview is disabled, enable it in server config")
|
throw CloudflareBypassException("Webview is disabled, enable it in server config")
|
||||||
|
}
|
||||||
|
|
||||||
|
initializeUndetectedChrome()
|
||||||
SharedInterpreter().use { jep ->
|
SharedInterpreter().use { jep ->
|
||||||
jep.exec("import undetected_chromedriver as uc")
|
jep.exec("import undetected_chromedriver as uc")
|
||||||
|
|
||||||
jep.exec("options = uc.ChromeOptions()")
|
jep.exec("options = uc.ChromeOptions()")
|
||||||
jep.exec("options.add_argument('--headless')")
|
// jep.exec("options.add_argument('--headless')")
|
||||||
jep.exec("options.add_argument('--disable-gpu')")
|
// jep.exec("options.add_argument('--disable-gpu')")
|
||||||
jep.exec("driver = uc.Chrome(options=options)")
|
jep.exec("driver = uc.Chrome(options=options)")
|
||||||
|
|
||||||
jep.exec("userAgent = driver.execute_script('return navigator.userAgent')")
|
jep.exec("userAgent = driver.execute_script('return navigator.userAgent')")
|
||||||
@@ -188,7 +198,7 @@ object CFClearance {
|
|||||||
)
|
)
|
||||||
|
|
||||||
private val json by DI.global.instance<Json>()
|
private val json by DI.global.instance<Json>()
|
||||||
private fun getCookies(jep: SharedInterpreter, url: String): List<Cookie> {
|
private fun getCookies(jep: SharedInterpreter): List<Cookie> {
|
||||||
val challengeResolved = waitForChallengeResolve(jep)
|
val challengeResolved = waitForChallengeResolve(jep)
|
||||||
|
|
||||||
return if (challengeResolved) {
|
return if (challengeResolved) {
|
||||||
@@ -238,4 +248,3 @@ object CFClearance {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private class CloudflareBypassException(message: String?) : Exception(message)
|
private class CloudflareBypassException(message: String?) : Exception(message)
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ class ServerConfig(config: Config, moduleName: String = MODULE_NAME) : SystemPro
|
|||||||
// misc
|
// misc
|
||||||
val debugLogsEnabled: Boolean = debugLogsEnabled(GlobalConfigManager.config)
|
val debugLogsEnabled: Boolean = debugLogsEnabled(GlobalConfigManager.config)
|
||||||
val systemTrayEnabled: Boolean by overridableConfig
|
val systemTrayEnabled: Boolean by overridableConfig
|
||||||
val webviewEnabled : Boolean by overridableConfig
|
val webviewEnabled: Boolean by overridableConfig
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun register(config: Config) = ServerConfig(config.getConfig(MODULE_NAME))
|
fun register(config: Config) = ServerConfig(config.getConfig(MODULE_NAME))
|
||||||
|
|||||||
Reference in New Issue
Block a user