Cleanup after PR review.
This commit is contained in:
parent
0f4d20ac79
commit
6cbe7340ab
5 changed files with 17 additions and 18 deletions
|
|
@ -1,3 +1,5 @@
|
||||||
|
This file contains some rough notes about Oidc implementation, with some examples of actual data.
|
||||||
|
|
||||||
[ios implementation](https://github.com/vector-im/element-x-ios/compare/develop...doug/oidc-temp)
|
[ios implementation](https://github.com/vector-im/element-x-ios/compare/develop...doug/oidc-temp)
|
||||||
|
|
||||||
Rust sdk branch: https://github.com/matrix-org/matrix-rust-sdk/tree/oidc-ffi
|
Rust sdk branch: https://github.com/matrix-org/matrix-rust-sdk/tree/oidc-ffi
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,10 @@ import androidx.activity.compose.BackHandler
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.statusBarsPadding
|
import androidx.compose.foundation.layout.statusBarsPadding
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
|
@ -42,7 +45,7 @@ fun OidcView(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
) {
|
) {
|
||||||
val oidcUrlParser = remember { OidcUrlParser() }
|
val oidcUrlParser = remember { OidcUrlParser() }
|
||||||
var webView: WebView? = null
|
var webView by remember { mutableStateOf<WebView?>(null) }
|
||||||
fun shouldOverrideUrl(url: String): Boolean {
|
fun shouldOverrideUrl(url: String): Boolean {
|
||||||
val action = oidcUrlParser.parse(url)
|
val action = oidcUrlParser.parse(url)
|
||||||
if (action != null) {
|
if (action != null) {
|
||||||
|
|
@ -53,11 +56,7 @@ fun OidcView(
|
||||||
}
|
}
|
||||||
|
|
||||||
val oidcWebViewClient = remember {
|
val oidcWebViewClient = remember {
|
||||||
OidcWebViewClient(eventListener = object : WebViewEventListener {
|
OidcWebViewClient(::shouldOverrideUrl)
|
||||||
override fun shouldOverrideUrlLoading(url: String): Boolean {
|
|
||||||
return shouldOverrideUrl(url)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BackHandler {
|
BackHandler {
|
||||||
|
|
@ -71,8 +70,6 @@ fun OidcView(
|
||||||
|
|
||||||
Box(modifier = modifier.statusBarsPadding()) {
|
Box(modifier = modifier.statusBarsPadding()) {
|
||||||
AndroidView(
|
AndroidView(
|
||||||
modifier = Modifier
|
|
||||||
.statusBarsPadding(),
|
|
||||||
factory = { context ->
|
factory = { context ->
|
||||||
WebView(context).apply {
|
WebView(context).apply {
|
||||||
webViewClient = oidcWebViewClient
|
webViewClient = oidcWebViewClient
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,10 @@ import android.os.Build
|
||||||
import android.webkit.WebResourceRequest
|
import android.webkit.WebResourceRequest
|
||||||
import android.webkit.WebView
|
import android.webkit.WebView
|
||||||
import android.webkit.WebViewClient
|
import android.webkit.WebViewClient
|
||||||
import timber.log.Timber
|
|
||||||
|
|
||||||
class OidcWebViewClient(private val eventListener: WebViewEventListener) : WebViewClient() {
|
class OidcWebViewClient(
|
||||||
|
private val eventListener: WebViewEventListener,
|
||||||
|
) : WebViewClient() {
|
||||||
// We will revert to API 23, in the mean time ignore the warning here.
|
// We will revert to API 23, in the mean time ignore the warning here.
|
||||||
@SuppressLint("ObsoleteSdkInt")
|
@SuppressLint("ObsoleteSdkInt")
|
||||||
@TargetApi(Build.VERSION_CODES.N)
|
@TargetApi(Build.VERSION_CODES.N)
|
||||||
|
|
@ -38,7 +39,7 @@ class OidcWebViewClient(private val eventListener: WebViewEventListener) : WebVi
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun shouldOverrideUrl(url: String): Boolean {
|
private fun shouldOverrideUrl(url: String): Boolean {
|
||||||
Timber.d("shouldOverrideUrl: $url")
|
// Timber.d("shouldOverrideUrl: $url")
|
||||||
return eventListener.shouldOverrideUrlLoading(url)
|
return eventListener.shouldOverrideUrlLoading(url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,12 @@
|
||||||
|
|
||||||
package io.element.android.features.login.impl.oidc.webview
|
package io.element.android.features.login.impl.oidc.webview
|
||||||
|
|
||||||
interface WebViewEventListener {
|
fun interface WebViewEventListener {
|
||||||
/**
|
/**
|
||||||
* Triggered when a Webview loads an url.
|
* Triggered when a Webview loads an url.
|
||||||
*
|
*
|
||||||
* @param url The url about to be rendered.
|
* @param url The url about to be rendered.
|
||||||
* @return true if the method needs to manage some custom handling
|
* @return true if the method needs to manage some custom handling
|
||||||
*/
|
*/
|
||||||
fun shouldOverrideUrlLoading(url: String): Boolean {
|
fun shouldOverrideUrlLoading(url: String): Boolean
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import io.element.android.libraries.matrix.api.auth.MatrixHomeServerDetails
|
||||||
import io.element.android.libraries.matrix.api.auth.OidcDetails
|
import io.element.android.libraries.matrix.api.auth.OidcDetails
|
||||||
import io.element.android.libraries.matrix.api.core.SessionId
|
import io.element.android.libraries.matrix.api.core.SessionId
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||||
|
import io.element.android.libraries.matrix.test.FAKE_DELAY_IN_MS
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|
@ -58,12 +59,12 @@ class FakeAuthenticationService : MatrixAuthenticationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun setHomeserver(homeserver: String): Result<Unit> {
|
override suspend fun setHomeserver(homeserver: String): Result<Unit> {
|
||||||
delay(100)
|
delay(FAKE_DELAY_IN_MS)
|
||||||
return changeServerError?.let { Result.failure(it) } ?: Result.success(Unit)
|
return changeServerError?.let { Result.failure(it) } ?: Result.success(Unit)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun login(username: String, password: String): Result<SessionId> {
|
override suspend fun login(username: String, password: String): Result<SessionId> {
|
||||||
delay(100)
|
delay(FAKE_DELAY_IN_MS)
|
||||||
return loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
|
return loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -76,7 +77,7 @@ class FakeAuthenticationService : MatrixAuthenticationService {
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun loginWithOidc(callbackUrl: String): Result<SessionId> {
|
override suspend fun loginWithOidc(callbackUrl: String): Result<SessionId> {
|
||||||
delay(100)
|
delay(FAKE_DELAY_IN_MS)
|
||||||
return loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
|
return loginError?.let { Result.failure(it) } ?: Result.success(A_USER_ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue