feat: remove webchallenge

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2024-01-17 17:59:15 +01:00
parent 98bbc09cd2
commit 3e7768146d
5 changed files with 0 additions and 111 deletions

View File

@ -51,10 +51,6 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".activities.WebChallengeActivity"
android:theme="@style/Theme.Revolt" />
<activity <activity
android:name=".activities.InviteActivity" android:name=".activities.InviteActivity"
android:theme="@style/Theme.Revolt" android:theme="@style/Theme.Revolt"

View File

@ -1,52 +0,0 @@
package chat.revolt.activities
import android.annotation.SuppressLint
import android.os.Bundle
import android.util.Log
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import chat.revolt.api.REVOLT_BASE
import chat.revolt.api.buildUserAgent
import chat.revolt.databinding.ActivityWebchallengeBinding
private class WebChallengeClient(val pageLoaded: () -> Unit) : WebViewClient() {
@Override
override fun onPageFinished(view: WebView, url: String) {
super.onPageFinished(view, url)
pageLoaded()
}
}
class WebChallengeActivity : AppCompatActivity() {
private lateinit var binding: ActivityWebchallengeBinding
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityWebchallengeBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.webView.settings.apply {
javaScriptEnabled = true
domStorageEnabled = true
userAgentString = buildUserAgent("WebChallenge")
}
binding.webView.webViewClient = WebChallengeClient {
binding.webView.evaluateJavascript(
"(function() { return document.getElementById('cf-wrapper') === null; })();"
) { result ->
if (result == "false") {
Log.d(
"WebChallenge",
"Challenge has been solved or we have been considered human."
)
finish()
}
}
}
binding.webView.loadUrl(REVOLT_BASE)
}
}

View File

@ -1,17 +0,0 @@
package chat.revolt.api.internals
import chat.revolt.api.REVOLT_BASE
import chat.revolt.api.RevoltHttp
import io.ktor.client.request.get
import io.ktor.client.statement.bodyAsText
object WebChallenge {
suspend fun needsCloudflare(): Boolean {
RevoltHttp.get(REVOLT_BASE).let {
val text = it.bodyAsText()
return text.contains(
"window._cf_chl_opt"
) // FIXME Naive, prone to captcha page changing
}
}
}

View File

@ -2,13 +2,10 @@ package chat.revolt.screens
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
@ -27,7 +24,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
@ -35,10 +31,8 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.navigation.NavController import androidx.navigation.NavController
import chat.revolt.R import chat.revolt.R
import chat.revolt.activities.WebChallengeActivity
import chat.revolt.api.RevoltAPI import chat.revolt.api.RevoltAPI
import chat.revolt.api.RevoltHttp import chat.revolt.api.RevoltHttp
import chat.revolt.api.internals.WebChallenge
import chat.revolt.api.routes.onboard.needsOnboarding import chat.revolt.api.routes.onboard.needsOnboarding
import chat.revolt.components.screens.splash.DisconnectedScreen import chat.revolt.components.screens.splash.DisconnectedScreen
import chat.revolt.persistence.KVStorage import chat.revolt.persistence.KVStorage
@ -99,13 +93,6 @@ class SplashScreenViewModel @Inject constructor(
if (!isConnected) return@launch if (!isConnected) return@launch
val needsCloudflare = WebChallenge.needsCloudflare()
if (needsCloudflare) {
setNavigateTo("webchallenge")
return@launch
}
val token = kvStorage.get("sessionToken") ?: return@launch setNavigateTo("login") val token = kvStorage.get("sessionToken") ?: return@launch setNavigateTo("login")
val id = kvStorage.get("sessionId") ?: "" val id = kvStorage.get("sessionId") ?: ""
@ -142,16 +129,6 @@ class SplashScreenViewModel @Inject constructor(
@Composable @Composable
fun SplashScreen(navController: NavController, viewModel: SplashScreenViewModel = hiltViewModel()) { fun SplashScreen(navController: NavController, viewModel: SplashScreenViewModel = hiltViewModel()) {
val context = LocalContext.current
val webChallengeActivityResult = rememberLauncherForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == 0) {
viewModel.checkLoggedInState()
}
}
if (!viewModel.isConnected) { if (!viewModel.isConnected) {
DisconnectedScreen( DisconnectedScreen(
onRetry = { onRetry = {
@ -197,11 +174,6 @@ fun SplashScreen(navController: NavController, viewModel: SplashScreenViewModel
} }
} }
"webchallenge" -> {
val intent = Intent(context, WebChallengeActivity::class.java)
webChallengeActivityResult.launch(intent)
}
"home" -> { "home" -> {
navController.navigate("chat") { navController.navigate("chat") {
popUpTo("splash") { popUpTo("splash") {

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView" />
</androidx.constraintlayout.widget.ConstraintLayout>