freerasp-react-native 3.9.2 → 3.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -2
- package/android/build.gradle +4 -1
- package/android/src/main/java/com/freeraspreactnative/FreeraspReactNativeModule.kt +49 -4
- package/android/src/main/java/com/freeraspreactnative/FreeraspThreatHandler.kt +5 -1
- package/android/src/main/java/com/freeraspreactnative/Threat.kt +3 -1
- package/android/src/main/java/com/freeraspreactnative/models/RNSuspiciousAppInfo.kt +25 -0
- package/android/src/main/java/com/freeraspreactnative/utils/Extensions.kt +116 -0
- package/android/src/main/java/com/freeraspreactnative/utils/Utils.kt +82 -0
- package/example/assets/arrow-down.png +0 -0
- package/example/assets/arrow-up.png +0 -0
- package/example/ios/FreeraspReactNativeExample.xcodeproj/project.pbxproj +45 -45
- package/example/src/App.tsx +57 -2
- package/example/src/DemoApp.tsx +16 -2
- package/example/src/MalwareItem.tsx +158 -0
- package/example/src/MalwareModal.tsx +126 -0
- package/example/src/checks.ts +1 -0
- package/example/src/styles.ts +1 -0
- package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeDirectory +0 -0
- package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeRequirements +0 -0
- package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeRequirements-1 +0 -0
- package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeResources +60 -60
- package/ios/TalsecRuntime.xcframework/_CodeSignature/CodeSignature +0 -0
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/CurlWrapper.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/TalsecRuntime-Swift.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/curl.h +7 -7
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/multi.h +4 -4
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/options.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Headers/urlapi.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Info.plist +0 -0
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios.abi.json +135 -135
- package/ios/TalsecRuntime.xcframework/ios-arm64/TalsecRuntime.framework/TalsecRuntime +0 -0
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/CurlWrapper.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/TalsecRuntime-Swift.h +2 -2
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/curl.h +7 -7
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/multi.h +4 -4
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/options.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Headers/urlapi.h +1 -1
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Info.plist +0 -0
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/arm64-apple-ios-simulator.abi.json +135 -135
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/Modules/TalsecRuntime.swiftmodule/x86_64-apple-ios-simulator.abi.json +135 -135
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/TalsecRuntime +0 -0
- package/ios/TalsecRuntime.xcframework/ios-arm64_x86_64-simulator/TalsecRuntime.framework/_CodeSignature/CodeResources +21 -21
- package/lib/commonjs/index.js +63 -19
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/{definitions.js → threat.js} +3 -2
- package/lib/commonjs/threat.js.map +1 -0
- package/lib/commonjs/types.js +2 -0
- package/lib/commonjs/types.js.map +1 -0
- package/lib/commonjs/utils.js +2 -2
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/module/index.js +30 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/{definitions.js → threat.js} +3 -2
- package/lib/module/threat.js.map +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils.js +1 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/src/index.d.ts +3 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/threat.d.ts +20 -0
- package/lib/typescript/src/threat.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +50 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +3 -24
- package/src/index.tsx +35 -8
- package/src/{definitions.ts → threat.ts} +2 -30
- package/src/types.ts +55 -0
- package/src/utils.ts +1 -1
- package/android/src/main/java/com/freeraspreactnative/Utils.kt +0 -40
- package/lib/commonjs/definitions.js.map +0 -1
- package/lib/module/definitions.js.map +0 -1
- package/lib/typescript/src/definitions.d.ts +0 -47
- package/lib/typescript/src/definitions.d.ts.map +0 -1
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
/* Begin PBXBuildFile section */
|
|
10
10
|
00E356F31AD99517003FC87E /* FreeraspReactNativeExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* FreeraspReactNativeExampleTests.m */; };
|
|
11
|
-
|
|
11
|
+
030014488BDA0448D18833AA /* libPods-FreeraspReactNativeExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8488310E7CEBAD4453B2B105 /* libPods-FreeraspReactNativeExample.a */; };
|
|
12
12
|
13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
|
|
13
13
|
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
|
14
14
|
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
|
15
|
-
|
|
15
|
+
4ED36F23A824FA42AAF69DEA /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 09A90BCC7156013BB41680E2 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */; };
|
|
16
16
|
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
|
|
17
17
|
/* End PBXBuildFile section */
|
|
18
18
|
|
|
@@ -30,19 +30,19 @@
|
|
|
30
30
|
00E356EE1AD99517003FC87E /* FreeraspReactNativeExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FreeraspReactNativeExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
31
31
|
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
|
32
32
|
00E356F21AD99517003FC87E /* FreeraspReactNativeExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FreeraspReactNativeExampleTests.m; sourceTree = "<group>"; };
|
|
33
|
+
038937FFB95426BE2297B416 /* Pods-FreeraspReactNativeExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.debug.xcconfig"; sourceTree = "<group>"; };
|
|
34
|
+
09A90BCC7156013BB41680E2 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
33
35
|
13B07F961A680F5B00A75B9A /* FreeraspReactNativeExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FreeraspReactNativeExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
34
36
|
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = FreeraspReactNativeExample/AppDelegate.h; sourceTree = "<group>"; };
|
|
35
37
|
13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = FreeraspReactNativeExample/AppDelegate.mm; sourceTree = "<group>"; };
|
|
36
38
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = FreeraspReactNativeExample/Images.xcassets; sourceTree = "<group>"; };
|
|
37
39
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = FreeraspReactNativeExample/Info.plist; sourceTree = "<group>"; };
|
|
38
40
|
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = FreeraspReactNativeExample/main.m; sourceTree = "<group>"; };
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
5709B34CF0A7D63546082F79 /* Pods-FreeraspReactNativeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.release.xcconfig"; sourceTree = "<group>"; };
|
|
42
|
-
5B7EB9410499542E8C5724F5 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
|
|
43
|
-
5DCACB8F33CDC322A6C60F78 /* libPods-FreeraspReactNativeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
41
|
+
1BFFF7106D93FA70E5F83B56 /* Pods-FreeraspReactNativeExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample.release.xcconfig"; sourceTree = "<group>"; };
|
|
42
|
+
2DDE1F099A37D62A4850E520 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig"; sourceTree = "<group>"; };
|
|
44
43
|
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = FreeraspReactNativeExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
|
45
|
-
|
|
44
|
+
8488310E7CEBAD4453B2B105 /* libPods-FreeraspReactNativeExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FreeraspReactNativeExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
45
|
+
85E04B3D386AA8B417F2AAF3 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig"; sourceTree = "<group>"; };
|
|
46
46
|
8C2BD8B529DF06E4000304E9 /* Talsec */ = {isa = PBXFileReference; lastKnownFileType = folder; name = Talsec; path = ../../ios/Talsec; sourceTree = "<group>"; };
|
|
47
47
|
8C2BD8BB29DF0976000304E9 /* TalsecRuntime.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TalsecRuntime.xcframework; path = ../../ios/Talsec/TalsecRuntime.xcframework; sourceTree = "<group>"; };
|
|
48
48
|
A41E05172962B9FD00B363A8 /* TalsecRuntime.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = TalsecRuntime.xcframework; path = "../../../../React/test2/someTestProject/node_modules/freerasp-react-native/ios/TalsecRuntime.xcframework"; sourceTree = "<group>"; };
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
isa = PBXFrameworksBuildPhase;
|
|
58
58
|
buildActionMask = 2147483647;
|
|
59
59
|
files = (
|
|
60
|
-
|
|
60
|
+
4ED36F23A824FA42AAF69DEA /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a in Frameworks */,
|
|
61
61
|
);
|
|
62
62
|
runOnlyForDeploymentPostprocessing = 0;
|
|
63
63
|
};
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
isa = PBXFrameworksBuildPhase;
|
|
66
66
|
buildActionMask = 2147483647;
|
|
67
67
|
files = (
|
|
68
|
-
|
|
68
|
+
030014488BDA0448D18833AA /* libPods-FreeraspReactNativeExample.a in Frameworks */,
|
|
69
69
|
);
|
|
70
70
|
runOnlyForDeploymentPostprocessing = 0;
|
|
71
71
|
};
|
|
@@ -112,8 +112,8 @@
|
|
|
112
112
|
A44E69A2295DA98F000A719C /* TalsecRuntime.xcframework */,
|
|
113
113
|
A41E05172962B9FD00B363A8 /* TalsecRuntime.xcframework */,
|
|
114
114
|
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
8488310E7CEBAD4453B2B105 /* libPods-FreeraspReactNativeExample.a */,
|
|
116
|
+
09A90BCC7156013BB41680E2 /* libPods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.a */,
|
|
117
117
|
);
|
|
118
118
|
name = Frameworks;
|
|
119
119
|
sourceTree = "<group>";
|
|
@@ -152,10 +152,10 @@
|
|
|
152
152
|
BBD78D7AC51CEA395F1C20DB /* Pods */ = {
|
|
153
153
|
isa = PBXGroup;
|
|
154
154
|
children = (
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
038937FFB95426BE2297B416 /* Pods-FreeraspReactNativeExample.debug.xcconfig */,
|
|
156
|
+
1BFFF7106D93FA70E5F83B56 /* Pods-FreeraspReactNativeExample.release.xcconfig */,
|
|
157
|
+
85E04B3D386AA8B417F2AAF3 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */,
|
|
158
|
+
2DDE1F099A37D62A4850E520 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */,
|
|
159
159
|
);
|
|
160
160
|
path = Pods;
|
|
161
161
|
sourceTree = "<group>";
|
|
@@ -167,12 +167,12 @@
|
|
|
167
167
|
isa = PBXNativeTarget;
|
|
168
168
|
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FreeraspReactNativeExampleTests" */;
|
|
169
169
|
buildPhases = (
|
|
170
|
-
|
|
170
|
+
A4BC7293855B5A05F4C72AC9 /* [CP] Check Pods Manifest.lock */,
|
|
171
171
|
00E356EA1AD99517003FC87E /* Sources */,
|
|
172
172
|
00E356EB1AD99517003FC87E /* Frameworks */,
|
|
173
173
|
00E356EC1AD99517003FC87E /* Resources */,
|
|
174
|
-
|
|
175
|
-
|
|
174
|
+
995743924976FEBF7E02912B /* [CP] Embed Pods Frameworks */,
|
|
175
|
+
E336F02480C5189A28C1E46B /* [CP] Copy Pods Resources */,
|
|
176
176
|
);
|
|
177
177
|
buildRules = (
|
|
178
178
|
);
|
|
@@ -188,14 +188,14 @@
|
|
|
188
188
|
isa = PBXNativeTarget;
|
|
189
189
|
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FreeraspReactNativeExample" */;
|
|
190
190
|
buildPhases = (
|
|
191
|
-
|
|
191
|
+
A46062B41DA6D2651EEB7340 /* [CP] Check Pods Manifest.lock */,
|
|
192
192
|
FD10A7F022414F080027D42C /* Start Packager */,
|
|
193
193
|
13B07F871A680F5B00A75B9A /* Sources */,
|
|
194
194
|
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
|
195
195
|
13B07F8E1A680F5B00A75B9A /* Resources */,
|
|
196
196
|
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
98A5FD6C0A62A5C5AA93C483 /* [CP] Embed Pods Frameworks */,
|
|
198
|
+
BE093CB94A51CDDBD748D259 /* [CP] Copy Pods Resources */,
|
|
199
199
|
);
|
|
200
200
|
buildRules = (
|
|
201
201
|
);
|
|
@@ -278,7 +278,7 @@
|
|
|
278
278
|
shellPath = /bin/sh;
|
|
279
279
|
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
|
|
280
280
|
};
|
|
281
|
-
|
|
281
|
+
98A5FD6C0A62A5C5AA93C483 /* [CP] Embed Pods Frameworks */ = {
|
|
282
282
|
isa = PBXShellScriptBuildPhase;
|
|
283
283
|
buildActionMask = 2147483647;
|
|
284
284
|
files = (
|
|
@@ -295,29 +295,24 @@
|
|
|
295
295
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample-frameworks.sh\"\n";
|
|
296
296
|
showEnvVarsInLog = 0;
|
|
297
297
|
};
|
|
298
|
-
|
|
298
|
+
995743924976FEBF7E02912B /* [CP] Embed Pods Frameworks */ = {
|
|
299
299
|
isa = PBXShellScriptBuildPhase;
|
|
300
300
|
buildActionMask = 2147483647;
|
|
301
301
|
files = (
|
|
302
302
|
);
|
|
303
303
|
inputFileListPaths = (
|
|
304
|
+
"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
|
304
305
|
);
|
|
305
|
-
|
|
306
|
-
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
|
307
|
-
"${PODS_ROOT}/Manifest.lock",
|
|
308
|
-
);
|
|
309
|
-
name = "[CP] Check Pods Manifest.lock";
|
|
306
|
+
name = "[CP] Embed Pods Frameworks";
|
|
310
307
|
outputFileListPaths = (
|
|
311
|
-
|
|
312
|
-
outputPaths = (
|
|
313
|
-
"$(DERIVED_FILE_DIR)/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-checkManifestLockResult.txt",
|
|
308
|
+
"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
|
314
309
|
);
|
|
315
310
|
runOnlyForDeploymentPostprocessing = 0;
|
|
316
311
|
shellPath = /bin/sh;
|
|
317
|
-
shellScript = "
|
|
312
|
+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks.sh\"\n";
|
|
318
313
|
showEnvVarsInLog = 0;
|
|
319
314
|
};
|
|
320
|
-
|
|
315
|
+
A46062B41DA6D2651EEB7340 /* [CP] Check Pods Manifest.lock */ = {
|
|
321
316
|
isa = PBXShellScriptBuildPhase;
|
|
322
317
|
buildActionMask = 2147483647;
|
|
323
318
|
files = (
|
|
@@ -339,24 +334,29 @@
|
|
|
339
334
|
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
|
340
335
|
showEnvVarsInLog = 0;
|
|
341
336
|
};
|
|
342
|
-
|
|
337
|
+
A4BC7293855B5A05F4C72AC9 /* [CP] Check Pods Manifest.lock */ = {
|
|
343
338
|
isa = PBXShellScriptBuildPhase;
|
|
344
339
|
buildActionMask = 2147483647;
|
|
345
340
|
files = (
|
|
346
341
|
);
|
|
347
342
|
inputFileListPaths = (
|
|
348
|
-
"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
|
349
343
|
);
|
|
350
|
-
|
|
344
|
+
inputPaths = (
|
|
345
|
+
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
|
|
346
|
+
"${PODS_ROOT}/Manifest.lock",
|
|
347
|
+
);
|
|
348
|
+
name = "[CP] Check Pods Manifest.lock";
|
|
351
349
|
outputFileListPaths = (
|
|
352
|
-
|
|
350
|
+
);
|
|
351
|
+
outputPaths = (
|
|
352
|
+
"$(DERIVED_FILE_DIR)/Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests-checkManifestLockResult.txt",
|
|
353
353
|
);
|
|
354
354
|
runOnlyForDeploymentPostprocessing = 0;
|
|
355
355
|
shellPath = /bin/sh;
|
|
356
|
-
shellScript = "\"${PODS_ROOT}/
|
|
356
|
+
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
|
357
357
|
showEnvVarsInLog = 0;
|
|
358
358
|
};
|
|
359
|
-
|
|
359
|
+
BE093CB94A51CDDBD748D259 /* [CP] Copy Pods Resources */ = {
|
|
360
360
|
isa = PBXShellScriptBuildPhase;
|
|
361
361
|
buildActionMask = 2147483647;
|
|
362
362
|
files = (
|
|
@@ -373,7 +373,7 @@
|
|
|
373
373
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FreeraspReactNativeExample/Pods-FreeraspReactNativeExample-resources.sh\"\n";
|
|
374
374
|
showEnvVarsInLog = 0;
|
|
375
375
|
};
|
|
376
|
-
|
|
376
|
+
E336F02480C5189A28C1E46B /* [CP] Copy Pods Resources */ = {
|
|
377
377
|
isa = PBXShellScriptBuildPhase;
|
|
378
378
|
buildActionMask = 2147483647;
|
|
379
379
|
files = (
|
|
@@ -442,7 +442,7 @@
|
|
|
442
442
|
/* Begin XCBuildConfiguration section */
|
|
443
443
|
00E356F61AD99517003FC87E /* Debug */ = {
|
|
444
444
|
isa = XCBuildConfiguration;
|
|
445
|
-
baseConfigurationReference =
|
|
445
|
+
baseConfigurationReference = 85E04B3D386AA8B417F2AAF3 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.debug.xcconfig */;
|
|
446
446
|
buildSettings = {
|
|
447
447
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
448
448
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
|
@@ -469,7 +469,7 @@
|
|
|
469
469
|
};
|
|
470
470
|
00E356F71AD99517003FC87E /* Release */ = {
|
|
471
471
|
isa = XCBuildConfiguration;
|
|
472
|
-
baseConfigurationReference =
|
|
472
|
+
baseConfigurationReference = 2DDE1F099A37D62A4850E520 /* Pods-FreeraspReactNativeExample-FreeraspReactNativeExampleTests.release.xcconfig */;
|
|
473
473
|
buildSettings = {
|
|
474
474
|
BUNDLE_LOADER = "$(TEST_HOST)";
|
|
475
475
|
COPY_PHASE_STRIP = NO;
|
|
@@ -493,7 +493,7 @@
|
|
|
493
493
|
};
|
|
494
494
|
13B07F941A680F5B00A75B9A /* Debug */ = {
|
|
495
495
|
isa = XCBuildConfiguration;
|
|
496
|
-
baseConfigurationReference =
|
|
496
|
+
baseConfigurationReference = 038937FFB95426BE2297B416 /* Pods-FreeraspReactNativeExample.debug.xcconfig */;
|
|
497
497
|
buildSettings = {
|
|
498
498
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
499
499
|
CLANG_ENABLE_MODULES = YES;
|
|
@@ -519,7 +519,7 @@
|
|
|
519
519
|
};
|
|
520
520
|
13B07F951A680F5B00A75B9A /* Release */ = {
|
|
521
521
|
isa = XCBuildConfiguration;
|
|
522
|
-
baseConfigurationReference =
|
|
522
|
+
baseConfigurationReference = 1BFFF7106D93FA70E5F83B56 /* Pods-FreeraspReactNativeExample.release.xcconfig */;
|
|
523
523
|
buildSettings = {
|
|
524
524
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
|
525
525
|
CLANG_ENABLE_MODULES = YES;
|
package/example/src/App.tsx
CHANGED
|
@@ -1,21 +1,48 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
|
|
3
3
|
import { Platform } from 'react-native';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
addToWhitelist,
|
|
6
|
+
useFreeRasp,
|
|
7
|
+
type SuspiciousAppInfo,
|
|
8
|
+
} from 'freerasp-react-native';
|
|
5
9
|
import { DemoApp } from './DemoApp';
|
|
6
10
|
import { commonChecks, iosChecks, androidChecks } from './checks';
|
|
11
|
+
import { useEffect } from 'react';
|
|
7
12
|
|
|
8
13
|
const App = () => {
|
|
9
14
|
const [appChecks, setAppChecks] = React.useState([
|
|
10
15
|
...commonChecks,
|
|
11
16
|
...(Platform.OS === 'ios' ? iosChecks : androidChecks),
|
|
12
17
|
]);
|
|
18
|
+
const [suspiciousApps, setSuspiciousApps] = React.useState<
|
|
19
|
+
SuspiciousAppInfo[]
|
|
20
|
+
>([]);
|
|
21
|
+
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
(async () => {
|
|
24
|
+
Platform.OS === 'android' && (await addItemsToMalwareWhitelist());
|
|
25
|
+
})();
|
|
26
|
+
}, []);
|
|
13
27
|
|
|
14
28
|
const config = {
|
|
15
29
|
androidConfig: {
|
|
16
30
|
packageName: 'com.freeraspreactnativeexample',
|
|
17
31
|
certificateHashes: ['AKoRuyLMM91E7lX/Zqp3u4jMmd0A7hH/Iqozu0TMVd0='],
|
|
18
32
|
// supportedAlternativeStores: ['storeOne', 'storeTwo'],
|
|
33
|
+
malwareConfig: {
|
|
34
|
+
blacklistedHashes: ['FgvSehLMM91E7lX/Zqp3u4jMmd0A7hH/Iqozu0TMVd0u'],
|
|
35
|
+
blacklistedPackageNames: ['com.wultra.app.screenlogger'],
|
|
36
|
+
suspiciousPermissions: [
|
|
37
|
+
[
|
|
38
|
+
'android.permission.INTERNET',
|
|
39
|
+
'android.permission.ACCESS_COARSE_LOCATION',
|
|
40
|
+
],
|
|
41
|
+
['android.permission.BLUETOOTH'],
|
|
42
|
+
['android.permission.BATTERY_STATS'],
|
|
43
|
+
],
|
|
44
|
+
whitelistedInstallationSources: ['com.apkpure.aegon'],
|
|
45
|
+
},
|
|
19
46
|
},
|
|
20
47
|
iosConfig: {
|
|
21
48
|
appBundleId: 'com.freeraspreactnativeexample',
|
|
@@ -144,11 +171,39 @@ const App = () => {
|
|
|
144
171
|
)
|
|
145
172
|
);
|
|
146
173
|
},
|
|
174
|
+
// Android only
|
|
175
|
+
malware: (detectedApps: SuspiciousAppInfo[]) => {
|
|
176
|
+
setSuspiciousApps(detectedApps);
|
|
177
|
+
setAppChecks((currentState) =>
|
|
178
|
+
currentState.map((threat) =>
|
|
179
|
+
threat.name === 'Malware' ? { ...threat, status: 'nok' } : threat
|
|
180
|
+
)
|
|
181
|
+
);
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
const addItemsToMalwareWhitelist = async () => {
|
|
186
|
+
const appsToWhitelist = [
|
|
187
|
+
'com.talsecreactnativesecuritypluginexample',
|
|
188
|
+
'com.example.myApp',
|
|
189
|
+
];
|
|
190
|
+
await Promise.all(
|
|
191
|
+
appsToWhitelist.map(async (app) => {
|
|
192
|
+
try {
|
|
193
|
+
const whitelistResponse = await addToWhitelist(app);
|
|
194
|
+
console.info(
|
|
195
|
+
`${app} stored to Malware Whitelist: ${whitelistResponse}`
|
|
196
|
+
);
|
|
197
|
+
} catch (error) {
|
|
198
|
+
console.info('Malware whitelist failed: ', error);
|
|
199
|
+
}
|
|
200
|
+
})
|
|
201
|
+
);
|
|
147
202
|
};
|
|
148
203
|
|
|
149
204
|
useFreeRasp(config, actions);
|
|
150
205
|
|
|
151
|
-
return <DemoApp checks={appChecks} />;
|
|
206
|
+
return <DemoApp checks={appChecks} suspiciousApps={suspiciousApps} />;
|
|
152
207
|
};
|
|
153
208
|
|
|
154
209
|
export default App;
|
package/example/src/DemoApp.tsx
CHANGED
|
@@ -6,8 +6,16 @@ import CloseCircle from '../assets/close-circle-outline.png';
|
|
|
6
6
|
import TalsecLogo from '../assets/talsec-logo.png';
|
|
7
7
|
import { Image } from 'react-native';
|
|
8
8
|
import { Colors } from './styles';
|
|
9
|
+
import { MalwareModal } from './MalwareModal';
|
|
10
|
+
import type { SuspiciousAppInfo } from 'freerasp-react-native';
|
|
9
11
|
|
|
10
|
-
export const DemoApp
|
|
12
|
+
export const DemoApp: React.FC<{
|
|
13
|
+
checks: {
|
|
14
|
+
name: string;
|
|
15
|
+
status: string;
|
|
16
|
+
}[];
|
|
17
|
+
suspiciousApps: SuspiciousAppInfo[];
|
|
18
|
+
}> = ({ checks, suspiciousApps }) => {
|
|
11
19
|
return (
|
|
12
20
|
<>
|
|
13
21
|
<Flex
|
|
@@ -30,7 +38,7 @@ export const DemoApp = (props: any) => {
|
|
|
30
38
|
>
|
|
31
39
|
freeRASP checks:
|
|
32
40
|
</Text>
|
|
33
|
-
{
|
|
41
|
+
{checks.map((check: any, idx: number) => (
|
|
34
42
|
<Box
|
|
35
43
|
key={idx}
|
|
36
44
|
style={{
|
|
@@ -60,6 +68,12 @@ export const DemoApp = (props: any) => {
|
|
|
60
68
|
>
|
|
61
69
|
{check.name}
|
|
62
70
|
</Text>
|
|
71
|
+
{check.name === 'Malware' && (
|
|
72
|
+
<MalwareModal
|
|
73
|
+
isDisabled={check.status === 'ok'}
|
|
74
|
+
suspiciousApps={suspiciousApps}
|
|
75
|
+
/>
|
|
76
|
+
)}
|
|
63
77
|
{check.status === 'ok' ? (
|
|
64
78
|
<Image
|
|
65
79
|
source={CheckmarkCircle}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { Button, HStack } from '@react-native-material/core';
|
|
2
|
+
import { addToWhitelist, type SuspiciousAppInfo } from 'freerasp-react-native';
|
|
3
|
+
import ArrowUp from '../assets/arrow-up.png';
|
|
4
|
+
import ArrowDown from '../assets/arrow-down.png';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
import { useState } from 'react';
|
|
7
|
+
import { TouchableOpacity, View, Text, Image, StyleSheet } from 'react-native';
|
|
8
|
+
import { Colors } from './styles';
|
|
9
|
+
|
|
10
|
+
export const MalwareItem: React.FC<{ app: SuspiciousAppInfo }> = ({ app }) => {
|
|
11
|
+
const [expanded, setExpanded] = useState(false);
|
|
12
|
+
|
|
13
|
+
const appUninstall = async () => {
|
|
14
|
+
alert('Implement yourself!');
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const whitelistApp = async (packageName: string) => {
|
|
18
|
+
try {
|
|
19
|
+
const whitelistResponse = await addToWhitelist(packageName);
|
|
20
|
+
console.info(
|
|
21
|
+
`Malware Whitelist response for ${app}: ${whitelistResponse}`
|
|
22
|
+
);
|
|
23
|
+
alert('Restart app for whitelist to take effect');
|
|
24
|
+
} catch (error: any) {
|
|
25
|
+
console.info('Error while adding app to malware whitelist: ', error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<View style={styles.item}>
|
|
31
|
+
<TouchableOpacity onPress={() => setExpanded(!expanded)}>
|
|
32
|
+
<HStack>
|
|
33
|
+
<Image
|
|
34
|
+
style={styles.iconSmall}
|
|
35
|
+
source={{
|
|
36
|
+
uri: `data:image/png;base64,${app.packageInfo.appIcon}`,
|
|
37
|
+
}}
|
|
38
|
+
/>
|
|
39
|
+
<View style={styles.textView}>
|
|
40
|
+
<Text numberOfLines={1} style={styles.titleText}>
|
|
41
|
+
{app.packageInfo.appName}
|
|
42
|
+
</Text>
|
|
43
|
+
</View>
|
|
44
|
+
|
|
45
|
+
<View style={styles.buttonView}>
|
|
46
|
+
<Image
|
|
47
|
+
source={expanded ? ArrowUp : ArrowDown}
|
|
48
|
+
style={styles.expandArrow}
|
|
49
|
+
/>
|
|
50
|
+
</View>
|
|
51
|
+
</HStack>
|
|
52
|
+
</TouchableOpacity>
|
|
53
|
+
{expanded && (
|
|
54
|
+
<>
|
|
55
|
+
<View style={styles.spacer} />
|
|
56
|
+
<Text style={styles.listItemTitle}>Package name:</Text>
|
|
57
|
+
<Text style={styles.listItem}>{app.packageInfo.packageName}</Text>
|
|
58
|
+
<Text style={styles.listItemTitle}>App name:</Text>
|
|
59
|
+
<Text style={styles.listItem}>
|
|
60
|
+
{app.packageInfo.appName ?? 'Not specified'}
|
|
61
|
+
</Text>
|
|
62
|
+
<Text style={styles.listItemTitle}>App version:</Text>
|
|
63
|
+
<Text style={styles.listItem}>
|
|
64
|
+
{app.packageInfo.version ?? 'Not specified'}
|
|
65
|
+
</Text>
|
|
66
|
+
<Text style={styles.listItemTitle}>App Icon:</Text>
|
|
67
|
+
{app.packageInfo.appIcon ? (
|
|
68
|
+
<Image
|
|
69
|
+
style={styles.icon}
|
|
70
|
+
source={{
|
|
71
|
+
uri: `data:image/png;base64,${app.packageInfo.appIcon}`,
|
|
72
|
+
}}
|
|
73
|
+
/>
|
|
74
|
+
) : (
|
|
75
|
+
<Text style={styles.listItem}>Not specified</Text>
|
|
76
|
+
)}
|
|
77
|
+
<Text style={styles.listItemTitle}>Installer store:</Text>
|
|
78
|
+
<Text style={styles.listItem}>
|
|
79
|
+
{app.packageInfo.installerStore ?? 'Not specified'}
|
|
80
|
+
</Text>
|
|
81
|
+
<Text style={styles.listItemTitle}>Detection reason:</Text>
|
|
82
|
+
<Text style={styles.listItem}>{app.reason}</Text>
|
|
83
|
+
<HStack style={styles.buttonGroup}>
|
|
84
|
+
<Button
|
|
85
|
+
title={'Add to whitelist'}
|
|
86
|
+
onPress={() => whitelistApp(app.packageInfo.packageName)}
|
|
87
|
+
/>
|
|
88
|
+
<Button title={'Uninstall'} onPress={appUninstall} />
|
|
89
|
+
</HStack>
|
|
90
|
+
</>
|
|
91
|
+
)}
|
|
92
|
+
</View>
|
|
93
|
+
);
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const styles = StyleSheet.create({
|
|
97
|
+
button: {
|
|
98
|
+
borderRadius: 20,
|
|
99
|
+
paddingHorizontal: 30,
|
|
100
|
+
paddingVertical: 10,
|
|
101
|
+
marginTop: 15,
|
|
102
|
+
elevation: 2,
|
|
103
|
+
},
|
|
104
|
+
buttonOpen: {
|
|
105
|
+
backgroundColor: '#F194FF',
|
|
106
|
+
},
|
|
107
|
+
buttonClose: {
|
|
108
|
+
backgroundColor: '#2196F3',
|
|
109
|
+
},
|
|
110
|
+
item: {
|
|
111
|
+
backgroundColor: '#d4e4ff',
|
|
112
|
+
borderRadius: 20,
|
|
113
|
+
padding: 20,
|
|
114
|
+
marginVertical: 8,
|
|
115
|
+
},
|
|
116
|
+
listItemTitle: {
|
|
117
|
+
fontSize: 20,
|
|
118
|
+
fontWeight: 'bold',
|
|
119
|
+
},
|
|
120
|
+
listItem: {
|
|
121
|
+
fontSize: 16,
|
|
122
|
+
paddingBottom: 5,
|
|
123
|
+
},
|
|
124
|
+
titleText: {
|
|
125
|
+
fontSize: 20,
|
|
126
|
+
},
|
|
127
|
+
icon: {
|
|
128
|
+
marginTop: 5,
|
|
129
|
+
marginBottom: 5,
|
|
130
|
+
width: 50,
|
|
131
|
+
height: 50,
|
|
132
|
+
},
|
|
133
|
+
iconSmall: {
|
|
134
|
+
width: 40,
|
|
135
|
+
height: 40,
|
|
136
|
+
},
|
|
137
|
+
textView: {
|
|
138
|
+
justifyContent: 'center',
|
|
139
|
+
flex: 1,
|
|
140
|
+
marginLeft: 20,
|
|
141
|
+
marginRight: 30,
|
|
142
|
+
},
|
|
143
|
+
buttonView: {
|
|
144
|
+
justifyContent: 'center',
|
|
145
|
+
},
|
|
146
|
+
spacer: {
|
|
147
|
+
height: 15,
|
|
148
|
+
},
|
|
149
|
+
buttonGroup: {
|
|
150
|
+
marginTop: 10,
|
|
151
|
+
justifyContent: 'space-between',
|
|
152
|
+
},
|
|
153
|
+
expandArrow: {
|
|
154
|
+
tintColor: Colors.grey,
|
|
155
|
+
width: 30,
|
|
156
|
+
height: 30,
|
|
157
|
+
},
|
|
158
|
+
});
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
Alert,
|
|
4
|
+
FlatList,
|
|
5
|
+
Modal,
|
|
6
|
+
Pressable,
|
|
7
|
+
SafeAreaView,
|
|
8
|
+
StyleSheet,
|
|
9
|
+
Text,
|
|
10
|
+
View,
|
|
11
|
+
Button,
|
|
12
|
+
} from 'react-native';
|
|
13
|
+
import type { SuspiciousAppInfo } from 'freerasp-react-native';
|
|
14
|
+
import { MalwareItem } from './MalwareItem';
|
|
15
|
+
|
|
16
|
+
export const MalwareModal: React.FC<{
|
|
17
|
+
isDisabled: boolean;
|
|
18
|
+
suspiciousApps: SuspiciousAppInfo[];
|
|
19
|
+
}> = ({ isDisabled, suspiciousApps }) => {
|
|
20
|
+
const [modalVisible, setModalVisible] = useState(false);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<>
|
|
24
|
+
{!isDisabled && (
|
|
25
|
+
<>
|
|
26
|
+
<View style={styles.viewFlex} />
|
|
27
|
+
<Button
|
|
28
|
+
title={'Details'}
|
|
29
|
+
color="#cf000a"
|
|
30
|
+
disabled={isDisabled}
|
|
31
|
+
onPress={() => setModalVisible(true)}
|
|
32
|
+
/>
|
|
33
|
+
<View style={styles.viewWithMargin} />
|
|
34
|
+
</>
|
|
35
|
+
)}
|
|
36
|
+
|
|
37
|
+
<Modal
|
|
38
|
+
animationType="slide"
|
|
39
|
+
transparent={true}
|
|
40
|
+
visible={modalVisible}
|
|
41
|
+
style={styles.modal}
|
|
42
|
+
onRequestClose={() => {
|
|
43
|
+
Alert.alert('Modal has been closed.');
|
|
44
|
+
setModalVisible(false);
|
|
45
|
+
}}
|
|
46
|
+
>
|
|
47
|
+
<View style={styles.centeredView}>
|
|
48
|
+
<View style={styles.modalView}>
|
|
49
|
+
<SafeAreaView style={styles.container}>
|
|
50
|
+
<Text style={styles.title}>Detected malware:</Text>
|
|
51
|
+
<FlatList
|
|
52
|
+
data={suspiciousApps}
|
|
53
|
+
renderItem={({ item }) => <MalwareItem app={item} />}
|
|
54
|
+
keyExtractor={(_, index) => index.toString()}
|
|
55
|
+
/>
|
|
56
|
+
</SafeAreaView>
|
|
57
|
+
<Pressable
|
|
58
|
+
style={[styles.button, styles.buttonClose]}
|
|
59
|
+
onPress={() => setModalVisible(false)}
|
|
60
|
+
>
|
|
61
|
+
<Text style={styles.textStyle}>Close</Text>
|
|
62
|
+
</Pressable>
|
|
63
|
+
</View>
|
|
64
|
+
</View>
|
|
65
|
+
</Modal>
|
|
66
|
+
</>
|
|
67
|
+
);
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const styles = StyleSheet.create({
|
|
71
|
+
centeredView: {
|
|
72
|
+
flex: 1,
|
|
73
|
+
justifyContent: 'center',
|
|
74
|
+
alignItems: 'center',
|
|
75
|
+
},
|
|
76
|
+
modalView: {
|
|
77
|
+
margin: 10,
|
|
78
|
+
backgroundColor: 'white',
|
|
79
|
+
borderRadius: 20,
|
|
80
|
+
padding: 15,
|
|
81
|
+
alignItems: 'center',
|
|
82
|
+
shadowColor: '#000',
|
|
83
|
+
shadowOffset: {
|
|
84
|
+
width: 0,
|
|
85
|
+
height: 2,
|
|
86
|
+
},
|
|
87
|
+
shadowOpacity: 0.25,
|
|
88
|
+
shadowRadius: 4,
|
|
89
|
+
elevation: 5,
|
|
90
|
+
flex: 1,
|
|
91
|
+
width: '98%',
|
|
92
|
+
},
|
|
93
|
+
button: {
|
|
94
|
+
borderRadius: 20,
|
|
95
|
+
paddingHorizontal: 30,
|
|
96
|
+
paddingVertical: 10,
|
|
97
|
+
marginTop: 15,
|
|
98
|
+
elevation: 2,
|
|
99
|
+
},
|
|
100
|
+
buttonClose: {
|
|
101
|
+
backgroundColor: '#2196F3',
|
|
102
|
+
},
|
|
103
|
+
textStyle: {
|
|
104
|
+
color: 'white',
|
|
105
|
+
fontWeight: 'bold',
|
|
106
|
+
textAlign: 'center',
|
|
107
|
+
},
|
|
108
|
+
container: {
|
|
109
|
+
flex: 1,
|
|
110
|
+
width: '100%',
|
|
111
|
+
},
|
|
112
|
+
title: {
|
|
113
|
+
fontSize: 32,
|
|
114
|
+
fontWeight: 'bold',
|
|
115
|
+
textAlign: 'center',
|
|
116
|
+
},
|
|
117
|
+
viewFlex: {
|
|
118
|
+
flex: 1,
|
|
119
|
+
},
|
|
120
|
+
viewWithMargin: {
|
|
121
|
+
margin: 5,
|
|
122
|
+
},
|
|
123
|
+
modal: {
|
|
124
|
+
flex: 1,
|
|
125
|
+
},
|
|
126
|
+
});
|
package/example/src/checks.ts
CHANGED