capacitor-freerasp 2.3.0 → 2.4.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.
Files changed (34) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/CapacitorFreerasp.podspec +5 -1
  3. package/android/build.gradle +3 -3
  4. package/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt +76 -24
  5. package/android/src/main/java/com/aheaditec/freerasp/PluginThreatHandler.kt +121 -0
  6. package/android/src/main/java/com/aheaditec/freerasp/dispatchers/ExecutionStateDispatcher.kt +38 -0
  7. package/android/src/main/java/com/aheaditec/freerasp/dispatchers/ThreatDispatcher.kt +62 -0
  8. package/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt +3 -1
  9. package/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginExecutionStateListener.kt +7 -0
  10. package/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginThreatListener.kt +9 -0
  11. package/dist/esm/api/listeners/raspExecutionState.d.ts +1 -0
  12. package/dist/esm/api/listeners/raspExecutionState.js +18 -1
  13. package/dist/esm/api/listeners/raspExecutionState.js.map +1 -1
  14. package/dist/esm/api/listeners/threat.d.ts +1 -0
  15. package/dist/esm/api/listeners/threat.js +22 -2
  16. package/dist/esm/api/listeners/threat.js.map +1 -1
  17. package/dist/esm/api/methods/native.d.ts +1 -0
  18. package/dist/esm/api/methods/native.js +4 -0
  19. package/dist/esm/api/methods/native.js.map +1 -1
  20. package/dist/esm/models/threat.d.ts +1 -0
  21. package/dist/esm/models/threat.js +2 -0
  22. package/dist/esm/models/threat.js.map +1 -1
  23. package/dist/esm/types/types.d.ts +4 -0
  24. package/dist/esm/types/types.js.map +1 -1
  25. package/dist/plugin.cjs.js +49 -3
  26. package/dist/plugin.cjs.js.map +1 -1
  27. package/dist/plugin.js +49 -3
  28. package/dist/plugin.js.map +1 -1
  29. package/ios/Plugin/FreeraspPlugin.m +1 -0
  30. package/ios/Plugin/FreeraspPlugin.swift +16 -32
  31. package/ios/Plugin/dispatchers/ExecutionStateDispatcher.swift +35 -0
  32. package/ios/Plugin/dispatchers/ThreatDispatcher.swift +36 -0
  33. package/package.json +1 -1
  34. package/android/src/main/java/com/aheaditec/freerasp/ThreatHandler.kt +0 -94
