diff options
Diffstat (limited to 'main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java')
-rw-r--r-- | main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java b/main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java index 967d7728..e87b4c3a 100644 --- a/main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java +++ b/main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java @@ -5,9 +5,14 @@ package de.blinkt.openvpn.api; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.Binder; import java.util.HashSet; import java.util.Set; @@ -64,4 +69,40 @@ public class ExternalAppDatabase { saveExtAppList(allowedapps); } + + public String checkOpenVPNPermission(PackageManager pm) throws SecurityRemoteException { + + for (String appPackage : getExtAppList()) { + ApplicationInfo app; + try { + app = pm.getApplicationInfo(appPackage, 0); + if (Binder.getCallingUid() == app.uid) { + return appPackage; + } + } catch (PackageManager.NameNotFoundException e) { + // App not found. Remove it from the list + removeApp(appPackage); + } + + } + throw new SecurityException("Unauthorized OpenVPN API Caller"); + } + + + public boolean checkRemoteActionPermission(Activity a) { + + String callingPackage = a.getCallingPackage(); + + if (callingPackage == null) + callingPackage = ConfirmDialog.ANONYMOUS_PACKAGE; + + if (isAllowed(callingPackage)) { + return true; + } else { + Intent confirmDialog = new Intent(a, ConfirmDialog.class); + confirmDialog.putExtra(ConfirmDialog.EXTRA_PACKAGE_NAME, callingPackage); + a.startActivity(confirmDialog); + return false; + } + } } |