nats code

This commit is contained in:
Mariya
2024-02-07 12:49:31 +05:30
parent 1a3bb67dce
commit 45fd4861f4
5 changed files with 52 additions and 60 deletions

Binary file not shown.

View File

@@ -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"
}
],

View File

@@ -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<KeyManager> {
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<TrustManager> {
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()

View File

@@ -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)
}
}

View File

@@ -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) {