Explorar el Código

fix(Android): add basicAuthCredential prop

iwashita hace 4 años
padre
commit
84f1a5c13f

+ 42
- 0
android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java Ver fichero

25
 import android.webkit.CookieManager;
25
 import android.webkit.CookieManager;
26
 import android.webkit.DownloadListener;
26
 import android.webkit.DownloadListener;
27
 import android.webkit.GeolocationPermissions;
27
 import android.webkit.GeolocationPermissions;
28
+import android.webkit.HttpAuthHandler;
28
 import android.webkit.JavascriptInterface;
29
 import android.webkit.JavascriptInterface;
29
 import android.webkit.RenderProcessGoneDetail;
30
 import android.webkit.RenderProcessGoneDetail;
30
 import android.webkit.SslErrorHandler;
31
 import android.webkit.SslErrorHandler;
533
     view.loadUrl(BLANK_URL);
534
     view.loadUrl(BLANK_URL);
534
   }
535
   }
535
 
536
 
537
+  @ReactProp(name = "basicAuthCredential")
538
+  public void setBasicAuthCredential(WebView view, @Nullable ReadableMap credential) {
539
+    @Nullable BasicAuthCredential basicAuthCredential = null;
540
+    if (credential != null) {
541
+      if (credential.hasKey("username") && credential.hasKey("password")) {
542
+        String username = credential.getString("username");
543
+        String password = credential.getString("password");
544
+        basicAuthCredential = new BasicAuthCredential(username, password);
545
+      }
546
+    }
547
+    ((RNCWebView) view).setBasicAuthCredential(basicAuthCredential);
548
+  }
549
+
536
   @ReactProp(name = "onContentSizeChange")
550
   @ReactProp(name = "onContentSizeChange")
537
   public void setOnContentSizeChange(WebView view, boolean sendContentSizeChangeEvents) {
551
   public void setOnContentSizeChange(WebView view, boolean sendContentSizeChangeEvents) {
538
     ((RNCWebView) view).setSendContentSizeChangeEvents(sendContentSizeChangeEvents);
552
     ((RNCWebView) view).setSendContentSizeChangeEvents(sendContentSizeChangeEvents);
777
     ReadableArray mUrlPrefixesForDefaultIntent;
791
     ReadableArray mUrlPrefixesForDefaultIntent;
778
     protected RNCWebView.ProgressChangedFilter progressChangedFilter = null;
792
     protected RNCWebView.ProgressChangedFilter progressChangedFilter = null;
779
     protected @Nullable String ignoreErrFailedForThisURL = null;
793
     protected @Nullable String ignoreErrFailedForThisURL = null;
794
+    protected @Nullable BasicAuthCredential basicAuthCredential = null;
780
 
795
 
781
     public void setIgnoreErrFailedForThisURL(@Nullable String url) {
796
     public void setIgnoreErrFailedForThisURL(@Nullable String url) {
782
       ignoreErrFailedForThisURL = url;
797
       ignoreErrFailedForThisURL = url;
783
     }
798
     }
784
 
799
 
800
+    public void setBasicAuthCredential(@Nullable BasicAuthCredential credential) {
801
+      basicAuthCredential = credential;
802
+    }
803
+
785
     @Override
804
     @Override
786
     public void onPageFinished(WebView webView, String url) {
805
     public void onPageFinished(WebView webView, String url) {
787
       super.onPageFinished(webView, url);
806
       super.onPageFinished(webView, url);
866
       return this.shouldOverrideUrlLoading(view, url);
885
       return this.shouldOverrideUrlLoading(view, url);
867
     }
886
     }
868
 
887
 
888
+    @Override
889
+    public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
890
+      if (basicAuthCredential != null) {
891
+        handler.proceed(basicAuthCredential.username, basicAuthCredential.password);
892
+        return;
893
+      }
894
+      super.onReceivedHttpAuthRequest(view, handler, host, realm);
895
+    }
896
+
869
     @Override
897
     @Override
870
     public void onReceivedSslError(final WebView webView, final SslErrorHandler handler, final SslError error) {
898
     public void onReceivedSslError(final WebView webView, final SslErrorHandler handler, final SslError error) {
871
         handler.cancel();
899
         handler.cancel();
1215
       mRNCWebViewClient.setIgnoreErrFailedForThisURL(url);
1243
       mRNCWebViewClient.setIgnoreErrFailedForThisURL(url);
1216
     }
1244
     }
1217
 
1245
 
1246
+    public void setBasicAuthCredential(BasicAuthCredential credential) {
1247
+      mRNCWebViewClient.setBasicAuthCredential(credential);
1248
+    }
1249
+
1218
     public void setSendContentSizeChangeEvents(boolean sendContentSizeChangeEvents) {
1250
     public void setSendContentSizeChangeEvents(boolean sendContentSizeChangeEvents) {
1219
       this.sendContentSizeChangeEvents = sendContentSizeChangeEvents;
1251
       this.sendContentSizeChangeEvents = sendContentSizeChangeEvents;
1220
     }
1252
     }
1470
     }
1502
     }
1471
   }
1503
   }
1472
 }
1504
 }
1505
+
1506
+class BasicAuthCredential {
1507
+  String username;
1508
+  String password;
1509
+
1510
+  BasicAuthCredential(String username, String password) {
1511
+    this.username = username;
1512
+    this.password = password;
1513
+  }
1514
+}