diff --git a/application/src/test/java/org/thingsboard/server/controller/DeviceConnectivityControllerTest.java b/application/src/test/java/org/thingsboard/server/controller/DeviceConnectivityControllerTest.java index 383a050bb2..525e18240d 100644 --- a/application/src/test/java/org/thingsboard/server/controller/DeviceConnectivityControllerTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/DeviceConnectivityControllerTest.java @@ -396,4 +396,10 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest { public void testDownloadMqttCertWithoutCertFile() throws Exception { doGet("/api/device-connectivity/mqtts/certificate/download").andExpect(status().isNotFound()); } + + @Test + @DirtiesContext + public void testDownloadCertWithUnknownProtocol() throws Exception { + doGet("/api/device-connectivity/unknownProtocol/certificate/download").andExpect(status().isNotFound()); + } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityConfiguration.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityConfiguration.java index 99a4014f48..227b531be0 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityConfiguration.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityConfiguration.java @@ -28,6 +28,10 @@ import java.util.Map; public class DeviceConnectivityConfiguration { private Map connectivity = new HashMap<>(); + public DeviceConnectivityInfo getConnectivity(String protocol) { + return connectivity.get(protocol); + } + public boolean isEnabled(String protocol) { var info = connectivity.get(protocol); return info != null && info.isEnabled(); diff --git a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java index 995e3798b0..b30ae40808 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/device/DeviceConnectivityServiceImpl.java @@ -81,7 +81,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService @PostConstruct private void init() { - DeviceConnectivityInfo mqtts = deviceConnectivityConfiguration.getConnectivity().get(MQTTS); + DeviceConnectivityInfo mqtts = deviceConnectivityConfiguration.getConnectivity(MQTTS); if (mqtts != null && mqtts.isEnabled()) { String certFilePath = mqtts.getPemCertFile(); if (StringUtils.isBlank(certFilePath) || !ResourceUtils.resourceExists(this, certFilePath)) { @@ -89,7 +89,6 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService log.error("MQTTS is enabled but cert {}!", error); } } - } @Override @@ -140,9 +139,12 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService @Override public Resource getPemCertFile(String protocol) { return certs.computeIfAbsent(protocol, key -> { - String certFilePath = deviceConnectivityConfiguration.getConnectivity() - .get(protocol) - .getPemCertFile(); + DeviceConnectivityInfo connectivity = deviceConnectivityConfiguration.getConnectivity(protocol); + if (connectivity == null) { + log.warn("Unknown connectivity protocol: {}", protocol); + return null; + } + String certFilePath = connectivity.getPemCertFile(); if (StringUtils.isNotBlank(certFilePath) && ResourceUtils.resourceExists(this, certFilePath)) { try { return getCert(certFilePath); @@ -195,7 +197,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } private String getHttpPublishCommand(String protocol, String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { - DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(protocol); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity(protocol); if (properties == null || !properties.isEnabled() || deviceCredentials.getCredentialsType() != DeviceCredentialsType.ACCESS_TOKEN) { return null; @@ -246,14 +248,14 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } private String getMqttPublishCommand(String baseUrl, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) throws URISyntaxException { - DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(MQTT); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity(MQTT); String mqttHost = getHost(baseUrl, properties); String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); return DeviceConnectivityUtil.getMqttPublishCommand(MQTT, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials); } private List getMqttsPublishCommand(String baseUrl, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) throws URISyntaxException { - DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(MQTTS); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity(MQTTS); String mqttHost = getHost(baseUrl, properties); String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); String pubCommand = DeviceConnectivityUtil.getMqttPublishCommand(MQTTS, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials); @@ -268,7 +270,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } private String getDockerMqttPublishCommand(String protocol, String baseUrl, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) throws URISyntaxException { - DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(protocol); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity(protocol); String mqttHost = getHost(baseUrl, properties); String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); return DeviceConnectivityUtil.getDockerMqttPublishCommand(protocol, baseUrl, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials); @@ -308,14 +310,14 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService } private String getCoapPublishCommand(String protocol, String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { - DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(protocol); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity(protocol); String hostName = getHost(baseUrl, properties); String port = properties.getPort().isEmpty() ? "" : ":" + properties.getPort(); return DeviceConnectivityUtil.getCoapPublishCommand(protocol, hostName, port, deviceCredentials); } private String getDockerCoapPublishCommand(String protocol, String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { - DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity().get(protocol); + DeviceConnectivityInfo properties = deviceConnectivityConfiguration.getConnectivity(protocol); String host = getHost(baseUrl, properties); String port = properties.getPort().isEmpty() ? "" : ":" + properties.getPort(); return DeviceConnectivityUtil.getDockerCoapPublishCommand(protocol, host, port, deviceCredentials);