react-native-mfa-trustbuilder 0.1.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/LICENSE +20 -0
- package/README.md +202 -0
- package/Trustbuilder.podspec +29 -0
- package/android/build.gradle +74 -0
- package/android/libs/iwlib-mac-0.2.17.jar +0 -0
- package/android/proguard-rules.pro +2 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/trustbuilder/SimpleWebServiceCall.kt +40 -0
- package/android/src/main/java/com/trustbuilder/TrustbuilderModule.kt +590 -0
- package/android/src/main/java/com/trustbuilder/TrustbuilderPackage.kt +32 -0
- package/ios/RNTrustbuilder.h +5 -0
- package/ios/RNTrustbuilder.mm +433 -0
- package/ios/iw.h +785 -0
- package/ios/libs/libmaccess-0.2.19-ios-arm64_armv7.a +0 -0
- package/ios/libs/libmaccess-0.2.19-ios-arm64_i386_x86_64-simulator.a +0 -0
- package/lib/module/NativeRNTrustbuilder.js +5 -0
- package/lib/module/NativeRNTrustbuilder.js.map +1 -0
- package/lib/module/errors.js +64 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/index.js +309 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeRNTrustbuilder.d.ts +89 -0
- package/lib/typescript/src/NativeRNTrustbuilder.d.ts.map +1 -0
- package/lib/typescript/src/errors.d.ts +29 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +68 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +45 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +184 -0
- package/src/NativeRNTrustbuilder.ts +117 -0
- package/src/errors.ts +72 -0
- package/src/index.ts +461 -0
- package/src/types.ts +54 -0
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
package com.trustbuilder
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.provider.Settings
|
|
5
|
+
import android.util.Log
|
|
6
|
+
import androidx.security.crypto.EncryptedSharedPreferences
|
|
7
|
+
import androidx.security.crypto.MasterKey
|
|
8
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
9
|
+
import com.inwebo.iwlib.IW
|
|
10
|
+
import org.json.JSONObject
|
|
11
|
+
|
|
12
|
+
class TrustbuilderModule(reactContext: ReactApplicationContext) :
|
|
13
|
+
NativeRNTrustbuilderSpec(reactContext) {
|
|
14
|
+
|
|
15
|
+
private val context: ReactApplicationContext = reactContext
|
|
16
|
+
private var iw: IW? = null
|
|
17
|
+
private var isInitialized = false
|
|
18
|
+
|
|
19
|
+
companion object {
|
|
20
|
+
const val NAME = "RNTrustbuilder"
|
|
21
|
+
private const val STORAGE_KEY = "trustbuilder_storage_data"
|
|
22
|
+
private const val PREFS_NAME = "trustbuilder_encrypted_prefs"
|
|
23
|
+
private const val TAG = "TrustbuilderModule"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private fun getAndroidId(): String {
|
|
27
|
+
return Settings.Secure.getString(
|
|
28
|
+
context.contentResolver,
|
|
29
|
+
Settings.Secure.ANDROID_ID
|
|
30
|
+
) ?: ""
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private fun getEncryptedPrefs(): EncryptedSharedPreferences {
|
|
34
|
+
val masterKey = MasterKey.Builder(context)
|
|
35
|
+
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
|
|
36
|
+
.build()
|
|
37
|
+
|
|
38
|
+
return EncryptedSharedPreferences.create(
|
|
39
|
+
context,
|
|
40
|
+
PREFS_NAME,
|
|
41
|
+
masterKey,
|
|
42
|
+
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
|
43
|
+
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
|
44
|
+
) as EncryptedSharedPreferences
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
private fun requireIW(): IW {
|
|
48
|
+
val instance = iw
|
|
49
|
+
if (instance == null) {
|
|
50
|
+
throw IllegalStateException("Trustbuilder not initialized. Call initialize() first.")
|
|
51
|
+
}
|
|
52
|
+
return instance
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
private fun initIW(config: JSONObject) {
|
|
56
|
+
if (isInitialized) return
|
|
57
|
+
|
|
58
|
+
val macId = config.getString("macId")
|
|
59
|
+
val server = config.getString("server")
|
|
60
|
+
val hostVersion = config.getString("hostVersion")
|
|
61
|
+
val timeout = config.getLong("timeout")
|
|
62
|
+
val lang = config.getString("lang")
|
|
63
|
+
|
|
64
|
+
val sn = getAndroidId()
|
|
65
|
+
val appData = "_"
|
|
66
|
+
|
|
67
|
+
Log.d(TAG, "Initializing IW: SN=$sn, server=$server, macId=$macId, hostVersion=$hostVersion")
|
|
68
|
+
|
|
69
|
+
try {
|
|
70
|
+
iw = IW()
|
|
71
|
+
|
|
72
|
+
Log.d(TAG, "Calling Init(sn=$sn, appData=$appData)")
|
|
73
|
+
iw!!.Init(sn, appData)
|
|
74
|
+
|
|
75
|
+
Log.d(TAG, "Setting WsServer: $server")
|
|
76
|
+
iw!!.WsServerSet(server)
|
|
77
|
+
|
|
78
|
+
Log.d(TAG, "Setting HostVersion: $hostVersion")
|
|
79
|
+
iw!!.HostVersionSet(hostVersion)
|
|
80
|
+
|
|
81
|
+
Log.d(TAG, "Setting WsTimeout: $timeout")
|
|
82
|
+
iw!!.WsTimeoutSet(timeout)
|
|
83
|
+
|
|
84
|
+
Log.d(TAG, "Setting Maccess: $macId")
|
|
85
|
+
iw!!.MaccessSet(macId)
|
|
86
|
+
|
|
87
|
+
Log.d(TAG, "Setting Lang: $lang")
|
|
88
|
+
iw!!.LangSet(lang)
|
|
89
|
+
|
|
90
|
+
val storedData = getEncryptedPrefs().getString(STORAGE_KEY, "") ?: ""
|
|
91
|
+
Log.d(TAG, "Setting storage data (${storedData.length} chars)")
|
|
92
|
+
iw!!.StorageDataSet(storedData)
|
|
93
|
+
|
|
94
|
+
Log.d(TAG, "Init completed, log=${iw!!.log}")
|
|
95
|
+
|
|
96
|
+
isInitialized = true
|
|
97
|
+
Log.d(TAG, "IW initialized successfully")
|
|
98
|
+
} catch (e: Exception) {
|
|
99
|
+
Log.e(TAG, "Failed to initialize IW: ${e.message}", e)
|
|
100
|
+
iw = null
|
|
101
|
+
isInitialized = false
|
|
102
|
+
throw e
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private fun saveStorage() {
|
|
107
|
+
val instance = iw ?: return
|
|
108
|
+
try {
|
|
109
|
+
if (instance.StorageDataChanged() != 0L) {
|
|
110
|
+
val data = instance.StorageDataGet()
|
|
111
|
+
if (data != null) {
|
|
112
|
+
getEncryptedPrefs().edit().putString(STORAGE_KEY, data).apply()
|
|
113
|
+
Log.d(TAG, "Storage saved (${data.length} chars)")
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
} catch (e: Exception) {
|
|
117
|
+
Log.e(TAG, "Failed to save storage: ${e.message}", e)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
override fun initialize(config: String): String {
|
|
122
|
+
try {
|
|
123
|
+
val configJson = JSONObject(config)
|
|
124
|
+
initIW(configJson)
|
|
125
|
+
|
|
126
|
+
val instance = requireIW()
|
|
127
|
+
val result = JSONObject()
|
|
128
|
+
|
|
129
|
+
val activated = try {
|
|
130
|
+
instance.IsActivated() == 1L
|
|
131
|
+
} catch (e: NullPointerException) {
|
|
132
|
+
Log.w(TAG, "IsActivated failed (data not initialized): ${e.message}")
|
|
133
|
+
false
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
val blocked = try {
|
|
137
|
+
instance.IsBlocked() == 1L
|
|
138
|
+
} catch (e: NullPointerException) {
|
|
139
|
+
Log.w(TAG, "IsBlocked failed (data not initialized): ${e.message}")
|
|
140
|
+
false
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
result.put("isActivated", activated)
|
|
144
|
+
result.put("isBlocked", blocked)
|
|
145
|
+
return result.toString()
|
|
146
|
+
} catch (e: Exception) {
|
|
147
|
+
Log.e(TAG, "Init error: ${e.message}", e)
|
|
148
|
+
val result = JSONObject()
|
|
149
|
+
result.put("isActivated", false)
|
|
150
|
+
result.put("isBlocked", false)
|
|
151
|
+
result.put("error", e.message ?: "Unknown error")
|
|
152
|
+
return result.toString()
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
override fun setStorageData(data: String): Boolean {
|
|
157
|
+
getEncryptedPrefs().edit().putString(STORAGE_KEY, data).apply()
|
|
158
|
+
return try {
|
|
159
|
+
iw?.StorageDataSet(data) == 0L
|
|
160
|
+
} catch (e: Exception) {
|
|
161
|
+
Log.e(TAG, "setStorageData error: ${e.message}", e)
|
|
162
|
+
false
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
override fun getStorageData(): String {
|
|
167
|
+
return getEncryptedPrefs().getString(STORAGE_KEY, "") ?: ""
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
override fun storageDataChanged(): Boolean {
|
|
171
|
+
return try {
|
|
172
|
+
iw?.StorageDataChanged() != 0L
|
|
173
|
+
} catch (e: Exception) {
|
|
174
|
+
false
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
override fun isActivated(): Boolean {
|
|
179
|
+
return try {
|
|
180
|
+
iw?.IsActivated() == 1L
|
|
181
|
+
} catch (e: Exception) {
|
|
182
|
+
false
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
override fun isBlocked(): Boolean {
|
|
187
|
+
return try {
|
|
188
|
+
iw?.IsBlocked() == 1L
|
|
189
|
+
} catch (e: Exception) {
|
|
190
|
+
false
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
override fun mustUpgrade(): Boolean {
|
|
195
|
+
return try {
|
|
196
|
+
iw?.MustUpgrade() == 1L
|
|
197
|
+
} catch (e: Exception) {
|
|
198
|
+
false
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
override fun activationStart(code: String): String {
|
|
203
|
+
return try {
|
|
204
|
+
requireIW().ActivationStart(code).toString()
|
|
205
|
+
} catch (e: Exception) {
|
|
206
|
+
Log.e(TAG, "activationStart error: ${e.message}", e)
|
|
207
|
+
"-1"
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
override fun activationFinalize(code: String, pin: String, name: String): String {
|
|
212
|
+
return try {
|
|
213
|
+
val result = requireIW().ActivationFinalize(code, pin, name)
|
|
214
|
+
saveStorage()
|
|
215
|
+
result.toString()
|
|
216
|
+
} catch (e: Exception) {
|
|
217
|
+
Log.e(TAG, "activationFinalize error: ${e.message}", e)
|
|
218
|
+
"-1"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
override fun resetStart(code: String): String {
|
|
223
|
+
return try {
|
|
224
|
+
requireIW().ResetStart(code).toString()
|
|
225
|
+
} catch (e: Exception) {
|
|
226
|
+
Log.e(TAG, "resetStart error: ${e.message}", e)
|
|
227
|
+
"-1"
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
override fun resetFinalize(code: String, pin: String): String {
|
|
232
|
+
return try {
|
|
233
|
+
val result = requireIW().ResetFinalize(code, pin)
|
|
234
|
+
saveStorage()
|
|
235
|
+
result.toString()
|
|
236
|
+
} catch (e: Exception) {
|
|
237
|
+
Log.e(TAG, "resetFinalize error: ${e.message}", e)
|
|
238
|
+
"-1"
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
override fun synchronizeStart(): String {
|
|
243
|
+
return try {
|
|
244
|
+
requireIW().SynchronizeStart().toString()
|
|
245
|
+
} catch (e: Exception) {
|
|
246
|
+
Log.e(TAG, "synchronizeStart error: ${e.message}", e)
|
|
247
|
+
"-1"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
override fun synchronizeFinalize(pin: String): String {
|
|
252
|
+
return try {
|
|
253
|
+
val result = requireIW().SynchronizeFinalize(pin)
|
|
254
|
+
saveStorage()
|
|
255
|
+
result.toString()
|
|
256
|
+
} catch (e: Exception) {
|
|
257
|
+
Log.e(TAG, "synchronizeFinalize error: ${e.message}", e)
|
|
258
|
+
"-1"
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
override fun pwdUpdateStart(): String {
|
|
263
|
+
return try {
|
|
264
|
+
requireIW().PwdUpdateStart().toString()
|
|
265
|
+
} catch (e: Exception) {
|
|
266
|
+
Log.e(TAG, "pwdUpdateStart error: ${e.message}", e)
|
|
267
|
+
"-1"
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
override fun pwdUpdateFinalize(newPin: String, currentPin: String): String {
|
|
272
|
+
return try {
|
|
273
|
+
val result = requireIW().PwdUpdateFinalize(newPin, currentPin)
|
|
274
|
+
saveStorage()
|
|
275
|
+
result.toString()
|
|
276
|
+
} catch (e: Exception) {
|
|
277
|
+
Log.e(TAG, "pwdUpdateFinalize error: ${e.message}", e)
|
|
278
|
+
"-1"
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
override fun setBiokeyStart(): String {
|
|
283
|
+
return try {
|
|
284
|
+
requireIW().SetBiokeyStart().toString()
|
|
285
|
+
} catch (e: Exception) {
|
|
286
|
+
Log.e(TAG, "setBiokeyStart error: ${e.message}", e)
|
|
287
|
+
"-1"
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
override fun setBiokeyFinalize(biokey: String, pin: String): String {
|
|
292
|
+
return try {
|
|
293
|
+
val result = requireIW().SetBiokeyFinalize(biokey, pin)
|
|
294
|
+
saveStorage()
|
|
295
|
+
result.toString()
|
|
296
|
+
} catch (e: Exception) {
|
|
297
|
+
Log.e(TAG, "setBiokeyFinalize error: ${e.message}", e)
|
|
298
|
+
"-1"
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
override fun unsetBiokeysStart(): String {
|
|
303
|
+
return try {
|
|
304
|
+
requireIW().UnsetBiokeysStart().toString()
|
|
305
|
+
} catch (e: Exception) {
|
|
306
|
+
Log.e(TAG, "unsetBiokeysStart error: ${e.message}", e)
|
|
307
|
+
"-1"
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
override fun unsetBiokeysFinalize(pin: String): String {
|
|
312
|
+
return try {
|
|
313
|
+
val result = requireIW().UnsetBiokeysFinalize(pin)
|
|
314
|
+
saveStorage()
|
|
315
|
+
result.toString()
|
|
316
|
+
} catch (e: Exception) {
|
|
317
|
+
Log.e(TAG, "unsetBiokeysFinalize error: ${e.message}", e)
|
|
318
|
+
"-1"
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
override fun onlineOtpStart(serviceIndex: Double): String {
|
|
323
|
+
return try {
|
|
324
|
+
requireIW().OnlineOtpStart(serviceIndex.toInt()).toString()
|
|
325
|
+
} catch (e: Exception) {
|
|
326
|
+
Log.e(TAG, "onlineOtpStart error: ${e.message}", e)
|
|
327
|
+
"-1"
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
override fun onlineOtpFinalize(serviceIndex: Double, pin: String, keyType: Double): String {
|
|
332
|
+
return try {
|
|
333
|
+
val result = requireIW().OnlineOtpFinalizeExt(
|
|
334
|
+
serviceIndex.toInt(),
|
|
335
|
+
pin,
|
|
336
|
+
keyType.toLong()
|
|
337
|
+
)
|
|
338
|
+
saveStorage()
|
|
339
|
+
result.toString()
|
|
340
|
+
} catch (e: Exception) {
|
|
341
|
+
Log.e(TAG, "onlineOtpFinalize error: ${e.message}", e)
|
|
342
|
+
"-1"
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
override fun otpAnswerOtp(): String {
|
|
347
|
+
return try {
|
|
348
|
+
requireIW().OtpAnswerOtp() ?: ""
|
|
349
|
+
} catch (e: Exception) {
|
|
350
|
+
Log.e(TAG, "otpAnswerOtp error: ${e.message}", e)
|
|
351
|
+
""
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
override fun otpShouldSynchronize(serviceId: Double): Boolean {
|
|
356
|
+
return try {
|
|
357
|
+
requireIW().OtpShouldSynchronize(serviceId.toInt()) == 1L
|
|
358
|
+
} catch (e: Exception) {
|
|
359
|
+
Log.e(TAG, "otpShouldSynchronize error: ${e.message}", e)
|
|
360
|
+
false
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
override fun otpModeQuery(serviceId: Double): Boolean {
|
|
365
|
+
return try {
|
|
366
|
+
requireIW().OtpModeQuery(serviceId.toInt()) == 1L
|
|
367
|
+
} catch (e: Exception) {
|
|
368
|
+
Log.e(TAG, "otpModeQuery error: ${e.message}", e)
|
|
369
|
+
false
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
override fun otpGenerate(pin: String): String {
|
|
374
|
+
return try {
|
|
375
|
+
val result = requireIW().OtpGenerate(pin)
|
|
376
|
+
saveStorage()
|
|
377
|
+
result ?: ""
|
|
378
|
+
} catch (e: Exception) {
|
|
379
|
+
Log.e(TAG, "otpGenerate error: ${e.message}", e)
|
|
380
|
+
""
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
override fun displayTime(): Double {
|
|
385
|
+
return try {
|
|
386
|
+
requireIW().DisplayTime().toDouble()
|
|
387
|
+
} catch (e: Exception) {
|
|
388
|
+
Log.e(TAG, "displayTime error: ${e.message}", e)
|
|
389
|
+
0.0
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
override fun setDeviceOS(deviceOS: String) {
|
|
394
|
+
try {
|
|
395
|
+
requireIW().SetDeviceOS(deviceOS)
|
|
396
|
+
} catch (e: Exception) {
|
|
397
|
+
Log.e(TAG, "setDeviceOS error: ${e.message}", e)
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
override fun pushRegistrationStart(): String {
|
|
402
|
+
return try {
|
|
403
|
+
requireIW().PushRegistrationStart().toString()
|
|
404
|
+
} catch (e: Exception) {
|
|
405
|
+
Log.e(TAG, "pushRegistrationStart error: ${e.message}", e)
|
|
406
|
+
"-1"
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
override fun pushRegistrationFinalize(pushId: String): String {
|
|
411
|
+
return try {
|
|
412
|
+
val result = requireIW().PushRegistrationFinalize(pushId)
|
|
413
|
+
saveStorage()
|
|
414
|
+
result.toString()
|
|
415
|
+
} catch (e: Exception) {
|
|
416
|
+
Log.e(TAG, "pushRegistrationFinalize error: ${e.message}", e)
|
|
417
|
+
"-1"
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
override fun checkPush(): String {
|
|
422
|
+
return try {
|
|
423
|
+
requireIW().CheckPush().toString()
|
|
424
|
+
} catch (e: Exception) {
|
|
425
|
+
Log.e(TAG, "checkPush error: ${e.message}", e)
|
|
426
|
+
"-1"
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
override fun pushAlias(): String {
|
|
431
|
+
return try {
|
|
432
|
+
requireIW().PushAlias() ?: ""
|
|
433
|
+
} catch (e: Exception) {
|
|
434
|
+
Log.e(TAG, "pushAlias error: ${e.message}", e)
|
|
435
|
+
""
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
override fun pushAction(): String {
|
|
440
|
+
return try {
|
|
441
|
+
requireIW().PushAction() ?: ""
|
|
442
|
+
} catch (e: Exception) {
|
|
443
|
+
Log.e(TAG, "pushAction error: ${e.message}", e)
|
|
444
|
+
""
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
override fun pushContext(): String {
|
|
449
|
+
return try {
|
|
450
|
+
requireIW().PushContext() ?: ""
|
|
451
|
+
} catch (e: Exception) {
|
|
452
|
+
Log.e(TAG, "pushContext error: ${e.message}", e)
|
|
453
|
+
""
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
override fun onlineSealStart(serviceIndex: Double): String {
|
|
458
|
+
return try {
|
|
459
|
+
requireIW().OnlineSealStart(serviceIndex.toInt()).toString()
|
|
460
|
+
} catch (e: Exception) {
|
|
461
|
+
Log.e(TAG, "onlineSealStart error: ${e.message}", e)
|
|
462
|
+
"-1"
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
override fun onlineSealFinalize(
|
|
467
|
+
serviceIndex: Double,
|
|
468
|
+
pin: String,
|
|
469
|
+
keyType: Double,
|
|
470
|
+
sealData: String
|
|
471
|
+
): String {
|
|
472
|
+
return try {
|
|
473
|
+
val result = requireIW().OnlineSealFinalizeExt(
|
|
474
|
+
serviceIndex.toInt(),
|
|
475
|
+
pin,
|
|
476
|
+
keyType.toLong(),
|
|
477
|
+
sealData
|
|
478
|
+
)
|
|
479
|
+
saveStorage()
|
|
480
|
+
result.toString()
|
|
481
|
+
} catch (e: Exception) {
|
|
482
|
+
Log.e(TAG, "onlineSealFinalize error: ${e.message}", e)
|
|
483
|
+
"-1"
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
override fun sealAnswerOtp(): String {
|
|
488
|
+
return try {
|
|
489
|
+
requireIW().SealAnswerOtp() ?: ""
|
|
490
|
+
} catch (e: Exception) {
|
|
491
|
+
Log.e(TAG, "sealAnswerOtp error: ${e.message}", e)
|
|
492
|
+
""
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
override fun sealShouldSynchronize(serviceId: Double): Boolean {
|
|
497
|
+
return try {
|
|
498
|
+
requireIW().SealShouldSynchronize(serviceId.toInt()) == 1L
|
|
499
|
+
} catch (e: Exception) {
|
|
500
|
+
Log.e(TAG, "sealShouldSynchronize error: ${e.message}", e)
|
|
501
|
+
false
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
override fun sealModeQuery(serviceId: Double): Boolean {
|
|
506
|
+
return try {
|
|
507
|
+
requireIW().SealModeQuery(serviceId.toInt()) == 1L
|
|
508
|
+
} catch (e: Exception) {
|
|
509
|
+
Log.e(TAG, "sealModeQuery error: ${e.message}", e)
|
|
510
|
+
false
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
override fun sealGenerate(pin: String, sealData: String): String {
|
|
515
|
+
return try {
|
|
516
|
+
val result = requireIW().SealGenerate(pin, sealData)
|
|
517
|
+
saveStorage()
|
|
518
|
+
result ?: ""
|
|
519
|
+
} catch (e: Exception) {
|
|
520
|
+
Log.e(TAG, "sealGenerate error: ${e.message}", e)
|
|
521
|
+
""
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
override fun serviceNb(): Double {
|
|
526
|
+
return try {
|
|
527
|
+
requireIW().ServiceNb().toDouble()
|
|
528
|
+
} catch (e: Exception) {
|
|
529
|
+
Log.e(TAG, "serviceNb error: ${e.message}", e)
|
|
530
|
+
0.0
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
override fun serviceName(index: Double): String {
|
|
535
|
+
return try {
|
|
536
|
+
requireIW().ServiceName(index.toInt()) ?: ""
|
|
537
|
+
} catch (e: Exception) {
|
|
538
|
+
Log.e(TAG, "serviceName error: ${e.message}", e)
|
|
539
|
+
""
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
override fun serviceLogo(index: Double): String {
|
|
544
|
+
return try {
|
|
545
|
+
requireIW().ServiceLogo(index.toInt()) ?: ""
|
|
546
|
+
} catch (e: Exception) {
|
|
547
|
+
Log.e(TAG, "serviceLogo error: ${e.message}", e)
|
|
548
|
+
""
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
override fun serviceDisabled(index: Double): Boolean {
|
|
553
|
+
return try {
|
|
554
|
+
requireIW().ServiceDisabled(index.toInt()) == 1L
|
|
555
|
+
} catch (e: Exception) {
|
|
556
|
+
Log.e(TAG, "serviceDisabled error: ${e.message}", e)
|
|
557
|
+
false
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
override fun getVersionInfo(): String {
|
|
562
|
+
return try {
|
|
563
|
+
val result = JSONObject()
|
|
564
|
+
result.put("libraryVersion", IW.VersionGet() ?: "")
|
|
565
|
+
val instance = iw
|
|
566
|
+
result.put("newVersionAvailable", instance?.NewVersionAvailable() ?: "")
|
|
567
|
+
result.put("newVersionUrl", instance?.NewVersionURL() ?: "")
|
|
568
|
+
result.put("majorVersionRequired", instance?.MajorVersionRequired() == 1L)
|
|
569
|
+
result.put("shouldAskForMinorUpdate", instance?.ShouldAskForMinorUpdate() == 1L)
|
|
570
|
+
result.toString()
|
|
571
|
+
} catch (e: Exception) {
|
|
572
|
+
Log.e(TAG, "getVersionInfo error: ${e.message}", e)
|
|
573
|
+
"{}"
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
override fun getConstants(): Map<String, Any> {
|
|
578
|
+
return mapOf(
|
|
579
|
+
"NAME" to NAME
|
|
580
|
+
)
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
override fun addListener(event: String) {
|
|
584
|
+
// Required for NativeEventEmitter support
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
override fun removeListeners(count: Double) {
|
|
588
|
+
// Required for NativeEventEmitter support
|
|
589
|
+
}
|
|
590
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.trustbuilder
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.TurboReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
8
|
+
|
|
9
|
+
class TrustbuilderPackage : TurboReactPackage() {
|
|
10
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
11
|
+
return if (name == TrustbuilderModule.NAME) {
|
|
12
|
+
TrustbuilderModule(reactContext)
|
|
13
|
+
} else {
|
|
14
|
+
null
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
19
|
+
return ReactModuleInfoProvider {
|
|
20
|
+
val moduleInfos = mutableMapOf<String, ReactModuleInfo>()
|
|
21
|
+
moduleInfos[TrustbuilderModule.NAME] = ReactModuleInfo(
|
|
22
|
+
TrustbuilderModule.NAME,
|
|
23
|
+
TrustbuilderModule.NAME,
|
|
24
|
+
false, // canOverrideExistingModule
|
|
25
|
+
false, // needsEagerInit
|
|
26
|
+
false, // isCxxModule
|
|
27
|
+
true // isTurboModule
|
|
28
|
+
)
|
|
29
|
+
moduleInfos
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|