Skip to content

A package that allow you to connect OpenVPN service with Flutter

License

Notifications You must be signed in to change notification settings

code-misc/openvpn_flutter

 
 

Repository files navigation

Connect OpenVPN service with Flutter, Issues and PRs are very welcome!

Android Setup

1. Permission handler

Add this to your onActivityResult in MainActivity.java

    OpenVPNFlutterPlugin.connectWhileGranted(requestCode == 24 && resultCode == RESULT_OK);

So it look like this

    ...
    import id.laskarmedia.openvpn_flutter.OpenVPNFlutterPlugin;
    ...
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        OpenVPNFlutterPlugin.connectWhileGranted(requestCode == 24 && resultCode == RESULT_OK);
        super.onActivityResult(requestCode, resultCode, data);
    }

Warn

  • Due to vpn status log contains only 4 args, I don't know which is packetIn and packetOut, just give bytesIn and bytesOut with 3rd and 4th arg

iOS Setup

1. Add Capabillity

Add 2 capabillity on Runner's Target, App Groups and Network Extensions, Look at the image below to get clearer details

2. Add New Target

Click + button on bottom left, Choose NETWORK EXTENSION, and follow instruction's image bellow

Add Capabillity on VPNExtension, Do it same like Runner's Capabillitiy

3. Copy Paste

Add the following lines to your Podfile (ios/Podfile)

target 'VPNExtension' do
  use_frameworks!
  pod 'OpenVPNAdapter', :git => 'https://github.com/ss-abramchuk/OpenVPNAdapter.git', :tag => '0.8.0'
end

Open VPNExtension > PacketTunnelProvider.swift and copy paste this script PacketTunnelProvider.swift

Note

You must use iOS Devices instead of Simulator to connect

Recipe

Initialize

Before start, you have to initialize the OpenVPN plugin.

    late OpenVPN openvpn;

    @override
    void initState() {
        openvpn = OpenVPN(onVpnStatusChanged: _onVpnStatusChanged, onVpnStageChanged: _onVpnStageChanged);
        openvpn.initialize(
            groupIdentifier: "GROUP_IDENTIFIER", ///Example 'group.com.laskarmedia.vpn'
            providerBundleIdentifier: "NETWORK_EXTENSION_IDENTIFIER", ///Example 'id.laskarmedia.openvpnFlutterExample.VPNExtension'
            localizedDescription: "LOCALIZED_DESCRIPTION" ///Example 'Laskarmedia VPN'
        );
    }

    void _onVpnStatusChanged(VPNStatus? vpnStatus){
        setState((){
            this.status = vpnStatus;
        });
    }

    void _onVpnStageChanged(VPNStage? stage){
        setState((){
            this.stage = stage;
        });
    }

Connect to VPN

    void connect(){
        openvpn.connect(config, name, username: username, password: password, bypassPackages: [], certIsRequired: false);
    }

Disconnect

    void disconnect(){
        openvpn.disconnect();
    }

Publishing to Play Store and App Store

Android

  1. You can use appbundle to publish the app

iOS

  1. View Apple Guidelines Relating to VPN
  2. This plugin DOES use Encryption BUT, It uses Exempt Encryptions

Licenses

Love my work?

Don't forget to give me a 👍  or support me with a cup of ☕️

About

A package that allow you to connect OpenVPN service with Flutter

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 84.5%
  • HTML 5.2%
  • Dart 4.6%
  • Swift 3.7%
  • AIDL 1.4%
  • Ruby 0.5%
  • Objective-C 0.1%