From 9b97e8559aa83037ee18c013ffb582b4f0816404 Mon Sep 17 00:00:00 2001 From: Thomas Crusius Date: Mon, 5 Aug 2024 09:57:37 +0200 Subject: [PATCH] enhance AIDL-API to allow passing extras during profile-import --- .../blinkt/openvpn/api/IOpenVPNAPIService.aidl | 6 ++++++ .../openvpn/api/ExternalOpenVPNService.java | 17 ++++++++++++++--- .../blinkt/openvpn/api/IOpenVPNAPIService.aidl | 6 ++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/main/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl b/main/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl index 3285432cc..39b531060 100644 --- a/main/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl +++ b/main/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl @@ -67,4 +67,10 @@ interface IOpenVPNAPIService { /** Same as startVPN(String), but also takes a Bundle with extra parameters, * which will be applied to the created VPNProfile (e.g. allow vpn bypass). */ void startVPNwithExtras(in String inlineconfig, in Bundle extras); + + /** Same as addNewVPNProfile(String, boolean, String) but giving possibility to pass a Bundle like + * in startVPNwithExtras(String, Bundle) to apply e.g. "allow vpn bypass" to profile. + * up to now the only extra that can be put is a boolean "de.blinkt.openvpn.api.ALLOW_VPN_BYPASS" + */ + APIVpnProfile addNewVPNProfileWithExtras (String name, boolean userEditable, String config, in Bundle extras); } \ No newline at end of file diff --git a/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java b/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java index 2f1f0788a..304a1f4a6 100644 --- a/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java +++ b/main/src/main/java/de/blinkt/openvpn/api/ExternalOpenVPNService.java @@ -151,6 +151,13 @@ private void startProfile(VpnProfile vp) } + private void updateProfileFromExtras(Bundle extras, VpnProfile vp) { + if (extras != null) { + vp.mAllowAppVpnBypass = extras.getBoolean(EXTRA_INLINE_PROFILE_ALLOW_VPN_BYPASS, false); + VpnStatus.logDebug("got extra " + EXTRA_INLINE_PROFILE_ALLOW_VPN_BYPASS + ", mAllowAppVpnBypass=" + vp.mAllowAppVpnBypass); + } + } + @Override public void startProfile(String profileUUID) throws RemoteException { mExtAppDb.checkOpenVPNPermission(getPackageManager()); @@ -176,9 +183,7 @@ public void startVPNwithExtras(String inlineConfig, Bundle extras) throws Remote vp.mProfileCreator = callingApp; - if (extras != null) { - vp.mAllowAppVpnBypass = extras.getBoolean(EXTRA_INLINE_PROFILE_ALLOW_VPN_BYPASS, false); - } + updateProfileFromExtras(extras, vp); /*int needpw = vp.needUserPWInput(false); if(needpw !=0) @@ -207,6 +212,11 @@ public boolean addVPNProfile(String name, String config) throws RemoteException @Override public APIVpnProfile addNewVPNProfile(String name, boolean userEditable, String config) throws RemoteException { + return addNewVPNProfileWithExtras(name, userEditable, config, null); + } + + @Override + public APIVpnProfile addNewVPNProfileWithExtras(String name, boolean userEditable, String config, Bundle extras) throws RemoteException { String callingPackage = mExtAppDb.checkOpenVPNPermission(getPackageManager()); ConfigParser cp = new ConfigParser(); @@ -216,6 +226,7 @@ public APIVpnProfile addNewVPNProfile(String name, boolean userEditable, String vp.mName = name; vp.mProfileCreator = callingPackage; vp.mUserEditable = userEditable; + updateProfileFromExtras(extras, vp); ProfileManager pm = ProfileManager.getInstance(getBaseContext()); pm.addProfile(vp); pm.saveProfile(ExternalOpenVPNService.this, vp); diff --git a/remoteExample/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl b/remoteExample/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl index 273a00464..1989b771d 100644 --- a/remoteExample/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl +++ b/remoteExample/src/main/aidl/de/blinkt/openvpn/api/IOpenVPNAPIService.aidl @@ -63,4 +63,10 @@ interface IOpenVPNAPIService { /** Use a profile with all certificates etc. embedded */ APIVpnProfile addNewVPNProfile (String name, boolean userEditable, String config); + + /** Same as addNewVPNProfile(String, boolean, String) but giving possibility to pass a Bundle like + * in startVPNwithExtras(String, Bundle) to apply e.g. "allow vpn bypass" to profile. + * up to now the only extra that can be put is a boolean "de.blinkt.openvpn.api.ALLOW_VPN_BYPASS" + */ + APIVpnProfile addNewVPNProfileWithExtras (String name, boolean userEditable, String config, in Bundle extras); } \ No newline at end of file