-
Notifications
You must be signed in to change notification settings - Fork 18
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/login using webview #100
base: master
Are you sure you want to change the base?
Changes from all commits
aeb0e9b
707eba5
1d56aba
fdfb0a5
2a4f7a3
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,54 +1,82 @@ | |||||||||||||||||
package com.web3auth.core | |||||||||||||||||
|
|||||||||||||||||
import android.content.Intent | |||||||||||||||||
import android.net.Uri | |||||||||||||||||
import android.os.Bundle | |||||||||||||||||
import androidx.activity.result.ActivityResultLauncher | |||||||||||||||||
import androidx.activity.result.contract.ActivityResultContracts | |||||||||||||||||
import android.webkit.WebView | |||||||||||||||||
import android.webkit.WebViewClient | |||||||||||||||||
import androidx.appcompat.app.AppCompatActivity | |||||||||||||||||
import androidx.browser.customtabs.CustomTabsIntent | |||||||||||||||||
import com.google.gson.GsonBuilder | |||||||||||||||||
import com.web3auth.core.types.REDIRECT_URL | |||||||||||||||||
import com.web3auth.core.types.SessionResponse | |||||||||||||||||
import com.web3auth.core.types.WEBVIEW_URL | |||||||||||||||||
import com.web3auth.core.types.WebViewResultCallback | |||||||||||||||||
|
|||||||||||||||||
class CustomChromeTabsActivity : AppCompatActivity() { | |||||||||||||||||
|
|||||||||||||||||
private lateinit var customTabLauncher: ActivityResultLauncher<Intent> | |||||||||||||||||
private lateinit var webView: WebView | |||||||||||||||||
private val gson = GsonBuilder().disableHtmlEscaping().create() | |||||||||||||||||
|
|||||||||||||||||
companion object { | |||||||||||||||||
var webViewResultCallback: WebViewResultCallback? = null | |||||||||||||||||
} | |||||||||||||||||
|
|||||||||||||||||
override fun onCreate(savedInstanceState: Bundle?) { | |||||||||||||||||
super.onCreate(savedInstanceState) | |||||||||||||||||
supportActionBar?.hide() | |||||||||||||||||
setContentView(R.layout.activity_cct) | |||||||||||||||||
webView = findViewById(R.id.webView) | |||||||||||||||||
|
|||||||||||||||||
customTabLauncher = | |||||||||||||||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> | |||||||||||||||||
if (result.resultCode == RESULT_CANCELED) { | |||||||||||||||||
Web3Auth.setCustomTabsClosed(true) | |||||||||||||||||
finish() | |||||||||||||||||
} | |||||||||||||||||
} | |||||||||||||||||
|
|||||||||||||||||
// Handle loading URL from intent extras | |||||||||||||||||
val extras = intent.extras | |||||||||||||||||
if (extras != null) { | |||||||||||||||||
val webViewUrl = extras.getString(WEBVIEW_URL) | |||||||||||||||||
val redirectUrl = extras.getString(REDIRECT_URL) | |||||||||||||||||
if (webViewUrl != null) { | |||||||||||||||||
launchCustomTabs(webViewUrl) | |||||||||||||||||
webView.webViewClient = object : WebViewClient() { | |||||||||||||||||
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean { | |||||||||||||||||
if (redirectUrl?.isNotEmpty() == true) { | |||||||||||||||||
if (url?.contains(redirectUrl) == true) { | |||||||||||||||||
val uri = Uri.parse(url) | |||||||||||||||||
val hashUri = Uri.parse(uri.host + "?" + uri.fragment) | |||||||||||||||||
val b64Params = hashUri.getQueryParameter("b64Params") | |||||||||||||||||
val b64ParamString = | |||||||||||||||||
decodeBase64URLString(b64Params!!).toString(Charsets.UTF_8) | |||||||||||||||||
val sessionResponse = | |||||||||||||||||
gson.fromJson(b64ParamString, SessionResponse::class.java) | |||||||||||||||||
println("Session Response: $sessionResponse") | |||||||||||||||||
webViewResultCallback?.onSessionResponseReceived(sessionResponse) | |||||||||||||||||
//WebViewActivity.webViewResultCallback?.onSignResponseReceived(signResponse) | |||||||||||||||||
finish() | |||||||||||||||||
return true | |||||||||||||||||
} | |||||||||||||||||
} | |||||||||||||||||
return false | |||||||||||||||||
} | |||||||||||||||||
|
|||||||||||||||||
override fun onPageFinished(view: WebView?, url: String?) { | |||||||||||||||||
|
|||||||||||||||||
} | |||||||||||||||||
} | |||||||||||||||||
} | |||||||||||||||||
|
|||||||||||||||||
if (webViewUrl != null) { | |||||||||||||||||
webView.loadUrl(webViewUrl) | |||||||||||||||||
} | |||||||||||||||||
} | |||||||||||||||||
|
|||||||||||||||||
val webSettings = webView.settings | |||||||||||||||||
webSettings.javaScriptEnabled = true | |||||||||||||||||
Check warning Code scanning / CodeQL Android WebView JavaScript settings Medium
JavaScript execution enabled in WebView.
Copilot Autofix AI about 1 month ago To fix the problem, we should disable JavaScript execution in the WebView by setting
Suggested changeset
1
core/src/main/java/com/web3auth/core/CustomChromeTabsActivity.kt
Copilot is powered by AI and may make mistakes. Always verify output.
Refresh and try again.
|
|||||||||||||||||
webSettings.domStorageEnabled = true | |||||||||||||||||
webSettings.setSupportMultipleWindows(true) | |||||||||||||||||
webView.settings.userAgentString = null | |||||||||||||||||
|
|||||||||||||||||
} | |||||||||||||||||
|
|||||||||||||||||
private fun launchCustomTabs(url: String) { | |||||||||||||||||
val defaultBrowser = this.getDefaultBrowser() | |||||||||||||||||
val customTabsBrowsers = this.getCustomTabsBrowsers() | |||||||||||||||||
if (customTabsBrowsers.contains(defaultBrowser)) { | |||||||||||||||||
val intent = CustomTabsIntent.Builder().build().intent | |||||||||||||||||
intent.data = Uri.parse(url) | |||||||||||||||||
intent.`package` = defaultBrowser | |||||||||||||||||
customTabLauncher.launch(intent) | |||||||||||||||||
} else if (customTabsBrowsers.isNotEmpty()) { | |||||||||||||||||
val intent = CustomTabsIntent.Builder().build().intent | |||||||||||||||||
intent.data = Uri.parse(url) | |||||||||||||||||
intent.`package` = customTabsBrowsers[0] | |||||||||||||||||
customTabLauncher.launch(intent) | |||||||||||||||||
override fun onBackPressed() { | |||||||||||||||||
if (webView.canGoBack()) { | |||||||||||||||||
webView.goBack() | |||||||||||||||||
} else { | |||||||||||||||||
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) | |||||||||||||||||
super.onBackPressed() | |||||||||||||||||
} | |||||||||||||||||
} | |||||||||||||||||
} |
Check warning
Code scanning / CodeQL
Android WebView settings allows access to content links Medium
Copilot Autofix AI about 1 month ago
To fix the problem, we need to explicitly disable access to
content://
URLs in the WebView settings. This can be done by callingsetAllowContentAccess(false)
on the WebSettings object associated with the WebView. This change should be made in theonCreate
method where other WebView settings are configured.