summaryrefslogtreecommitdiff
path: root/main/src/main/java/de/blinkt/openvpn/api/ExternalAppDatabase.java
diff options
context:
space:
mode:
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.java41
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;
+ }
+ }
}