This commit is contained in:
Mariya
2024-02-06 16:23:33 +05:30
parent 3dd247b15d
commit 1a3bb67dce
2 changed files with 85 additions and 1 deletions

View File

@@ -119,7 +119,8 @@
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

View File

@@ -8,9 +8,18 @@ import io.nats.client.Message
import io.nats.client.NKey
import io.nats.client.Nats
import io.nats.client.Options
import java.io.BufferedInputStream
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 javax.net.ssl.KeyManager
import javax.net.ssl.KeyManagerFactory
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.TrustManagerFactory
class NatsManager(datacollector: DashboardActivity) {
@@ -20,6 +29,80 @@ class NatsManager(datacollector: DashboardActivity) {
val datacollector = datacollector
var connect = false
fun createSSLContext(): SSLContext {
val keyStorePassword = "password".toCharArray() // Change as necessary
// Load client certificate and key
val keyStore = KeyStore.getInstance("PKCS12")
FileInputStream("path/to/client-certificate.p12").use { keyStoreInputStream ->
keyStore.load(keyStoreInputStream, keyStorePassword)
}
// Initialize key manager factory
val keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm())
keyManagerFactory.init(keyStore, keyStorePassword)
// Load CA certificate
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
}
// Initialize trust manager factory
val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
trustManagerFactory.init(trustStore)
// Initialize SSLContext
val sslContext = SSLContext.getInstance("TLS")
sslContext.init(keyManagerFactory.keyManagers, trustManagerFactory.trustManagers, SecureRandom())
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 {