nats
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user