From b1bb4ccd5a0a5bcd668e74dbc5bf58956f69f217 Mon Sep 17 00:00:00 2001 From: rushabhshroff Date: Thu, 11 Nov 2021 15:37:47 +0530 Subject: [PATCH 1/2] Disabled proxy for fetching PAC --- .../org.eclipse.buildship.core.prefs | 10 +++---- .../SwiftFlutterSystemProxyPlugin.swift | 21 ++++---------- lib/flutter_system_proxy.dart | 28 ++++++++++++++++--- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs index 4a2e916..e479558 100644 --- a/android/.settings/org.eclipse.buildship.core.prefs +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -1,13 +1,13 @@ arguments= auto.sync=false build.scans.enabled=false -connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(7.0-rc-1)) +connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 gradle.user.home= -java.home=/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home +java.home= jvm.arguments= offline.mode=false -override.workspace.settings=true -show.console.view=true -show.executions.view=true +override.workspace.settings=false +show.console.view=false +show.executions.view=false diff --git a/ios/Classes/SwiftFlutterSystemProxyPlugin.swift b/ios/Classes/SwiftFlutterSystemProxyPlugin.swift index f16ef9f..f881fc3 100644 --- a/ios/Classes/SwiftFlutterSystemProxyPlugin.swift +++ b/ios/Classes/SwiftFlutterSystemProxyPlugin.swift @@ -21,21 +21,12 @@ public class SwiftFlutterSystemProxyPlugin: NSObject, FlutterPlugin { let args = call.arguments as! NSDictionary let url = args.value(forKey:"url") as! String let host = args.value(forKey:"host") as! String - let PacUrl = proxyDict.value(forKey:"ProxyAutoConfigURLString") as! String - if let uri = URL(string: PacUrl) { - do { - let contents = try String(contentsOf: uri) - let jsEngine:JSContext = JSContext() - jsEngine.evaluateScript(contents) - let fn = "FindProxyForURL(\"" + url + "\",\""+host+"\")" - let proxy = jsEngine.evaluateScript(fn) - result(proxy?.toString()) - } catch { - result("DIRECT") - } - } else { - result("DIRECT") - } + let js = args.value(forKey:"js") as! String + let jsEngine:JSContext = JSContext() + jsEngine.evaluateScript(js) + let fn = "FindProxyForURL(\"" + url + "\",\""+host+"\")" + let proxy = jsEngine.evaluateScript(fn) + result(proxy?.toString()) }else{ result("DIRECT") } diff --git a/lib/flutter_system_proxy.dart b/lib/flutter_system_proxy.dart index f2b9bf9..823a035 100644 --- a/lib/flutter_system_proxy.dart +++ b/lib/flutter_system_proxy.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:convert'; import 'dart:io'; import 'package:flutter/services.dart'; @@ -32,7 +33,10 @@ class FlutterSystemProxy { return null; } else if (Platform.isIOS) { if (proxySettings["ProxyAutoConfigEnable"] == 1) { - return {"pacEnabled": "true"}; + return { + "pacEnabled": "true", + "pacUrl": proxySettings['ProxyAutoConfigURLString'] + }; } else { if (isHttps) { if (proxySettings['HTTPSEnable'] == 1) { @@ -65,9 +69,13 @@ class FlutterSystemProxy { (parsedProxy["host"] as String) + ":" + (parsedProxy["port"] as String); - } else if (parsedProxy != null && parsedProxy["pacEnabled"] == "true") { - String proxy = - await _channel.invokeMethod("executePAC", {"url": url, "host": host}); + } else if (parsedProxy != null && + parsedProxy["pacEnabled"] == "true" && + parsedProxy["pacUrl"] != null) { + String pacLocation = parsedProxy["pacUrl"] as String; + String jsContents = await contents(pacLocation); + String proxy = await _channel.invokeMethod( + "executePAC", {"url": url, "host": host, "js": jsContents}); return proxy; } else { return HttpClient.findProxyFromEnvironment(Uri.parse(url)); @@ -88,3 +96,15 @@ bool isPort(String? port) { return false; } } + +Future contents(String url) async { + HttpClient client = new HttpClient(); + var completor = new Completer(); + client.findProxy = null; + var request = await client.getUrl(Uri.parse(url)); + var response = await request.close(); + response.transform(utf8.decoder).listen((contents) { + completor.complete(contents); + }); + return completor.future; +} From 7f61516fdd8817410eb0b19f47433a0602ebd999 Mon Sep 17 00:00:00 2001 From: Rushabh Shroff Date: Thu, 11 Nov 2021 18:23:23 +0530 Subject: [PATCH 2/2] v0.0.2 --- pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index c13d71c..c2711bb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_system_proxy description: A Flutter Plugin to detect System proxy. When using HTTP client that are not proxy aware this plugin can help with finding the proxy from system settings which then can be used with HTTP Client to make a successful request. -version: 0.0.1 +version: 0.0.2 homepage: https://github.com/Rushabhshroff/flutter_system_proxy.git environment: @@ -24,4 +24,4 @@ flutter: ios: pluginClass: FlutterSystemProxyPlugin - \ No newline at end of file +