From 5ffd778df110f0ec36f09f60348592c140d635e3 Mon Sep 17 00:00:00 2001 From: bombay Date: Sun, 7 Oct 2018 17:38:44 +0700 Subject: [PATCH] [WIP]Help refactor code solid patterns --- .../client/tools/MqttSslClient.java | 98 ++++++++++++++----- 1 file changed, 73 insertions(+), 25 deletions(-) diff --git a/tools/src/main/java/org/thingsboard/client/tools/MqttSslClient.java b/tools/src/main/java/org/thingsboard/client/tools/MqttSslClient.java index dd27e44a1d..339f26ded8 100644 --- a/tools/src/main/java/org/thingsboard/client/tools/MqttSslClient.java +++ b/tools/src/main/java/org/thingsboard/client/tools/MqttSslClient.java @@ -50,38 +50,86 @@ public class MqttSslClient { File ksFile = new File(ksUrl.toURI()); URL tsUrl = Resources.getResource(KEY_STORE_FILE); File tsFile = new File(tsUrl.toURI()); + char[] ksPwd = setKeyPassword(); - TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + KeyStore trustStore = setKeyStore(tsFile, ksPwd); - KeyStore trustStore = KeyStore.getInstance(JKS); - char[] ksPwd = new char[]{0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x5F, 0x6B, 0x73, 0x5F, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64}; - trustStore.load(new FileInputStream(tsFile), ksPwd); - tmf.init(trustStore); - KeyStore ks = KeyStore.getInstance(JKS); + TrustManagerFactory tmf = setTrustManagerFactory(trustStore); - ks.load(new FileInputStream(ksFile), ksPwd); - KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); - char[] clientPwd = new char[]{0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x5F, 0x6B, 0x65, 0x79, 0x5F, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64}; - kmf.init(ks, clientPwd); + KeyStore ks = setKeyStore2(ksFile, ksPwd); - KeyManager[] km = kmf.getKeyManagers(); - TrustManager[] tm = tmf.getTrustManagers(); - SSLContext sslContext = SSLContext.getInstance(TLS); - sslContext.init(km, tm, null); + KeyManagerFactory kmf = setKeyManagerFactory(ks); + + SSLContext sslContext = setSSLContext(kmf, tmf); + + MqttConnectOptions mqttConnectOptions = setMqttConnectOptions(sslContext); + + MqttAsyncClient mqttAsyncClient = setMqttAsyncClient(mqttConnectOptions); + + setMessage(mqttAsyncClient, "v1/devices/me/telemetry", "{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4}"); - MqttConnectOptions options = new MqttConnectOptions(); - options.setSocketFactory(sslContext.getSocketFactory()); - MqttAsyncClient client = new MqttAsyncClient(MQTT_URL, CLIENT_ID); - client.connect(options); - Thread.sleep(3000); - MqttMessage message = new MqttMessage(); - message.setPayload("{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4}".getBytes()); - client.publish("v1/devices/me/telemetry", message); - client.disconnect(); - log.info("Disconnected"); - System.exit(0); } catch (Exception e) { log.error("Unexpected exception occurred in MqttSslClient", e); } } + + private static char[] setKeyPassword(){ + return new char[]{0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x5F, 0x6B, 0x73, 0x5F, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64}; + } + + private static KeyStore setKeyStore(File tsFile, char[] ksPwd) throws Exception{ + KeyStore trustStore = KeyStore.getInstance(JKS); + trustStore.load(new FileInputStream(tsFile), ksPwd); + return trustStore; + } + + private static TrustManagerFactory setTrustManagerFactory(KeyStore trustStore) throws Exception { + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(trustStore); + return tmf; + } + + private static KeyStore setKeyStore2(File ksFile, char[] ksPwd)throws Exception{ + KeyStore ks = KeyStore.getInstance(JKS); + ks.load(new FileInputStream(ksFile), ksPwd); + return ks; + } + + private static KeyManagerFactory setKeyManagerFactory(KeyStore ks) throws Exception { + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + char[] clientPwd = new char[]{0x63, 0x6C, 0x69, 0x65, 0x6E, 0x74, 0x5F, 0x6B, 0x65, 0x79, 0x5F, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6F, 0x72, 0x64}; + kmf.init(ks, clientPwd); + return kmf; + } + + private static SSLContext setSSLContext(KeyManagerFactory kmf, TrustManagerFactory tmf) throws Exception { + KeyManager[] km = kmf.getKeyManagers(); + TrustManager[] tm = tmf.getTrustManagers(); + SSLContext sslContext = SSLContext.getInstance(TLS); + sslContext.init(km, tm, null); + return sslContext; + } + + private static MqttConnectOptions setMqttConnectOptions(SSLContext sslContext){ + MqttConnectOptions options = new MqttConnectOptions(); + options.setSocketFactory(sslContext.getSocketFactory()); + return options; + } + + private static MqttAsyncClient setMqttAsyncClient(MqttConnectOptions options) throws Exception{ + MqttAsyncClient client = new MqttAsyncClient(MQTT_URL, CLIENT_ID); + client.connect(options); + Thread.sleep(3000); + return client; + } + + private static void setMessage(MqttAsyncClient client, String topic, String payload) throws Exception { + MqttMessage message = new MqttMessage(); + message.setPayload(payload.getBytes()); + client.publish(topic, message); + client.disconnect(); + log.info("Disconnected"); + System.exit(0); + } + } \ No newline at end of file