@@ -6,21 +6,17 @@ import TalsecRuntime
6
6
  public class FreeraspPlugin: CAPPlugin {
7
7
 
8
8
  public static var shared: FreeraspPlugin?
9
-
10
- static var threatCache = Set<SecurityThreat>()
11
- static var executionStateCache = Set<RaspExecutionStates>()
12
9
 
13
10
  override public func load() {
14
11
  FreeraspPlugin.shared = self
15
- FreeraspPlugin.flushCache()
16
- }
17
-
18
- private static func flushCache() {
19
- FreeraspPlugin.threatCache.forEach(FreeraspPlugin.dispatchEvent)
20
- FreeraspPlugin.threatCache.removeAll()
21
-
22
- FreeraspPlugin.executionStateCache.forEach(FreeraspPlugin.dispatchRaspExecutionStateEvent)
23
- FreeraspPlugin.executionStateCache.removeAll()
12
+
13
+ ThreatDispatcher.shared.listener = { [weak self] threat in
14
+ self?.notifyListeners(EventIdentifiers.threatChannelName, data: [EventIdentifiers.threatChannelKey: threat.callbackIdentifier], retainUntilConsumed: true)
15
+ }
16
+
17
+ ExecutionStateDispatcher.shared.listener = { [weak self] event in
18
+ self?.notifyListeners(EventIdentifiers.raspExecutionStateChannelName, data: [EventIdentifiers.raspExecutionStateChannelKey: event.callbackIdentifier], retainUntilConsumed: true)
19
+ }
24
20
  }
25
21
 
26
22
  /// Runs Talsec with given configuration
@@ -49,6 +45,11 @@ public class FreeraspPlugin: CAPPlugin {
49
45
  UserDefaults.standard.set(externalId, forKey: "app.talsec.externalid")
50
46
  call.resolve(["result": true])
51
47
  }
48
+
49
+ @objc func removeExternalId(_ call: CAPPluginCall) -> Void {
50
+ UserDefaults.standard.removeObject(forKey: "app.talsec.externalid")
51
+ call.resolve(["result": true])
52
+ }
52
53
 
53
54
  @objc func blockScreenCapture(_ call: CAPPluginCall) -> Void {
54
55
  guard let enable = call.getBool("enable") else {
@@ -76,22 +77,6 @@ public class FreeraspPlugin: CAPPlugin {
76
77
  }
77
78
  }
78
79
  }
79
-
80
- static func dispatchEvent(securityThreat: SecurityThreat) {
81
- if let instance = FreeraspPlugin.shared {
82
- instance.notifyListeners(EventIdentifiers.threatChannelName, data: [EventIdentifiers.threatChannelKey: securityThreat.callbackIdentifier], retainUntilConsumed: true)
83
- } else {
84
- FreeraspPlugin.threatCache.insert(securityThreat)
85
- }
86
- }
87
-
88
- static func dispatchRaspExecutionStateEvent(event: RaspExecutionStates) -> Void {
89
- if let instance = FreeraspPlugin.shared {
90
- instance.notifyListeners(EventIdentifiers.raspExecutionStateChannelName, data: [EventIdentifiers.raspExecutionStateChannelKey: event.callbackIdentifier], retainUntilConsumed: true)
91
- } else {
92
- FreeraspPlugin.executionStateCache.insert(event)
93
- }
94
- }
95
80
 
96
81
  /**
97
82
  * Method to setup the message passing between native and Capacitor
@@ -160,11 +145,10 @@ extension SecurityThreatCenter: @retroactive SecurityThreatHandler, @retroactiv
160
145
  if (securityThreat.rawValue == "passcodeChange") {
161
146
  return
162
147
  }
163
-
164
- FreeraspPlugin.dispatchEvent(securityThreat: securityThreat)
148
+ ThreatDispatcher.shared.dispatch(threat: securityThreat)
165
149
  }
166
150
 
167
151
  public func onAllChecksFinished() {
168
- FreeraspPlugin.dispatchRaspExecutionStateEvent(event: RaspExecutionStates.allChecksFinished)
152
+ ExecutionStateDispatcher.shared.dispatch(event: RaspExecutionStates.allChecksFinished)
169
153
  }
170
- }
154
+ }
@@ -0,0 +1,35 @@
1
+ import Foundation
2
+
3
+ class ExecutionStateDispatcher {
4
+ static let shared = ExecutionStateDispatcher()
5
+ private var cache: Set<RaspExecutionStates> = []
6
+ private let lock = NSLock()
7
+
8
+ var listener: ((RaspExecutionStates) -> Void)? {
9
+ didSet {
10
+ if listener != nil {
11
+ flushCache()
12
+ }
13
+ }
14
+ }
15
+
16
+ func dispatch(event: RaspExecutionStates) {
17
+ lock.lock()
18
+ defer { lock.unlock() }
19
+
20
+ if let listener = listener {
21
+ listener(event)
22
+ } else {
23
+ cache.insert(event)
24
+ }
25
+ }
26
+
27
+ private func flushCache() {
28
+ lock.lock()
29
+ let events = cache
30
+ cache.removeAll()
31
+ lock.unlock()
32
+
33
+ events.forEach { listener?($0) }
34
+ }
35
+ }
@@ -0,0 +1,36 @@
1
+ import Foundation
2
+ import TalsecRuntime
3
+
4
+ class ThreatDispatcher {
5
+ static let shared = ThreatDispatcher()
6
+ private var threatCache: Set<SecurityThreat> = []
7
+ private let lock = NSLock()
8
+
9
+ var listener: ((SecurityThreat) -> Void)? {
10
+ didSet {
11
+ if listener != nil {
12
+ flushCache()
13
+ }
14
+ }
15
+ }
16
+
17
+ func dispatch(threat: SecurityThreat) {
18
+ lock.lock()
19
+ defer { lock.unlock() }
20
+
21
+ if let listener = listener {
22
+ listener(threat)
23
+ } else {
24
+ threatCache.insert(threat)
25
+ }
26
+ }
27
+
28
+ private func flushCache() {
29
+ lock.lock()
30
+ let threats = threatCache
31
+ threatCache.removeAll()
32
+ lock.unlock()
33
+
34
+ threats.forEach { listener?($0) }
35
+ }
36
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "capacitor-freerasp",
3
- "version": "2.3.0",
3
+ "version": "2.4.0",
4
4
  "description": "Capacitor plugin for improving app security and threat monitoring on Android and iOS mobile devices",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",
@@ -1,94 +0,0 @@
1
- package com.aheaditec.freerasp
2
-
3
- import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
4
- import com.aheaditec.talsec_security.security.api.ThreatListener
5
- import com.aheaditec.freerasp.events.RaspExecutionStateEvent
6
- import com.aheaditec.freerasp.events.ThreatEvent
7
-
8
- internal class TalsecThreatHandler(private val instance: FreeraspPlugin) :
9
- ThreatListener.ThreatDetected, ThreatListener.DeviceState, ThreatListener.RaspExecutionState() {
10
-
11
- override fun onRootDetected() {
12
- instance.notifyListeners(ThreatEvent.PrivilegedAccess)
13
- }
14
-
15
- override fun onDebuggerDetected() {
16
- instance.notifyListeners(ThreatEvent.Debug)
17
- }
18
-
19
- override fun onEmulatorDetected() {
20
- instance.notifyListeners(ThreatEvent.Simulator)
21
- }
22
-
23
- override fun onTamperDetected() {
24
- instance.notifyListeners(ThreatEvent.AppIntegrity)
25
- }
26
-
27
- override fun onUntrustedInstallationSourceDetected() {
28
- instance.notifyListeners(ThreatEvent.UnofficialStore)
29
- }
30
-
31
- override fun onHookDetected() {
32
- instance.notifyListeners(ThreatEvent.Hooks)
33
- }
34
-
35
- override fun onDeviceBindingDetected() {
36
- instance.notifyListeners(ThreatEvent.DeviceBinding)
37
- }
38
-
39
- override fun onObfuscationIssuesDetected() {
40
- instance.notifyListeners(ThreatEvent.ObfuscationIssues)
41
- }
42
-
43
- override fun onMalwareDetected(suspiciousAppInfos: MutableList<SuspiciousAppInfo>) {
44
- instance.notifyMalware(suspiciousAppInfos ?: mutableListOf())
45
- }
46
-
47
- override fun onUnlockedDeviceDetected() {
48
- instance.notifyListeners(ThreatEvent.Passcode)
49
- }
50
-
51
- override fun onHardwareBackedKeystoreNotAvailableDetected() {
52
- instance.notifyListeners(ThreatEvent.SecureHardwareNotAvailable)
53
- }
54
-
55
- override fun onDeveloperModeDetected() {
56
- instance.notifyListeners(ThreatEvent.DevMode)
57
- }
58
-
59
- override fun onADBEnabledDetected() {
60
- instance.notifyListeners(ThreatEvent.ADBEnabled)
61
- }
62
-
63
- override fun onSystemVPNDetected() {
64
- instance.notifyListeners(ThreatEvent.SystemVPN)
65
- }
66
-
67
- override fun onScreenshotDetected() {
68
- instance.notifyListeners(ThreatEvent.Screenshot)
69
- }
70
-
71
- override fun onScreenRecordingDetected() {
72
- instance.notifyListeners(ThreatEvent.ScreenRecording)
73
- }
74
-
75
- override fun onMultiInstanceDetected() {
76
- instance.notifyListeners(ThreatEvent.MultiInstance)
77
- }
78
-
79
- override fun onUnsecureWifiDetected() {
80
- instance.notifyListeners(ThreatEvent.UnsecureWifi)
81
- }
82
-
83
- override fun onTimeSpoofingDetected() {
84
- instance.notifyListeners(ThreatEvent.TimeSpoofing)
85
- }
86
-
87
- override fun onLocationSpoofingDetected() {
88
- instance.notifyListeners(ThreatEvent.LocationSpoofing)
89
- }
90
-
91
- override fun onAllChecksFinished() {
92
- instance.notifyListeners(RaspExecutionStateEvent.AllChecksFinished)
93
- }
94
- }