Skip to content

Commit

Permalink
Merge pull request #82 from chaopengCoder/master
Browse files Browse the repository at this point in the history
iOS clicks 'Don't allow' button
  • Loading branch information
nizwar authored Sep 7, 2023
2 parents fa21408 + da23cfb commit ba28353
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 57 deletions.
92 changes: 60 additions & 32 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5,49 +5,56 @@ packages:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0
url: "https://pub.dev"
source: hosted
version: "2.9.0"
version: "2.10.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
characters:
dependency: transitive
description:
name: characters
url: "https://pub.dartlang.org"
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
url: "https://pub.dev"
source: hosted
version: "1.2.1"
clock:
dependency: transitive
description:
name: clock
url: "https://pub.dartlang.org"
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
url: "https://pub.dev"
source: hosted
version: "1.1.1"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
sha256: "1989d917fbe8e6b39806207df5a3fdd3d816cbd090fac2ce26fb45e9a71476e5"
url: "https://pub.dev"
source: hosted
version: "1.0.4"
fake_async:
dependency: transitive
description:
name: fake_async
url: "https://pub.dartlang.org"
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
flutter:
Expand All @@ -59,40 +66,53 @@ packages:
dependency: "direct dev"
description:
name: flutter_lints
url: "https://pub.dartlang.org"
sha256: b543301ad291598523947dc534aaddc5aaad597b709d2426d3a0e0d44c5cb493
url: "https://pub.dev"
source: hosted
version: "1.0.4"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
js:
dependency: transitive
description:
name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
url: "https://pub.dev"
source: hosted
version: "0.6.5"
lints:
dependency: transitive
description:
name: lints
url: "https://pub.dartlang.org"
sha256: a2c3d198cb5ea2e179926622d433331d8b58374ab8f29cdda6e863bd62fd369c
url: "https://pub.dev"
source: hosted
version: "1.0.1"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
url: "https://pub.dev"
source: hosted
version: "0.12.12"
version: "0.12.13"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
url: "https://pub.dev"
source: hosted
version: "0.1.5"
version: "0.2.0"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
url: "https://pub.dev"
source: hosted
version: "1.8.0"
openvpn_flutter:
Expand All @@ -106,7 +126,8 @@ packages:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
url: "https://pub.dev"
source: hosted
version: "1.8.2"
sky_engine:
Expand All @@ -118,51 +139,58 @@ packages:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
url: "https://pub.dev"
source: hosted
version: "1.10.0"
version: "1.11.0"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
url: "https://pub.dev"
source: hosted
version: "2.1.0"
version: "2.1.1"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.2.0"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
url: "https://pub.dev"
source: hosted
version: "1.2.1"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
url: "https://pub.dev"
source: hosted
version: "0.4.12"
version: "0.4.16"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
sdks:
dart: ">=2.17.0-0 <3.0.0"
dart: ">=2.18.0 <3.0.0"
flutter: ">=2.5.0"
48 changes: 32 additions & 16 deletions ios/Classes/SwiftOpenVPNFlutterPlugin.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@ import NetworkExtension
public class SwiftOpenVPNFlutterPlugin: NSObject, FlutterPlugin {
private static var utils : VPNUtils! = VPNUtils()

private static var EVENT_CHANNEL_VPN_STAGE : String = "id.laskarmedia.openvpn_flutter/vpnstage"
private static var METHOD_CHANNEL_VPN_CONTROL : String = "id.laskarmedia.openvpn_flutter/vpncontrol"
private static var EVENT_CHANNEL_VPN_STAGE = "id.laskarmedia.openvpn_flutter/vpnstage"
private static var METHOD_CHANNEL_VPN_CONTROL = "id.laskarmedia.openvpn_flutter/vpncontrol"

public static var stage: FlutterEventSink?
public static var stage: FlutterEventSink?
private var initialized : Bool = false

public static func register(with registrar: FlutterPluginRegistrar) {
let instance = SwiftOpenVPNFlutterPlugin()
instance.onRegister(registrar)

}

public func onRegister(_ registrar: FlutterPluginRegistrar){
Expand All @@ -23,7 +22,7 @@ public class SwiftOpenVPNFlutterPlugin: NSObject, FlutterPlugin {

vpnStageE.setStreamHandler(StageHandler())
vpnControlM.setMethodCallHandler({(call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
switch call.method{
switch call.method {
case "status":
SwiftOpenVPNFlutterPlugin.utils.getTraffictStats()
result(UserDefaults.init(suiteName: SwiftOpenVPNFlutterPlugin.utils.groupIdentifier)?.string(forKey: "connectionUpdate"))
Expand All @@ -36,15 +35,21 @@ public class SwiftOpenVPNFlutterPlugin: NSObject, FlutterPlugin {
let localizedDescription: String? = (call.arguments as? [String: Any])?["localizedDescription"] as? String
let groupIdentifier: String? = (call.arguments as? [String: Any])?["groupIdentifier"] as? String
if providerBundleIdentifier == nil {
result(FlutterError(code: "-2", message: "providerBundleIdentifier content empty or null", details: nil));
result(FlutterError(code: "-2",
message: "providerBundleIdentifier content empty or null",
details: nil));
return;
}
if localizedDescription == nil {
result(FlutterError(code: "-3", message: "localizedDescription content empty or null", details: nil));
result(FlutterError(code: "-3",
message: "localizedDescription content empty or null",
details: nil));
return;
}
if groupIdentifier == nil {
result(FlutterError(code: "-4", message: "groupIdentifier content empty or null", details: nil));
result(FlutterError(code: "-4",
message: "groupIdentifier content empty or null",
details: nil));
return;
}
SwiftOpenVPNFlutterPlugin.utils.groupIdentifier = groupIdentifier
Expand All @@ -54,7 +59,7 @@ public class SwiftOpenVPNFlutterPlugin: NSObject, FlutterPlugin {
if err == nil{
result(SwiftOpenVPNFlutterPlugin.utils.currentStatus())
}else{
result(FlutterError(code: "-4", message: err.debugDescription, details: err?.localizedDescription));
result(FlutterError(code: "-4", message: err?.localizedDescription, details: err?.localizedDescription));
}
}
self.initialized = true
Expand All @@ -64,28 +69,34 @@ public class SwiftOpenVPNFlutterPlugin: NSObject, FlutterPlugin {
break;
case "connect":
if !self.initialized {
result(FlutterError(code: "-1", message: "VPNEngine need to be initialize", details: nil));
result(FlutterError(code: "-1",
message: "VPNEngine need to be initialize",
details: nil));
}
let config: String? = (call.arguments as? [String : Any])? ["config"] as? String
let username: String? = (call.arguments as? [String : Any])? ["username"] as? String
let password: String? = (call.arguments as? [String : Any])? ["password"] as? String
if config == nil{
result(FlutterError(code: "-2", message:"Config is empty or nulled", details: "Config can't be nulled"))
result(FlutterError(code: "-2",
message:"Config is empty or nulled",
details: "Config can't be nulled"))
return
}

SwiftOpenVPNFlutterPlugin.utils.configureVPN(config: config, username: username, password: password, completion: {(success:Error?) -> Void in
if(success == nil){
result(nil)
}else{
result(FlutterError(code: "-5", message: success?.localizedDescription, details: success.debugDescription))
result(FlutterError(code: "99",
message: "permission denied",
details: success?.localizedDescription))
}
})
break;
case "dispose":
self.initialized = false
default:
break;

}
})
}
Expand Down Expand Up @@ -181,7 +192,6 @@ class VPNUtils {
else{
return "disconnected"
}
// return "DISCONNECTED"
}

func configureVPN(config: String?, username : String?,password : String?,completion:@escaping (_ error : Error?) -> Void) {
Expand Down Expand Up @@ -211,9 +221,13 @@ class VPNUtils {
}
do {
if self.vpnStageObserver != nil {
NotificationCenter.default.removeObserver(self.vpnStageObserver!, name: NSNotification.Name.NEVPNStatusDidChange, object: nil)
NotificationCenter.default.removeObserver(self.vpnStageObserver!,
name: NSNotification.Name.NEVPNStatusDidChange,
object: nil)
}
self.vpnStageObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.NEVPNStatusDidChange, object: nil , queue: nil) { [weak self] notification in
self.vpnStageObserver = NotificationCenter.default.addObserver(forName: NSNotification.Name.NEVPNStatusDidChange,
object: nil ,
queue: nil) { [weak self] notification in
let nevpnconn = notification.object as! NEVPNConnection
let status = nevpnconn.status
self?.onVpnStatusChanged(notification: status)
Expand All @@ -235,6 +249,8 @@ class VPNUtils {
completion(error);
}
})
} else {
completion(error);
}
})
}
Expand Down
24 changes: 15 additions & 9 deletions lib/src/vpn_engine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'model/vpn_status.dart';

Expand Down Expand Up @@ -120,21 +121,26 @@ class OpenVPN {
///username & password : set your username and password if your config file has auth-user-pass
///
///bypassPackages : exclude some apps to access/use the VPN Connection, it was List<String> of applications package's name (Android Only)
void connect(String config, String name,
Future connect(String config, String name,
{String? username,
String? password,
List<String>? bypassPackages,
bool certIsRequired = false}) async {
bool certIsRequired = false}) {
if (!initialized) throw ("OpenVPN need to be initialized");
if (!certIsRequired) config += "client-cert-not-required";
_tempDateTime = DateTime.now();
_channelControl.invokeMethod("connect", {
"config": config,
"name": name,
"username": username,
"password": password,
"bypass_packages": bypassPackages ?? []
});

try {
return _channelControl.invokeMethod("connect", {
"config": config,
"name": name,
"username": username,
"password": password,
"bypass_packages": bypassPackages ?? []
});
} on PlatformException catch (e) {
throw ArgumentError(e.message);
}
}

///Disconnect from VPN
Expand Down

0 comments on commit ba28353

Please sign in to comment.