diff --git a/src/es/catharsisfantasy/build.gradle b/src/es/catharsisfantasy/build.gradle new file mode 100644 index 000000000..80a04ec81 --- /dev/null +++ b/src/es/catharsisfantasy/build.gradle @@ -0,0 +1,10 @@ +ext { + extName = 'Catharsis Fantasy' + extClass = '.CatharsisFantasy' + themePkg = 'mangathemesia' + baseUrl = 'https://catharsisfantasy.com' + overrideVersionCode = 0 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/es/catharsisfantasy/res/mipmap-hdpi/ic_launcher.png b/src/es/catharsisfantasy/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..63f51d92d Binary files /dev/null and b/src/es/catharsisfantasy/res/mipmap-hdpi/ic_launcher.png differ diff --git a/src/es/catharsisfantasy/res/mipmap-mdpi/ic_launcher.png b/src/es/catharsisfantasy/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..8a9c27963 Binary files /dev/null and b/src/es/catharsisfantasy/res/mipmap-mdpi/ic_launcher.png differ diff --git a/src/es/catharsisfantasy/res/mipmap-xhdpi/ic_launcher.png b/src/es/catharsisfantasy/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..7c61a0dc2 Binary files /dev/null and b/src/es/catharsisfantasy/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/src/es/catharsisfantasy/res/mipmap-xxhdpi/ic_launcher.png b/src/es/catharsisfantasy/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..42c7ea894 Binary files /dev/null and b/src/es/catharsisfantasy/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/src/es/catharsisfantasy/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/catharsisfantasy/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..7c1aff296 Binary files /dev/null and b/src/es/catharsisfantasy/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/src/es/catharsisfantasy/src/eu/kanade/tachiyomi/extension/es/catharsisfantasy/CatharsisFantasy.kt b/src/es/catharsisfantasy/src/eu/kanade/tachiyomi/extension/es/catharsisfantasy/CatharsisFantasy.kt new file mode 100644 index 000000000..6dea63295 --- /dev/null +++ b/src/es/catharsisfantasy/src/eu/kanade/tachiyomi/extension/es/catharsisfantasy/CatharsisFantasy.kt @@ -0,0 +1,61 @@ +package eu.kanade.tachiyomi.extension.es.catharsisfantasy + +import android.annotation.SuppressLint +import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimit +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.OkHttpClient +import org.jsoup.nodes.Document +import java.security.SecureRandom +import java.security.cert.X509Certificate +import javax.net.ssl.SSLContext +import javax.net.ssl.TrustManager +import javax.net.ssl.X509TrustManager + +class CatharsisFantasy : MangaThemesia( + "Catharsis Fantasy", + "https://catharsisfantasy.com", + "es", +) { + override val client = super.client.newBuilder() + .rateLimit(3) + .ignoreAllSSLErrors() + .build() + + private val iframeSelector: String = "#mangaIframe" + + override fun pageListParse(document: Document): List<Page> { + return super.pageListParse( + document.takeIf { it.select(iframeSelector).isEmpty() } + ?: fetchIframeDocumentPageList(document), + ) + } + + private fun fetchIframeDocumentPageList(document: Document): Document { + val pagesUrl = document.selectFirst(iframeSelector)!! + .absUrl("src") + + return client.newCall(GET(pagesUrl, headers)) + .execute().asJsoup() + } + + private fun OkHttpClient.Builder.ignoreAllSSLErrors(): OkHttpClient.Builder { + val naiveTrustManager = @SuppressLint("CustomX509TrustManager") + object : X509TrustManager { + override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray() + override fun checkClientTrusted(certs: Array<X509Certificate>, authType: String) = Unit + override fun checkServerTrusted(certs: Array<X509Certificate>, authType: String) = Unit + } + + val insecureSocketFactory = SSLContext.getInstance("TLSv1.2").apply { + val trustAllCerts = arrayOf<TrustManager>(naiveTrustManager) + init(null, trustAllCerts, SecureRandom()) + }.socketFactory + + sslSocketFactory(insecureSocketFactory, naiveTrustManager) + hostnameVerifier { _, _ -> true } + return this + } +}