diff --git a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java index d217243ef..af623a701 100644 --- a/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java +++ b/app/src/main/java/com/nextcloud/talk/application/NextcloudTalkApplication.java @@ -37,6 +37,7 @@ import autodagger.AutoInjector; import com.facebook.cache.disk.DiskCacheConfig; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.imagepipeline.core.ImagePipelineConfig; +import com.nextcloud.talk.BuildConfig; import com.nextcloud.talk.components.filebrowser.webdav.DavUtils; import com.nextcloud.talk.dagger.modules.BusModule; import com.nextcloud.talk.dagger.modules.ContextModule; @@ -56,6 +57,9 @@ import com.nextcloud.talk.utils.singletons.MerlinTheWizard; import com.nextcloud.talk.webrtc.MagicWebRTCUtils; import com.vanniktech.emoji.EmojiManager; import com.vanniktech.emoji.googlecompat.GoogleCompatEmojiProvider; + +import de.cotech.hw.SecurityKeyManager; +import de.cotech.hw.SecurityKeyManagerConfig; import okhttp3.OkHttpClient; import org.conscrypt.Conscrypt; import org.webrtc.PeerConnectionFactory; @@ -124,6 +128,12 @@ public class NextcloudTalkApplication extends MultiDexApplication implements Lif sharedApplication = this; + SecurityKeyManager securityKeyManager = SecurityKeyManager.getInstance(); + SecurityKeyManagerConfig securityKeyConfig = new SecurityKeyManagerConfig.Builder() + .setEnableDebugLogging(BuildConfig.DEBUG) + .build(); + securityKeyManager.init(this, securityKeyConfig); + initializeWebRtc(); DisplayUtils.useCompatVectorIfNeeded(); buildComponent(); diff --git a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java index 89b0fc747..13ebe692a 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java @@ -22,6 +22,7 @@ package com.nextcloud.talk.controllers; import android.annotation.SuppressLint; import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; import android.net.http.SslCertificate; import android.net.http.SslError; import android.os.Build; @@ -35,6 +36,7 @@ import android.view.ViewGroup; import android.webkit.*; import android.widget.ProgressBar; import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; import androidx.work.OneTimeWorkRequest; import androidx.work.WorkManager; import autodagger.AutoInjector; @@ -53,6 +55,8 @@ import com.nextcloud.talk.utils.database.user.UserUtils; import com.nextcloud.talk.utils.preferences.AppPreferences; import com.nextcloud.talk.utils.singletons.ApplicationWideMessageHolder; import com.nextcloud.talk.utils.ssl.MagicTrustManager; + +import de.cotech.hw.fido.WebViewFidoBridge; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; @@ -112,6 +116,8 @@ public class WebViewLoginController extends BaseController { private boolean automatedLoginAttempted = false; + private WebViewFidoBridge webViewFidoBridge; + public WebViewLoginController(String baseUrl, boolean isPasswordUpdate) { this.baseUrl = baseUrl; this.isPasswordUpdate = isPasswordUpdate; @@ -169,6 +175,8 @@ public class WebViewLoginController extends BaseController { webView.clearHistory(); WebView.clearClientCertPreferences(null); + webViewFidoBridge = WebViewFidoBridge.createInstanceForWebView((AppCompatActivity) getActivity(), webView); + CookieSyncManager.createInstance(getActivity()); android.webkit.CookieManager.getInstance().removeAllCookies(null); @@ -178,6 +186,18 @@ public class WebViewLoginController extends BaseController { webView.setWebViewClient(new WebViewClient() { private boolean basePageLoaded; + @Override + public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { + webViewFidoBridge.delegateShouldInterceptRequest(view, request); + return super.shouldInterceptRequest(view, request); + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + webViewFidoBridge.delegateOnPageStarted(view, url, favicon); + } + @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith(assembledPrefix)) {