From e7819b596bb4cc6257a3d38ce507bbd4284678bb Mon Sep 17 00:00:00 2001 From: Jason Edwards Date: Thu, 19 Sep 2024 14:36:35 -0600 Subject: [PATCH 1/2] Support NTLM for authentication --- .../webview_flutter_wkwebview/CHANGELOG.md | 4 ++ .../lib/src/foundation/foundation.dart | 3 ++ .../lib/src/webkit_webview_controller.dart | 4 +- .../webview_flutter_wkwebview/pubspec.yaml | 2 +- .../test/webkit_navigation_delegate_test.dart | 38 +++++++++++++++++++ 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index a552402d059..e9f21636830 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.16.0 + +* Support NTLM for authentication + ## 3.15.0 * Adds macOS support. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart index 1dabbd0c24a..2df5c9efc6c 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/foundation/foundation.dart @@ -505,6 +505,9 @@ class NSUrlAuthenticationMethod { /// Use HTTP digest authentication for this protection space. static const String httpDigest = 'NSURLAuthenticationMethodHTTPDigest'; + + /// Use NTLM authentication for this protection space. + static const String httpNtlm = 'NSURLAuthenticationMethodNTLM'; } /// A challenge from a server requiring authentication from the client. diff --git a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart index e80dc727347..a1f149ecdd1 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/lib/src/webkit_webview_controller.dart @@ -1147,7 +1147,9 @@ class WebKitNavigationDelegate extends PlatformNavigationDelegate { ) completionHandler, ) { if (challenge.protectionSpace.authenticationMethod == - NSUrlAuthenticationMethod.httpBasic) { + NSUrlAuthenticationMethod.httpBasic || + challenge.protectionSpace.authenticationMethod == + NSUrlAuthenticationMethod.httpNtlm) { final void Function(HttpAuthRequest)? callback = weakThis.target?._onHttpAuthRequest; final String? host = challenge.protectionSpace.host; diff --git a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml index 38d6fafbf54..5b89dd4fb14 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml +++ b/packages/webview_flutter/webview_flutter_wkwebview/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_wkwebview description: A Flutter plugin that provides a WebView widget based on Apple's WKWebView control. repository: https://github.com/flutter/packages/tree/main/packages/webview_flutter/webview_flutter_wkwebview issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+webview%22 -version: 3.15.0 +version: 3.16.0 environment: sdk: ^3.5.0 diff --git a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart index 14561f15ff6..8a1ba88ee26 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart +++ b/packages/webview_flutter/webview_flutter_wkwebview/test/webkit_navigation_delegate_test.dart @@ -309,6 +309,44 @@ void main() { expect(callbackHost, expectedHost); expect(callbackRealm, expectedRealm); }); + + test('onHttpNtlmAuthRequest emits host and realm', () { + final WebKitNavigationDelegate iosNavigationDelegate = + WebKitNavigationDelegate( + const WebKitNavigationDelegateCreationParams( + webKitProxy: WebKitProxy( + createNavigationDelegate: CapturingNavigationDelegate.new, + ), + ), + ); + + String? callbackHost; + String? callbackRealm; + + iosNavigationDelegate.setOnHttpAuthRequest((HttpAuthRequest request) { + callbackHost = request.host; + callbackRealm = request.realm; + }); + + const String expectedHost = 'expectedHost'; + const String expectedRealm = 'expectedRealm'; + + CapturingNavigationDelegate + .lastCreatedDelegate.didReceiveAuthenticationChallenge!( + WKWebViewIOS.detached(), + NSUrlAuthenticationChallenge.detached( + protectionSpace: NSUrlProtectionSpace.detached( + host: expectedHost, + realm: expectedRealm, + authenticationMethod: NSUrlAuthenticationMethod.httpNtlm, + ), + ), + (NSUrlSessionAuthChallengeDisposition disposition, + NSUrlCredential? credential) {}); + + expect(callbackHost, expectedHost); + expect(callbackRealm, expectedRealm); + }); }); } From 3ad17165ab534e8f45ac6bc4c743805bc9320554 Mon Sep 17 00:00:00 2001 From: Jason Edwards Date: Thu, 3 Oct 2024 13:04:45 -0600 Subject: [PATCH 2/2] Update packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md Co-authored-by: Jenn Magder --- packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md index e9f21636830..3091a1b5a3e 100644 --- a/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md +++ b/packages/webview_flutter/webview_flutter_wkwebview/CHANGELOG.md @@ -1,6 +1,6 @@ ## 3.16.0 -* Support NTLM for authentication +* Supports NTLM for authentication. ## 3.15.0