diff --git a/app/src/main/java/it/ipzs/cieidsdk/sampleapp/MainActivity.kt b/app/src/main/java/it/ipzs/cieidsdk/sampleapp/MainActivity.kt index 26e7d73..bf97d69 100644 --- a/app/src/main/java/it/ipzs/cieidsdk/sampleapp/MainActivity.kt +++ b/app/src/main/java/it/ipzs/cieidsdk/sampleapp/MainActivity.kt @@ -45,7 +45,7 @@ class MainActivity : AppCompatActivity(), Callback { //configurazione cieidsdk CieIDSdk.start(this, this) //passare il pin inserito dall'utente - CieIDSdk.pin = "81813213" + CieIDSdk.pin = "12345678" //settare la url caricata dalla webview su /OpenApp CieIDSdk.setUrl(url) //abilitare i log diff --git a/cieidsdk/index.js b/cieidsdk/index.js index b133773..4230548 100644 --- a/cieidsdk/index.js +++ b/cieidsdk/index.js @@ -70,32 +70,31 @@ class CieManager { }); }; + /** + * Return true if the nfc is enabled, on the device in Settings screen + * is possible enable or disable it. + */ isNFCEnabled = () => { if (Platform.OS === "ios") { return Promise.reject("not implemented"); } - return new Promise((resolve, reject) => { - NativeCie.isNFCEnabled((err, result) => { - if (err) { - reject(err); - } else { + return new Promise(resolve => { + NativeCie.isNFCEnabled((result) => { resolve(result); - } }); }); }; + /** + * Check if the hardware module nfc is installed (only for Android devices) + */ hasNFCFeature = () => { if (Platform.OS === "ios") { return Promise.reject("not implemented"); } - return new Promise((resolve, reject) => { - NativeCie.hasNFCFeature((err, result) => { - if (err) { - reject(err); - } else { + return new Promise(resolve => { + NativeCie.hasNFCFeature((result) => { resolve(result); - } }); }); }; diff --git a/cieidsdk/src/main/java/it/ipzs/cieidsdk/common/CieIDSdk.kt b/cieidsdk/src/main/java/it/ipzs/cieidsdk/common/CieIDSdk.kt index 745e2d6..4d72675 100644 --- a/cieidsdk/src/main/java/it/ipzs/cieidsdk/common/CieIDSdk.kt +++ b/cieidsdk/src/main/java/it/ipzs/cieidsdk/common/CieIDSdk.kt @@ -34,24 +34,39 @@ val CERTIFICATE_REVOKED: CharSequence = "SSLV3_ALERT_CERTIFICATE_REVOKED" class Event { - enum class EventValue { + interface EventValue { + val nameEvent: String + } + + enum class EventTag : EventValue { //tag ON_TAG_DISCOVERED_NOT_CIE, ON_TAG_DISCOVERED, - ON_TAG_LOST, + ON_TAG_LOST; + override val nameEvent: String = name + } + enum class EventCard: EventValue { //card ON_CARD_PIN_LOCKED, - ON_PIN_ERROR, + ON_PIN_ERROR; + + override val nameEvent: String = name + } + enum class EventCertificate : EventValue { //certificate CERTIFICATE_EXPIRED, - CERTIFICATE_REVOKED, + CERTIFICATE_REVOKED; + override val nameEvent: String = name + } + enum class EventError : EventValue { //error AUTHENTICATION_ERROR, - GENERAL_ERROR, - ON_NO_INTERNET_CONNECTION + ON_NO_INTERNET_CONNECTION; + + override val nameEvent: String = name } private var tentativi: Int = 0 @@ -67,7 +82,7 @@ class Event { } override fun toString(): String { - return eventValue.name + return eventValue.nameEvent } } @@ -87,7 +102,7 @@ object CieIDSdk : NfcAdapter.ReaderCallback { internal var ias: Ias? = null var enableLog: Boolean = false var pin: String = "" - private const val isoDepTimeout: Int = 2000 + private const val isoDepTimeout: Int = 4000 @SuppressLint("CheckResult") @@ -114,7 +129,7 @@ object CieIDSdk : NfcAdapter.ReaderCallback { callback?.onSuccess(url) } else { - callback?.onEvent(Event(Event.EventValue.AUTHENTICATION_ERROR)) + callback?.onEvent(Event(Event.EventError.AUTHENTICATION_ERROR)) } } @@ -125,7 +140,7 @@ object CieIDSdk : NfcAdapter.ReaderCallback { when (e) { is SocketTimeoutException , is UnknownHostException -> { CieIDSdkLogger.log("SocketTimeoutException or UnknownHostException") - callback?.onEvent(Event(Event.EventValue.ON_NO_INTERNET_CONNECTION)) + callback?.onEvent(Event(Event.EventError.ON_NO_INTERNET_CONNECTION)) } is SSLProtocolException -> { @@ -133,8 +148,8 @@ object CieIDSdk : NfcAdapter.ReaderCallback { CieIDSdkLogger.log("SSLProtocolException") e.message?.let { when { - it.contains(CERTIFICATE_EXPIRED) -> callback?.onEvent(Event(Event.EventValue.CERTIFICATE_EXPIRED)) - it.contains(CERTIFICATE_REVOKED) -> callback?.onEvent(Event(Event.EventValue.CERTIFICATE_REVOKED)) + it.contains(CERTIFICATE_EXPIRED) -> callback?.onEvent(Event(Event.EventCertificate.CERTIFICATE_EXPIRED)) + it.contains(CERTIFICATE_REVOKED) -> callback?.onEvent(Event(Event.EventCertificate.CERTIFICATE_REVOKED)) else -> callback?.onError(e) } } @@ -149,7 +164,7 @@ object CieIDSdk : NfcAdapter.ReaderCallback { override fun onTagDiscovered(tag: Tag?) { try { - callback?.onEvent(Event(Event.EventValue.ON_TAG_DISCOVERED)) + callback?.onEvent(Event(Event.EventTag.ON_TAG_DISCOVERED)) val isoDep = IsoDep.get(tag) isoDep.timeout = isoDepTimeout isoDep.connect() @@ -163,10 +178,10 @@ object CieIDSdk : NfcAdapter.ReaderCallback { } catch (throwable: Throwable) { CieIDSdkLogger.log(throwable.toString()) when (throwable) { - is PinNotValidException -> callback?.onEvent(Event(Event.EventValue.ON_PIN_ERROR, throwable.tentativi)) - is BlockedPinException -> callback?.onEvent(Event(Event.EventValue.ON_CARD_PIN_LOCKED)) - is NoCieException -> callback?.onEvent(Event(Event.EventValue.ON_TAG_DISCOVERED_NOT_CIE)) - is TagLostException -> callback?.onEvent(Event(Event.EventValue.ON_TAG_LOST)) + is PinNotValidException -> callback?.onEvent(Event(Event.EventCard.ON_PIN_ERROR, throwable.tentativi)) + is BlockedPinException -> callback?.onEvent(Event(Event.EventCard.ON_CARD_PIN_LOCKED)) + is NoCieException -> callback?.onEvent(Event(Event.EventTag.ON_TAG_DISCOVERED_NOT_CIE)) + is TagLostException -> callback?.onEvent(Event(Event.EventTag.ON_TAG_LOST)) else -> callback?.onError(throwable) } } diff --git a/cieidsdk/src/main/java/it/ipzs/cieidsdk/native_bridge/CieModule.kt b/cieidsdk/src/main/java/it/ipzs/cieidsdk/native_bridge/CieModule.kt index 8f0996b..6f306a2 100644 --- a/cieidsdk/src/main/java/it/ipzs/cieidsdk/native_bridge/CieModule.kt +++ b/cieidsdk/src/main/java/it/ipzs/cieidsdk/native_bridge/CieModule.kt @@ -44,18 +44,22 @@ class CieModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMod @ReactMethod fun start(callback: com.facebook.react.bridge.Callback){ - CieIDSdk.start(getCurrentActivity()!!, this) - callback.invoke(null,null) + try { + CieIDSdk.start(getCurrentActivity()!!, this) + callback.invoke(null, null) + } catch (e: RuntimeException) { + callback.invoke(e.message,null) + } } @ReactMethod fun isNFCEnabled(callback: com.facebook.react.bridge.Callback) { - callback.invoke(null,CieIDSdk.isNFCEnabled(getCurrentActivity()!!)) + callback.invoke(CieIDSdk.isNFCEnabled(getCurrentActivity()!!)) } @ReactMethod fun hasNFCFeature(callback: com.facebook.react.bridge.Callback) { - callback.invoke(null,CieIDSdk.hasFeatureNFC(getCurrentActivity()!!)) + callback.invoke(CieIDSdk.hasFeatureNFC(getCurrentActivity()!!)) } @ReactMethod @@ -70,14 +74,22 @@ class CieModule(reactContext: ReactApplicationContext) : ReactContextBaseJavaMod @ReactMethod fun startListeningNFC(callback: com.facebook.react.bridge.Callback) { - CieIDSdk.startNFCListening(getCurrentActivity()!!) - callback.invoke(null,null) + try { + CieIDSdk.startNFCListening(getCurrentActivity()!!) + callback.invoke(null,null) + } catch (e: RuntimeException) { + callback.invoke(e.message,null) + } } @ReactMethod fun stopListeningNFC(callback: com.facebook.react.bridge.Callback) { - CieIDSdk.stopNFCListening(getCurrentActivity()!!) - callback.invoke(null,null) + try { + CieIDSdk.stopNFCListening(getCurrentActivity()!!) + callback.invoke(null, null) + } catch (e: RuntimeException) { + callback.invoke(e.message,null) + } } @ReactMethod