Skip to content

Commit 3d7c036

Browse files
committed
feat: make dispatchers singletons
1 parent 0d87872 commit 3d7c036

File tree

4 files changed

+48
-44
lines changed

4 files changed

+48
-44
lines changed

android/src/main/java/com/freeraspreactnative/FreeraspReactNativeModule.kt

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
2020
import com.facebook.react.bridge.WritableArray
2121
import com.facebook.react.bridge.WritableMap
2222
import com.facebook.react.modules.core.DeviceEventManagerModule
23+
import com.freeraspreactnative.dispatchers.ExecutionStateDispatcher
24+
import com.freeraspreactnative.dispatchers.ThreatDispatcher
2325
import com.freeraspreactnative.events.RaspExecutionStateEvent
2426
import com.freeraspreactnative.events.ThreatEvent
2527
import com.freeraspreactnative.interfaces.PluginExecutionStateListener
@@ -37,22 +39,22 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
3739

3840
private val lifecycleListener = object : LifecycleEventListener {
3941
override fun onHostResume() {
40-
PluginThreatHandler.threatDispatcher.onResume()
41-
PluginThreatHandler.executionStateDispatcher.onResume()
42+
ThreatDispatcher.onResume()
43+
ExecutionStateDispatcher.onResume()
4244
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
4345
reactContext.currentActivity?.let { ScreenProtector.register(it) }
4446
}
4547
}
4648

4749
override fun onHostPause() {
48-
PluginThreatHandler.threatDispatcher.onPause()
49-
PluginThreatHandler.executionStateDispatcher.onPause()
50+
ThreatDispatcher.onPause()
51+
ExecutionStateDispatcher.onPause()
5052
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
5153
reactContext.currentActivity?.let { ScreenProtector.unregister(it) }
5254
}
5355
if (reactContext.currentActivity?.isFinishing == true) {
54-
PluginThreatHandler.threatDispatcher.unregisterListener()
55-
PluginThreatHandler.executionStateDispatcher.unregisterListener()
56+
ThreatDispatcher.unregisterListener()
57+
ExecutionStateDispatcher.unregisterListener()
5658
PluginThreatHandler.unregisterSDKListener(reactContext)
5759
}
5860
}
@@ -66,10 +68,11 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
6668
return NAME
6769
}
6870

