From 9e576dcdf13647fb9dad882543a7873b866b3c30 Mon Sep 17 00:00:00 2001
From: sudomarcma <1040211836@qq.com>
Date: Wed, 9 Jul 2025 16:31:14 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E5=AE=89=E5=85=A8):=20=E5=AE=9E=E7=8E=B0?=
=?UTF-8?q?=E5=BA=94=E7=94=A8=E9=BB=91=E5=90=8D=E5=8D=95=E6=A3=80=E6=B5=8B?=
=?UTF-8?q?=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
添加新的AppSecurity插件用于获取已安装应用列表
创建后端API端点获取应用黑名单
在前端添加应用拦截界面和逻辑
使用在线黑名单检测机制
---
android/app/src/main/AndroidManifest.xml | 8 -
.../com/ouji/factory/myapp/AppSecurity.java | 29 ++
.../com/ouji/factory/myapp/MainActivity.java | 5 +-
backend/server.js | 12 +
src/App.vue | 53 +-
src/services/antiSpoofingService.js | 466 ++----------------
src/services/backgroundLocationService.js | 14 +-
src/services/nativeServicesManager.js | 16 +-
8 files changed, 155 insertions(+), 448 deletions(-)
create mode 100644 android/app/src/main/java/com/ouji/factory/myapp/AppSecurity.java
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 29935f0..7dd12df 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -37,14 +37,6 @@
android:resource="@xml/file_paths">
-
-
-
-
diff --git a/android/app/src/main/java/com/ouji/factory/myapp/AppSecurity.java b/android/app/src/main/java/com/ouji/factory/myapp/AppSecurity.java
new file mode 100644
index 0000000..e687ecd
--- /dev/null
+++ b/android/app/src/main/java/com/ouji/factory/myapp/AppSecurity.java
@@ -0,0 +1,29 @@
+package com.ouji.factory.myapp;
+
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import com.getcapacitor.JSObject;
+import com.getcapacitor.Plugin;
+import com.getcapacitor.PluginCall;
+import com.getcapacitor.PluginMethod;
+import com.getcapacitor.annotation.CapacitorPlugin;
+import org.json.JSONArray;
+
+import java.util.List;
+
+@CapacitorPlugin(name = "AppSecurity")
+public class AppSecurity extends Plugin {
+
+ @PluginMethod
+ public void getInstalledApps(PluginCall call) {
+ PackageManager pm = getContext().getPackageManager();
+ List packages = pm.getInstalledApplications(PackageManager.GET_META_DATA);
+ JSONArray appPackages = new JSONArray();
+ for (ApplicationInfo packageInfo : packages) {
+ appPackages.put(packageInfo.packageName);
+ }
+ JSObject ret = new JSObject();
+ ret.put("packages", appPackages);
+ call.resolve(ret);
+ }
+}
diff --git a/android/app/src/main/java/com/ouji/factory/myapp/MainActivity.java b/android/app/src/main/java/com/ouji/factory/myapp/MainActivity.java
index 4815c1e..ee7dfc0 100644
--- a/android/app/src/main/java/com/ouji/factory/myapp/MainActivity.java
+++ b/android/app/src/main/java/com/ouji/factory/myapp/MainActivity.java
@@ -6,13 +6,16 @@ import android.view.WindowManager;
import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import com.getcapacitor.BridgeActivity;
+import com.getcapacitor.Plugin;
+
+import java.util.ArrayList;
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
+ registerPlugin(AppSecurity.class);
super.onCreate(savedInstanceState);
-
// Configure window for proper native behavior
setupNativeWindow();
}
diff --git a/backend/server.js b/backend/server.js
index 1856f45..281436c 100644
--- a/backend/server.js
+++ b/backend/server.js
@@ -1102,6 +1102,18 @@ const geofence = polygon([
}
})
+ // Get App Blacklist Endpoint
+ app.get('/api/security/app-blacklist', authenticateJWT, async (req, res) => {
+ try {
+ const [rows] = await db.execute('SELECT package_name FROM app_blacklist');
+ const packageNames = rows.map(row => row.package_name);
+ res.json(packageNames);
+ } catch (error) {
+ console.error('Get app blacklist error:', error);
+ res.status(500).json({ message: 'Database error fetching app blacklist.' });
+ }
+ });
+
// --- Server Start ---
const httpPort = process.env.HTTP_PORT || 3000
const httpsPort = process.env.HTTPS_PORT || 3443
diff --git a/src/App.vue b/src/App.vue
index d574609..fd0823d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,12 +1,20 @@
+
+
+
+
Application Blocked
+
{{ blockMessage }}
+
+
+
-
+
-
+
@@ -27,6 +35,8 @@ const router = useRouter()
const route = useRoute()
const isLoggedIn = ref(false)
+const isBlocked = ref(false)
+const blockMessage = ref('')
// Show bottom navigation only for worker routes
@@ -102,6 +112,9 @@ watch(
)
onMounted(async () => {
+ // Add app blocked event listener
+ window.addEventListener('app-blocked', handleAppBlocked)
+
// Initialize SafeArea plugin for proper safe area handling
if (Capacitor.isNativePlatform()) {
try {
@@ -179,8 +192,14 @@ onMounted(async () => {
}
})
+const handleAppBlocked = (event) => {
+ isBlocked.value = true
+ blockMessage.value = event.detail.message
+}
+
onBeforeUnmount(() => {
// Clean up listeners
+ window.removeEventListener('app-blocked', handleAppBlocked)
if (Capacitor.isNativePlatform()) {
App.removeAllListeners()
}
@@ -188,6 +207,36 @@ onBeforeUnmount(() => {