Skip to content

Commit 80a9357

Browse files
committed
feat(Android): add SDK v11.1.0
1 parent d200b4d commit 80a9357

5 files changed

Lines changed: 66 additions & 43 deletions

File tree

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ dependencies {
8787
//noinspection GradleDynamicVersion
8888
implementation "com.facebook.react:react-native:$react_native_version"
8989
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
90-
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:9.6.0"
90+
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:11.1.0"
9191
}
9292

9393
if (isNewArchitectureEnabled()) {

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

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.facebook.react.bridge.ReactApplicationContext
99
import com.facebook.react.bridge.ReactContextBaseJavaModule
1010
import com.facebook.react.bridge.ReactMethod
1111
import com.facebook.react.bridge.ReadableMap
12+
import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
1213
import com.facebook.react.bridge.WritableArray
1314
import com.facebook.react.modules.core.DeviceEventManagerModule
1415

@@ -32,17 +33,18 @@ class FreeraspReactNativeModule(val reactContext: ReactApplicationContext) :
3233
) {
3334

3435
try {
35-
val config = parseTalsecConfig(options)
36+
val config = buildTalsecConfig(options)
3637
FreeraspThreatHandler.listener = ThreatListener
3738
listener.registerListener(reactContext)
38-
Talsec.start(reactContext, config)
39+
runOnUiThread { // Your code to run on a different thread or UI thread
40+
Talsec.start(reactContext, config)
41+
}
42+
3943
promise.resolve("freeRASP started")
4044

41-
} catch (e: Exception) {
42-
val params = Arguments.createMap().apply {
43-
putString("message", e.message)
44-
}
45-
promise.reject("initializationError", params)
45+
}
46+
catch (e: Exception) {
47+
promise.reject("TalsecInitializationError", e.message, e)
4648
}
4749
}
4850

@@ -85,42 +87,17 @@ class FreeraspReactNativeModule(val reactContext: ReactApplicationContext) :
8587
// Remove upstream listeners, stop unnecessary background tasks
8688
}
8789

88-
private fun parseTalsecConfig(config: ReadableMap): TalsecConfig {
89-
val androidConfig = config.getMap("androidConfig")!!
90-
val packageName = androidConfig.getString("packageName")!!
91-
val certificateHashes = mutableListOf<String>()
92-
val hashes = androidConfig.getArray("certificateHashes")!!
93-
for (i in 0 until hashes.size()) {
94-
// in RN versions < 0.63, getString is nullable
95-
@Suppress("UNNECESSARY_SAFE_CALL")
96-
hashes.getString(i)?.let {
97-
certificateHashes.add(it)
98-
}
99-
}
100-
val watcherMail = config.getString("watcherMail")
101-
val alternativeStores = mutableListOf<String>()
102-
if (androidConfig.hasKey("supportedAlternativeStores")) {
103-
val stores = androidConfig.getArray("supportedAlternativeStores")!!
104-
for (i in 0 until stores.size()) {
105-
// in RN versions < 0.63, getString is nullable
106-
@Suppress("UNNECESSARY_SAFE_CALL")
107-
stores.getString(i)?.let {
108-
alternativeStores.add(it)
109-
}
110-
}
111-
}
112-
var isProd = true
113-
if (config.hasKey("isProd")) {
114-
isProd = config.getBoolean("isProd")
115-
}
90+
private fun buildTalsecConfig(config: ReadableMap): TalsecConfig {
91+
val androidConfig = config.getMapThrowing("androidConfig")
92+
val packageName = androidConfig.getStringThrowing("packageName")
93+
val certificateHashes = androidConfig.getArraySafe("certificateHashes")
94+
95+
val talsecBuilder = TalsecConfig.Builder(packageName, certificateHashes)
96+
.watcherMail(config.getString("watcherMail"))
97+
.supportedAlternativeStores(androidConfig.getArraySafe("supportedAlternativeStores"))
98+
.prod(config.getBooleanSafe("isProd"))
11699

117-
return TalsecConfig(
118-
packageName,
119-
certificateHashes.toTypedArray(),
120-
watcherMail,
121-
alternativeStores.toTypedArray(),
122-
isProd
123-
)
100+
return talsecBuilder.build()
124101
}
125102

126103
companion object {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.freeraspreactnative
22

3+
import com.aheaditec.talsec_security.security.api.SuspiciousAppInfo
34
import com.aheaditec.talsec_security.security.api.ThreatListener
45

56
internal object FreeraspThreatHandler : ThreatListener.ThreatDetected, ThreatListener.DeviceState {
@@ -38,6 +39,8 @@ internal object FreeraspThreatHandler : ThreatListener.ThreatDetected, ThreatLis
3839
listener?.threatDetected(Threat.ObfuscationIssues)
3940
}
4041

42+
override fun onMalwareDetected(p0: MutableList<SuspiciousAppInfo>?) {}
43+
4144
override fun onUnlockedDeviceDetected() {
4245
listener?.threatDetected(Threat.Passcode)
4346
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.freeraspreactnative
2+
3+
import com.facebook.react.bridge.ReadableArray
4+
import com.facebook.react.bridge.ReadableMap
5+
import com.freeraspreactnative.exceptions.TalsecException
6+
7+
internal fun ReadableMap.getMapThrowing(key: String): ReadableMap {
8+
return this.getMap(key) ?: throw TalsecException("Key missing in configuration: $key")
9+
}
10+
11+
internal fun ReadableMap.getStringThrowing(key: String): String {
12+
return this.getString(key) ?: throw TalsecException("Key missing in configuration: $key")
13+
}
14+
15+
internal fun ReadableMap.getBooleanSafe(key: String, defaultValue: Boolean = true): Boolean {
16+
if (this.hasKey(key)) {
17+
return this.getBoolean(key)
18+
}
19+
return defaultValue
20+
}
21+
22+
internal fun ReadableArray.toArray(): Array<String> {
23+
val output = mutableListOf<String>()
24+
for (i in 0 until this.size()) {
25+
// in RN versions < 0.63, getString is nullable
26+
@Suppress("UNNECESSARY_SAFE_CALL")
27+
this.getString(i)?.let {
28+
output.add(it)
29+
}
30+
}
31+
return output.toTypedArray()
32+
}
33+
34+
internal fun ReadableMap.getArraySafe(key: String): Array<String> {
35+
if (this.hasKey(key)) {
36+
val inputArray = this.getArray(key)!!
37+
return inputArray.toArray()
38+
}
39+
return arrayOf()
40+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.freeraspreactnative.exceptions
2+
3+
class TalsecException(message: String, val code: String? = null, val ex: Exception? = null) : Exception(message)

0 commit comments

Comments
 (0)