69-
init {
71+
override fun initialize() {
7072
reactContext.addLifecycleEventListener(lifecycleListener)
7173
initializeEventKeys()
72-
PluginThreatHandler.initializeDispatchers(PluginListener(reactContext))
74+
PluginThreatHandler.initializePluginListener(PluginListener(reactContext))
75+
super.initialize()
7376
}
7477

7578
@ReactMethod
@@ -162,10 +165,10 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
162165
@ReactMethod
163166
fun addListener(eventName: String) {
164167
if (eventName == ThreatEvent.CHANNEL_NAME) {
165-
PluginThreatHandler.threatDispatcher.registerListener()
168+
ThreatDispatcher.registerListener(PluginListener(reactContext))
166169
}
167170
if (eventName == RaspExecutionStateEvent.CHANNEL_NAME) {
168-
PluginThreatHandler.executionStateDispatcher.registerListener()
171+
ExecutionStateDispatcher.registerListener(PluginListener(reactContext))
169172
}
170173
}
171174

@@ -178,10 +181,10 @@ class FreeraspReactNativeModule(private val reactContext: ReactApplicationContex
178181
@ReactMethod
179182
fun removeListenerForEvent(eventName: String, promise: Promise) {
180183
if (eventName == ThreatEvent.CHANNEL_NAME) {
181-
PluginThreatHandler.threatDispatcher.unregisterListener()
184+
ThreatDispatcher.unregisterListener()
182185
}
183186
if (eventName == RaspExecutionStateEvent.CHANNEL_NAME) {
184-
PluginThreatHandler.executionStateDispatcher.unregisterListener()
187+
ExecutionStateDispatcher.unregisterListener()
185188
}
186189
promise.resolve("Listener unregistered")
187190
}

android/src/main/java/com/freeraspreactnative/PluginThreatHandler.kt

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,107 +10,104 @@ import com.freeraspreactnative.events.ThreatEvent
1010

1111
internal object PluginThreatHandler {
1212

13-
internal lateinit var threatDispatcher: ThreatDispatcher
14-
internal lateinit var executionStateDispatcher: ExecutionStateDispatcher
15-
16-
fun initializeDispatchers(listener: FreeraspReactNativeModule.PluginListener) {
17-
threatDispatcher = ThreatDispatcher(listener)
18-
executionStateDispatcher = ExecutionStateDispatcher(listener)
13+
fun initializePluginListener(listener: FreeraspReactNativeModule.PluginListener) {
14+
ThreatDispatcher.listener = listener
15+
ExecutionStateDispatcher.listener = listener
1916
}
2017

2118
private val threatDetected = object : ThreatListener.ThreatDetected() {
2219

2320
override fun onRootDetected() {
24-
threatDispatcher.dispatchThreat(ThreatEvent.PrivilegedAccess)
21+
ThreatDispatcher.dispatchThreat(ThreatEvent.PrivilegedAccess)
2522
}
2623

2724
override fun onDebuggerDetected() {
28-
threatDispatcher.dispatchThreat(ThreatEvent.Debug)
25+
ThreatDispatcher.dispatchThreat(ThreatEvent.Debug)
2926
}
3027

3128
override fun onEmulatorDetected() {
32-
threatDispatcher.dispatchThreat(ThreatEvent.Simulator)
29+
ThreatDispatcher.dispatchThreat(ThreatEvent.Simulator)
3330
}
3431

3532
override fun onTamperDetected() {
36-
threatDispatcher.dispatchThreat(ThreatEvent.AppIntegrity)
33+
ThreatDispatcher.dispatchThreat(ThreatEvent.AppIntegrity)
3734
}
3835

3936
override fun onUntrustedInstallationSourceDetected() {
40-
threatDispatcher.dispatchThreat(ThreatEvent.UnofficialStore)
37+
ThreatDispatcher.dispatchThreat(ThreatEvent.UnofficialStore)
4138
}
4239

4340
override fun onHookDetected() {
44-
threatDispatcher.dispatchThreat(ThreatEvent.Hooks)
41+
ThreatDispatcher.dispatchThreat(ThreatEvent.Hooks)
4542
}
4643

4744
override fun onDeviceBindingDetected() {
48-
threatDispatcher.dispatchThreat(ThreatEvent.DeviceBinding)
45+
ThreatDispatcher.dispatchThreat(ThreatEvent.DeviceBinding)
4946
}
5047

5148
override fun onObfuscationIssuesDetected() {
52-
threatDispatcher.dispatchThreat(ThreatEvent.ObfuscationIssues)
49+
ThreatDispatcher.dispatchThreat(ThreatEvent.ObfuscationIssues)
5350
}
5451

5552
override fun onMalwareDetected(suspiciousAppInfos: MutableList<SuspiciousAppInfo>) {
56-
threatDispatcher.dispatchMalware(suspiciousAppInfos ?: mutableListOf())
53+
ThreatDispatcher.dispatchMalware(suspiciousAppInfos ?: mutableListOf())
5754
}
5855

5956
override fun onScreenshotDetected() {
60-
threatDispatcher.dispatchThreat(ThreatEvent.Screenshot)
57+
ThreatDispatcher.dispatchThreat(ThreatEvent.Screenshot)
6158
}
6259

6360
override fun onScreenRecordingDetected() {
64-
threatDispatcher.dispatchThreat(ThreatEvent.ScreenRecording)
61+
ThreatDispatcher.dispatchThreat(ThreatEvent.ScreenRecording)
6562
}
6663

6764
override fun onMultiInstanceDetected() {
68-
threatDispatcher.dispatchThreat(ThreatEvent.MultiInstance)
65+
ThreatDispatcher.dispatchThreat(ThreatEvent.MultiInstance)
6966
}
7067

7168
override fun onUnsecureWifiDetected() {
72-
threatDispatcher.dispatchThreat(ThreatEvent.UnsecureWifi)
69+
ThreatDispatcher.dispatchThreat(ThreatEvent.UnsecureWifi)
7370
}
7471

7572
override fun onTimeSpoofingDetected() {
76-
threatDispatcher.dispatchThreat(ThreatEvent.TimeSpoofing)
73+
ThreatDispatcher.dispatchThreat(ThreatEvent.TimeSpoofing)
7774
}
7875

7976
override fun onLocationSpoofingDetected() {
80-
threatDispatcher.dispatchThreat(ThreatEvent.LocationSpoofing)
77+
ThreatDispatcher.dispatchThreat(ThreatEvent.LocationSpoofing)
8178
}
8279

8380
override fun onAutomationDetected() {
84-
threatDispatcher.dispatchThreat(ThreatEvent.Automation)
81+
ThreatDispatcher.dispatchThreat(ThreatEvent.Automation)
8582
}
8683
}
8784

8885
private val deviceState = object : ThreatListener.DeviceState() {
8986

9087
override fun onUnlockedDeviceDetected() {
91-
threatDispatcher.dispatchThreat(ThreatEvent.Passcode)
88+
ThreatDispatcher.dispatchThreat(ThreatEvent.Passcode)
9289
}
9390

9491
override fun onHardwareBackedKeystoreNotAvailableDetected() {
95-
threatDispatcher.dispatchThreat(ThreatEvent.SecureHardwareNotAvailable)
92+
ThreatDispatcher.dispatchThreat(ThreatEvent.SecureHardwareNotAvailable)
9693
}
9794

9895
override fun onDeveloperModeDetected() {
99-
threatDispatcher.dispatchThreat(ThreatEvent.DevMode)
96+
ThreatDispatcher.dispatchThreat(ThreatEvent.DevMode)
10097
}
10198

10299
override fun onADBEnabledDetected() {
103-
threatDispatcher.dispatchThreat(ThreatEvent.ADBEnabled)
100+
ThreatDispatcher.dispatchThreat(ThreatEvent.ADBEnabled)
104101
}
105102

106103
override fun onSystemVPNDetected() {
107-
threatDispatcher.dispatchThreat(ThreatEvent.SystemVPN)
104+
ThreatDispatcher.dispatchThreat(ThreatEvent.SystemVPN)
108105
}
109106
}
110107

111108
private val raspExecutionState = object : ThreatListener.RaspExecutionState() {
112109
override fun onAllChecksFinished() {
113-
executionStateDispatcher.dispatch(RaspExecutionStateEvent.AllChecksFinished)
110+
ExecutionStateDispatcher.dispatch(RaspExecutionStateEvent.AllChecksFinished)
114111
}
115112
}
116113

android/src/main/java/com/freeraspreactnative/dispatchers/ExecutionStateDispatcher.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@ package com.freeraspreactnative.dispatchers
33
import com.freeraspreactnative.events.RaspExecutionStateEvent
44
import com.freeraspreactnative.interfaces.PluginExecutionStateListener
55

6-
internal class ExecutionStateDispatcher(private val listener: PluginExecutionStateListener) {
6+
internal object ExecutionStateDispatcher {
7+
lateinit var listener: PluginExecutionStateListener
78
private val cache = mutableSetOf<RaspExecutionStateEvent>()
89

910
private var isAppInForeground = false
1011
private var isListenerRegistered = false
1112

12-
fun registerListener() {
13+
fun registerListener(newListener: PluginExecutionStateListener) {
14+
listener = newListener
1315
isListenerRegistered = true
1416
isAppInForeground = true
1517
flushCache()

android/src/main/java/com/freeraspreactnative/dispatchers/ThreatDispatcher.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,16 @@ import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
44
import com.freeraspreactnative.events.ThreatEvent
55
import com.freeraspreactnative.interfaces.PluginThreatListener
66

7-
internal class ThreatDispatcher(private val listener: PluginThreatListener) {
7+
internal object ThreatDispatcher {
8+
lateinit var listener: PluginThreatListener
89
private val threatCache = mutableSetOf<ThreatEvent>()
910
private val malwareCache = mutableSetOf<SuspiciousAppInfo>()
1011

1112
private var isAppInForeground = false
1213
private var isListenerRegistered = false
1314

14-
fun registerListener() {
15+
fun registerListener(newListener: PluginThreatListener) {
16+
listener = newListener
1517
isListenerRegistered = true
1618
isAppInForeground = true
1719
flushCache()

0 commit comments

Comments
 (0)