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.
- package/CHANGELOG.md +48 -0
- package/CapacitorFreerasp.podspec +5 -1
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/aheaditec/freerasp/FreeraspPlugin.kt +76 -24
- package/android/src/main/java/com/aheaditec/freerasp/PluginThreatHandler.kt +121 -0
- package/android/src/main/java/com/aheaditec/freerasp/dispatchers/ExecutionStateDispatcher.kt +38 -0
- package/android/src/main/java/com/aheaditec/freerasp/dispatchers/ThreatDispatcher.kt +62 -0
- package/android/src/main/java/com/aheaditec/freerasp/events/ThreatEvent.kt +3 -1
- package/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginExecutionStateListener.kt +7 -0
- package/android/src/main/java/com/aheaditec/freerasp/interfaces/PluginThreatListener.kt +9 -0
- package/dist/esm/api/listeners/raspExecutionState.d.ts +1 -0
- package/dist/esm/api/listeners/raspExecutionState.js +18 -1
- package/dist/esm/api/listeners/raspExecutionState.js.map +1 -1
- package/dist/esm/api/listeners/threat.d.ts +1 -0
- package/dist/esm/api/listeners/threat.js +22 -2
- package/dist/esm/api/listeners/threat.js.map +1 -1
- package/dist/esm/api/methods/native.d.ts +1 -0
- package/dist/esm/api/methods/native.js +4 -0
- package/dist/esm/api/methods/native.js.map +1 -1
- package/dist/esm/models/threat.d.ts +1 -0
- package/dist/esm/models/threat.js +2 -0
- package/dist/esm/models/threat.js.map +1 -1
- package/dist/esm/types/types.d.ts +4 -0
- package/dist/esm/types/types.js.map +1 -1
- package/dist/plugin.cjs.js +49 -3
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +49 -3
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/FreeraspPlugin.m +1 -0
- package/ios/Plugin/FreeraspPlugin.swift +16 -32
- package/ios/Plugin/dispatchers/ExecutionStateDispatcher.swift +35 -0
- package/ios/Plugin/dispatchers/ThreatDispatcher.swift +36 -0
- package/package.json +1 -1
- 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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
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,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
|
-
}
|