kotovalexarian
/
android
Archived
1
0
Fork 0
This repository has been archived on 2023-08-15. You can view files and clone it, but cannot push or open issues or pull requests.
android/app/src/main/java/com/causa_arcana/CustomWebViewClient.kt

56 lines
1.9 KiB
Kotlin

package com.causa_arcana
import android.content.Context
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
class CustomWebViewClient(private val context: Context) : WebViewClient() {
companion object {
private const val HOST = "causa-arcana.com"
private const val SCHEME = "https"
private const val NO_PORT = -1
private const val PORT = 443
}
override fun shouldInterceptRequest(
view: WebView?,
request: WebResourceRequest,
): WebResourceResponse? {
if (!relatedHost(request)) return super.shouldInterceptRequest(view, request)
if (!validComponents(request)) return teapotResponse()
return when (request.url.path) {
"/assets/images/blog/decentralized-vs-distributed-wrong.png" ->
WebResourceResponse("image/png", "utf-8",
context.assets.open("decentralized-vs-distributed-wrong.png"))
"/assets/images/blog/network-topologies.png" ->
WebResourceResponse("image/png", "utf-8",
context.assets.open("network-topologies.png"))
else ->
teapotResponse()
}
}
private fun relatedHost(request: WebResourceRequest): Boolean {
return request.url.host?.lowercase() == HOST
}
private fun validComponents(request: WebResourceRequest): Boolean {
return request.url.scheme?.lowercase() == SCHEME &&
request.url.userInfo == null &&
(request.url.port == NO_PORT || request.url.port == PORT) &&
request.url.query == null &&
request.url.fragment == null
}
private fun teapotResponse(): WebResourceResponse {
return WebResourceResponse(
"text/plain", "utf-8", 418, "I'm a teapot",
null, null,
)
}
}