diff --git a/app/release/hpos-app.apk b/app/release/hpos-app.apk deleted file mode 100644 index b9d6528..0000000 Binary files a/app/release/hpos-app.apk and /dev/null differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index acfe21e..14fde68 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -4,15 +4,15 @@ "type": "APK", "kind": "Directory" }, - "applicationId": "com.example.hpos", + "applicationId": "in.sminnovations.hpostesting.quality", "variantName": "release", "elements": [ { "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 1, - "versionName": "1.0", + "versionCode": 101, + "versionName": "2.1.101", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt b/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt index fe83c25..ebd8ad8 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/NatsManager.kt @@ -1,6 +1,7 @@ package com.example.hpostesting.presentation import android.util.Log +import com.example.hpostesting.presentation.assurance.AssuranceControlsActivity import com.example.hpostesting.presentation.dashboard.DashboardActivity import io.nats.client.AuthHandler import io.nats.client.Connection @@ -9,12 +10,14 @@ import io.nats.client.NKey import io.nats.client.Nats import io.nats.client.Options import java.io.BufferedInputStream +import java.io.File import java.io.FileInputStream import java.io.IOException import java.nio.charset.StandardCharsets import java.security.GeneralSecurityException import java.security.KeyStore import java.security.SecureRandom +import java.security.cert.CertificateFactory import javax.net.ssl.KeyManager import javax.net.ssl.KeyManagerFactory import javax.net.ssl.SSLContext @@ -22,19 +25,20 @@ import javax.net.ssl.TrustManager import javax.net.ssl.TrustManagerFactory -class NatsManager(datacollector: DashboardActivity) { +class NatsManager(datacollector: AssuranceControlsActivity) { val TAG = "Nats Service" var nc: Connection? = null val datacollector = datacollector var connect = false - fun createSSLContext(): SSLContext { - val keyStorePassword = "password".toCharArray() // Change as necessary + private fun createSSLContext(): SSLContext { + val keyStorePassword = "prime24".toCharArray() // Change as necessary + val clientCertPath = "/storage/sdcard0/Download/client.p12" // Load client certificate and key - val keyStore = KeyStore.getInstance("PKCS12") - FileInputStream("path/to/client-certificate.p12").use { keyStoreInputStream -> + val keyStore = KeyStore.getInstance("PKCS12") // Ensure this matches your file type + FileInputStream(clientCertPath).use { keyStoreInputStream -> keyStore.load(keyStoreInputStream, keyStorePassword) } @@ -43,9 +47,13 @@ class NatsManager(datacollector: DashboardActivity) { keyManagerFactory.init(keyStore, keyStorePassword) // Load CA certificate + val caCertPath = "/storage/sdcard0/Android/data/in.sminnovations.hpostesting.quality/files/extractedCertificates/clientCertificate/client-cert.pem" val trustStore = KeyStore.getInstance(KeyStore.getDefaultType()) - FileInputStream("/storage/emulated/0/Android/data/in.sminnovations.hpostesting.quality/files/NATS/clientCertificate/client-cert.pem").use { trustStoreInputStream -> - trustStore.load(trustStoreInputStream, null) // No password for CA certificate + trustStore.load(null, null) // Initialize the trust store + + // Load the CA certificate as a Certificate object + CertificateFactory.getInstance("X.509").generateCertificate(BufferedInputStream(FileInputStream(caCertPath))).also { caCertificate -> + trustStore.setCertificateEntry("ca-cert", caCertificate) } // Initialize trust manager factory @@ -59,50 +67,6 @@ class NatsManager(datacollector: DashboardActivity) { return sslContext } - internal object SSLUtils { - var KEYSTORE_PATH = "keystore.jks" - var TRUSTSTORE_PATH = "truststore.jks" - var STORE_PASSWORD = "password" - var KEY_PASSWORD = "password" - var ALGORITHM = "SunX509" - @Throws(java.lang.Exception::class) - fun loadKeystore(path: String?): KeyStore { - val store = KeyStore.getInstance("JKS") - val `in` = BufferedInputStream(FileInputStream(path)) - try { - store.load(`in`, STORE_PASSWORD.toCharArray()) - } finally { - if (`in` != null) { - `in`.close() - } - } - return store - } - - @Throws(java.lang.Exception::class) - fun createTestKeyManagers(): Array { - val store = loadKeystore(KEYSTORE_PATH) - val factory = KeyManagerFactory.getInstance(ALGORITHM) - factory.init(store, KEY_PASSWORD.toCharArray()) - return factory.keyManagers - } - - @Throws(java.lang.Exception::class) - fun createTestTrustManagers(): Array { - val store = loadKeystore(TRUSTSTORE_PATH) - val factory = TrustManagerFactory.getInstance(ALGORITHM) - factory.init(store) - return factory.trustManagers - } - - @Throws(java.lang.Exception::class) - fun createSSLContext(): SSLContext { - val ctx = SSLContext.getInstance(Options.DEFAULT_SSL_PROTOCOL) - ctx.init(createTestKeyManagers(), createTestTrustManagers(), SecureRandom()) - return ctx - } - } - fun connect() { Log.d(TAG, "TRY TO CONNECT") Thread { @@ -113,7 +77,8 @@ class NatsManager(datacollector: DashboardActivity) { val theNKey = NKey.fromSeed(seedBytes) // really should load from somewhere val options = Options.Builder() - .server("nats://192.168.10.117:4222") + .server("nats://nanodgx.in:4222") + .sslContext(createSSLContext()) .authHandler(object : AuthHandler { override fun getID(): CharArray? { return try { @@ -151,6 +116,11 @@ class NatsManager(datacollector: DashboardActivity) { connect = true datacollector.setConnect(true) + if (nc?.status == Connection.Status.CONNECTED) { + Log.e("NATSCONNECTION", "NATS is successfully connected.") + } else { + Log.e("NATSCONNECTION", "NATS is not connected. Current status: ${nc?.status}") + } nc?.publish( "server.hpos.HCV-000-3001.ping", @@ -165,6 +135,7 @@ class NatsManager(datacollector: DashboardActivity) { println("PRITIMOI SARKAR $msg") } + d?.subscribe("device.hpos.HCV-000-3001.update") { msg -> val response = String(msg.data, StandardCharsets.UTF_8) datacollector. setResponse(response) @@ -198,7 +169,7 @@ class NatsManager(datacollector: DashboardActivity) { } catch (exp: Exception) { println(exp.printStackTrace()) connect = false - datacollector.setConnect(true) + datacollector.setConnect(false) } }.start() diff --git a/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt index 307ac08..23ae8e9 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/assurance/AssuranceControlsActivity.kt @@ -3,14 +3,19 @@ package com.example.hpostesting.presentation.assurance import android.content.Context import android.content.SharedPreferences import android.os.Bundle +import android.util.Log import androidx.appcompat.app.AppCompatActivity +import com.example.hpostesting.presentation.NatsManager +import com.example.hpostesting.presentation.dashboard.IDataCollector import dagger.hilt.android.AndroidEntryPoint import `in`.sminnovations.hpostesting.databinding.ActivityAssuranceControlsBinding @AndroidEntryPoint -class AssuranceControlsActivity: AppCompatActivity() { +class AssuranceControlsActivity: AppCompatActivity(), IDataCollector { lateinit var binding: ActivityAssuranceControlsBinding lateinit var sharedPreference: SharedPreferences + lateinit var nats: NatsManager + var responses: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -24,5 +29,21 @@ class AssuranceControlsActivity: AppCompatActivity() { .replace(binding.fgAssuranceControls.id, AssuranceControlsFragment()) .commit() } + + nats = NatsManager(this) + nats.connect() + nats.pub("server.hpos.HCV-000-3001.ping", "THIS IS A TEST MSG") + } + + override fun setConnect(connect: Boolean) { + if(connect){ + Log.i("NATS Connection", connect.toString()) + } + } + + override fun setResponse(response: String) { + + responses = responses+response+"\n" + println(responses) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt index 63b7cd9..a145f01 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/dashboard/DashboardActivity.kt @@ -59,9 +59,9 @@ class DashboardActivity : AppCompatActivity(), IDataCollector { binding = ActivityDashboardBinding.inflate(layoutInflater) setContentView(binding.root) setSupportActionBar(binding.appBarDashboard.toolbar) - nats = NatsManager(this) - nats.connect() - nats.pub("server.hpos.HCV-000-3001.ping", "THIS IS A TEST MSG") +// nats = NatsManager(this) +// nats.connect() +// nats.pub("server.hpos.HCV-000-3001.ping", "THIS IS A TEST MSG") hemocubeViewModel.deviceUpdate.observe(this) { result -> when (result) {