download cert improvements

This commit is contained in:
YevhenBondarenko 2023-09-06 11:01:46 +02:00
parent 4e1e9dcc7d
commit 43584d4012
3 changed files with 23 additions and 11 deletions

View File

@ -396,4 +396,10 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
public void testDownloadMqttCertWithoutCertFile() throws Exception { public void testDownloadMqttCertWithoutCertFile() throws Exception {
doGet("/api/device-connectivity/mqtts/certificate/download").andExpect(status().isNotFound()); 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());
}
} }

View File

@ -28,6 +28,10 @@ import java.util.Map;
public class DeviceConnectivityConfiguration { public class DeviceConnectivityConfiguration {
private Map<String, DeviceConnectivityInfo> connectivity = new HashMap<>(); private Map<String, DeviceConnectivityInfo> connectivity = new HashMap<>();
public DeviceConnectivityInfo getConnectivity(String protocol) {
return connectivity.get(protocol);
}
public boolean isEnabled(String protocol) { public boolean isEnabled(String protocol) {
var info = connectivity.get(protocol); var info = connectivity.get(protocol);
return info != null && info.isEnabled(); return info != null && info.isEnabled();

View File

@ -81,7 +81,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
@PostConstruct @PostConstruct
private void init() { private void init() {
DeviceConnectivityInfo mqtts = deviceConnectivityConfiguration.getConnectivity().get(MQTTS); DeviceConnectivityInfo mqtts = deviceConnectivityConfiguration.getConnectivity(MQTTS);
if (mqtts != null && mqtts.isEnabled()) { if (mqtts != null && mqtts.isEnabled()) {
String certFilePath = mqtts.getPemCertFile(); String certFilePath = mqtts.getPemCertFile();
if (StringUtils.isBlank(certFilePath) || !ResourceUtils.resourceExists(this, certFilePath)) { 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); log.error("MQTTS is enabled but cert {}!", error);
} }
} }
} }
@Override @Override
@ -140,9 +139,12 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
@Override @Override
public Resource getPemCertFile(String protocol) { public Resource getPemCertFile(String protocol) {
return certs.computeIfAbsent(protocol, key -> { return certs.computeIfAbsent(protocol, key -> {
String certFilePath = deviceConnectivityConfiguration.getConnectivity() DeviceConnectivityInfo connectivity = deviceConnectivityConfiguration.getConnectivity(protocol);
.get(protocol) if (connectivity == null) {
.getPemCertFile(); log.warn("Unknown connectivity protocol: {}", protocol);
return null;
}
String certFilePath = connectivity.getPemCertFile();
if (StringUtils.isNotBlank(certFilePath) && ResourceUtils.resourceExists(this, certFilePath)) { if (StringUtils.isNotBlank(certFilePath) && ResourceUtils.resourceExists(this, certFilePath)) {
try { try {
return getCert(certFilePath); return getCert(certFilePath);
@ -195,7 +197,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
} }
private String getHttpPublishCommand(String protocol, String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { 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() || if (properties == null || !properties.isEnabled() ||
deviceCredentials.getCredentialsType() != DeviceCredentialsType.ACCESS_TOKEN) { deviceCredentials.getCredentialsType() != DeviceCredentialsType.ACCESS_TOKEN) {
return null; return null;
@ -246,14 +248,14 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
} }
private String getMqttPublishCommand(String baseUrl, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) throws URISyntaxException { 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 mqttHost = getHost(baseUrl, properties);
String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort();
return DeviceConnectivityUtil.getMqttPublishCommand(MQTT, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials); return DeviceConnectivityUtil.getMqttPublishCommand(MQTT, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials);
} }
private List<String> getMqttsPublishCommand(String baseUrl, String deviceTelemetryTopic, DeviceCredentials deviceCredentials) throws URISyntaxException { private List<String> 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 mqttHost = getHost(baseUrl, properties);
String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort();
String pubCommand = DeviceConnectivityUtil.getMqttPublishCommand(MQTTS, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials); 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 { 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 mqttHost = getHost(baseUrl, properties);
String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort(); String mqttPort = properties.getPort().isEmpty() ? null : properties.getPort();
return DeviceConnectivityUtil.getDockerMqttPublishCommand(protocol, baseUrl, mqttHost, mqttPort, deviceTelemetryTopic, deviceCredentials); 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 { 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 hostName = getHost(baseUrl, properties);
String port = properties.getPort().isEmpty() ? "" : ":" + properties.getPort(); String port = properties.getPort().isEmpty() ? "" : ":" + properties.getPort();
return DeviceConnectivityUtil.getCoapPublishCommand(protocol, hostName, port, deviceCredentials); return DeviceConnectivityUtil.getCoapPublishCommand(protocol, hostName, port, deviceCredentials);
} }
private String getDockerCoapPublishCommand(String protocol, String baseUrl, DeviceCredentials deviceCredentials) throws URISyntaxException { 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 host = getHost(baseUrl, properties);
String port = properties.getPort().isEmpty() ? "" : ":" + properties.getPort(); String port = properties.getPort().isEmpty() ? "" : ":" + properties.getPort();
return DeviceConnectivityUtil.getDockerCoapPublishCommand(protocol, host, port, deviceCredentials); return DeviceConnectivityUtil.getDockerCoapPublishCommand(protocol, host, port, deviceCredentials);