update coaps connectivity commands with downloading certificates
This commit is contained in:
parent
643b2f5c92
commit
b758a1c7d0
@ -1419,6 +1419,8 @@ device:
|
|||||||
host: "${DEVICE_CONNECTIVITY_COAPS_HOST:}"
|
host: "${DEVICE_CONNECTIVITY_COAPS_HOST:}"
|
||||||
# Port of coap transport service. If empty, the default port for coaps will be used.
|
# Port of coap transport service. If empty, the default port for coaps will be used.
|
||||||
port: "${DEVICE_CONNECTIVITY_COAPS_PORT:5684}"
|
port: "${DEVICE_CONNECTIVITY_COAPS_PORT:5684}"
|
||||||
|
# Path to the COAP CA root certificate file
|
||||||
|
pem_cert_file: "${DEVICE_CONNECTIVITY_COAPS_CA_ROOT_CERT:cafile.pem}"
|
||||||
|
|
||||||
# Edges parameters
|
# Edges parameters
|
||||||
edges:
|
edges:
|
||||||
|
|||||||
@ -231,16 +231,19 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
credentials.getCredentialsId()));
|
credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode linuxCoapCommands = commands.get(COAP);
|
JsonNode linuxCoapCommands = commands.get(COAP);
|
||||||
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://localhost:5683/api/v1/%s/telemetry " +
|
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST " +
|
||||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"-t \"application/json\" -e \"{temperature:25}\" coap://localhost:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://localhost:5684/api/v1/%s/telemetry" +
|
|
||||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(linuxCoapCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST " +
|
||||||
|
"-R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://localhost:5684/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
||||||
" thingsboard/coap-clients coap-client -v 6 -m POST coap://host.docker.internal:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://host.docker.internal:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
||||||
" thingsboard/coap-clients coap-client-openssl -v 6 -m POST coaps://host.docker.internal:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients " +
|
||||||
|
"/bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download && " +
|
||||||
|
"coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://host.docker.internal:5684/api/v1/%s/telemetry\"", credentials.getCredentialsId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -376,16 +379,19 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
credentials.getCredentialsId()));
|
credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode linuxCoapCommands = commands.get(COAP);
|
JsonNode linuxCoapCommands = commands.get(COAP);
|
||||||
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://[::1]:5683/api/v1/%s/telemetry " +
|
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST " +
|
||||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"-t \"application/json\" -e \"{temperature:25}\" coap://[::1]:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://[::1]:5684/api/v1/%s/telemetry" +
|
assertThat(linuxCoapCommands.get(COAPS).get(0).asText()).isEqualTo("curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download");
|
||||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(linuxCoapCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST " +
|
||||||
|
"-R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://[::1]:5684/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
||||||
" thingsboard/coap-clients coap-client -v 6 -m POST coap://host.docker.internal:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://host.docker.internal:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
||||||
" thingsboard/coap-clients coap-client-openssl -v 6 -m POST coaps://host.docker.internal:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients " +
|
||||||
|
"/bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download && " +
|
||||||
|
"coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://host.docker.internal:5684/api/v1/%s/telemetry\"", credentials.getCredentialsId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -430,16 +436,19 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
credentials.getCredentialsId()));
|
credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode linuxCoapCommands = commands.get(COAP);
|
JsonNode linuxCoapCommands = commands.get(COAP);
|
||||||
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://[1:1:1:1:1:1:1:1]:5683/api/v1/%s/telemetry " +
|
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST " +
|
||||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"-t \"application/json\" -e \"{temperature:25}\" coap://[1:1:1:1:1:1:1:1]:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://[1:1:1:1:1:1:1:1]:5684/api/v1/%s/telemetry" +
|
assertThat(linuxCoapCommands.get(COAPS).get(0).asText()).isEqualTo("curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download");
|
||||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(linuxCoapCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM +
|
||||||
|
" -t \"application/json\" -e \"{temperature:25}\" coaps://[1:1:1:1:1:1:1:1]:5684/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it" +
|
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it" +
|
||||||
" thingsboard/coap-clients coap-client -v 6 -m POST coap://[1:1:1:1:1:1:1:1]:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://[1:1:1:1:1:1:1:1]:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it" +
|
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it" +
|
||||||
" thingsboard/coap-clients coap-client-openssl -v 6 -m POST coaps://[1:1:1:1:1:1:1:1]:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients " +
|
||||||
|
"/bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download && " +
|
||||||
|
"coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://[1:1:1:1:1:1:1:1]:5684/api/v1/%s/telemetry\"", credentials.getCredentialsId()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -552,9 +561,10 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
assertThat(commands).hasSize(1);
|
assertThat(commands).hasSize(1);
|
||||||
|
|
||||||
JsonNode linuxCommands = commands.get(COAP);
|
JsonNode linuxCommands = commands.get(COAP);
|
||||||
assertThat(linuxCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://localhost:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"",
|
assertThat(linuxCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://localhost:5683/api/v1/%s/telemetry",
|
||||||
credentials.getCredentialsId()));
|
credentials.getCredentialsId()));
|
||||||
assertThat(linuxCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://localhost:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"",
|
assertThat(linuxCommands.get(COAPS).get(0).asText()).isEqualTo("curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download");
|
||||||
|
assertThat(linuxCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://localhost:5684/api/v1/%s/telemetry",
|
||||||
credentials.getCredentialsId()));
|
credentials.getCredentialsId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -772,16 +782,18 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
"mosquitto_pub -d -q 1 --cafile " + CA_ROOT_CERT_PEM + " -h host.docker.internal -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"\"", credentials.getCredentialsId()));
|
"mosquitto_pub -d -q 1 --cafile " + CA_ROOT_CERT_PEM + " -h host.docker.internal -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"\"", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode linuxCoapCommands = commands.get(COAP);
|
JsonNode linuxCoapCommands = commands.get(COAP);
|
||||||
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://localhost/api/v1/%s/telemetry " +
|
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST " +
|
||||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"-t \"application/json\" -e \"{temperature:25}\" coap://localhost/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://localhost/api/v1/%s/telemetry" +
|
assertThat(linuxCoapCommands.get(COAPS).get(0).asText()).isEqualTo("curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download");
|
||||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(linuxCoapCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST " +
|
||||||
|
"-R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://localhost/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
||||||
" thingsboard/coap-clients coap-client -v 6 -m POST coap://host.docker.internal/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://host.docker.internal/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway" +
|
||||||
" thingsboard/coap-clients coap-client-openssl -v 6 -m POST coaps://host.docker.internal/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
" thingsboard/coap-clients /bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download && " +
|
||||||
|
"coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://host.docker.internal/api/v1/%s/telemetry\"", credentials.getCredentialsId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -831,16 +843,18 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
credentials.getCredentialsId()));
|
credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode linuxCoapCommands = commands.get(COAP);
|
JsonNode linuxCoapCommands = commands.get(COAP);
|
||||||
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://test.domain:5683/api/v1/%s/telemetry " +
|
assertThat(linuxCoapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST " +
|
||||||
"-t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"-t \"application/json\" -e \"{temperature:25}\" coap://test.domain:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(linuxCoapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://test.domain:5684/api/v1/%s/telemetry" +
|
assertThat(linuxCoapCommands.get(COAPS).get(0).asText()).isEqualTo("curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download");
|
||||||
" -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(linuxCoapCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST " +
|
||||||
|
"-R "+ CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://test.domain:5684/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
JsonNode dockerCoapCommands = commands.get(COAP).get(DOCKER);
|
||||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it " +
|
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it " +
|
||||||
"thingsboard/coap-clients coap-client -v 6 -m POST coap://test.domain:5683/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"thingsboard/coap-clients coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://test.domain:5683/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it " +
|
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it " +
|
||||||
"thingsboard/coap-clients coap-client-openssl -v 6 -m POST coaps://test.domain:5684/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"thingsboard/coap-clients /bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download && " +
|
||||||
|
"coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://test.domain:5684/api/v1/%s/telemetry\"", credentials.getCredentialsId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -917,12 +931,17 @@ public class DeviceConnectivityControllerTest extends AbstractControllerTest {
|
|||||||
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway thingsboard/mosquitto-clients /bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/mqtts/certificate/download && mosquitto_pub -d -q 1 --cafile " + CA_ROOT_CERT_PEM + " -h host.docker.internal -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"\"", credentials.getCredentialsId()));
|
assertThat(dockerMqttCommands.get(MQTTS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway thingsboard/mosquitto-clients /bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/mqtts/certificate/download && mosquitto_pub -d -q 1 --cafile " + CA_ROOT_CERT_PEM + " -h host.docker.internal -t v1/devices/me/telemetry -u \"%s\" -m \"{temperature:25}\"\"", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode coapCommands = commands.get(COAP);
|
JsonNode coapCommands = commands.get(COAP);
|
||||||
assertThat(coapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST coap://localhost/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(coapCommands.get(COAP).asText()).isEqualTo(String.format("coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://localhost/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
assertThat(coapCommands.get(COAPS).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST coaps://localhost/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(coapCommands.get(COAPS).get(0).asText()).isEqualTo("curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download");
|
||||||
|
assertThat(coapCommands.get(COAPS).get(1).asText()).isEqualTo(String.format("coap-client-openssl -v 6 -m POST " +
|
||||||
|
"-R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://localhost/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
|
||||||
JsonNode dockerCoapCommands = coapCommands.get(DOCKER);
|
JsonNode dockerCoapCommands = coapCommands.get(DOCKER);
|
||||||
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway thingsboard/coap-clients coap-client -v 6 -m POST coap://host.docker.internal/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
assertThat(dockerCoapCommands.get(COAP).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway " +
|
||||||
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway thingsboard/coap-clients coap-client-openssl -v 6 -m POST coaps://host.docker.internal/api/v1/%s/telemetry -t json -e \"{temperature:25}\"", credentials.getCredentialsId()));
|
"thingsboard/coap-clients coap-client -v 6 -m POST -t \"application/json\" -e \"{temperature:25}\" coap://host.docker.internal/api/v1/%s/telemetry", credentials.getCredentialsId()));
|
||||||
|
assertThat(dockerCoapCommands.get(COAPS).asText()).isEqualTo(String.format("docker run --rm -it --add-host=host.docker.internal:host-gateway " +
|
||||||
|
"thingsboard/coap-clients /bin/sh -c \"curl -f -S -o " + CA_ROOT_CERT_PEM + " http://localhost:80/api/device-connectivity/coaps/certificate/download && " +
|
||||||
|
"coap-client-openssl -v 6 -m POST -R " + CA_ROOT_CERT_PEM + " -t \"application/json\" -e \"{temperature:25}\" coaps://host.docker.internal/api/v1/%s/telemetry\"", credentials.getCredentialsId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,7 @@ import org.thingsboard.server.common.data.security.DeviceCredentialsType;
|
|||||||
import org.thingsboard.server.dao.settings.AdminSettingsService;
|
import org.thingsboard.server.dao.settings.AdminSettingsService;
|
||||||
import org.thingsboard.server.dao.util.DeviceConnectivityUtil;
|
import org.thingsboard.server.dao.util.DeviceConnectivityUtil;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
@ -83,6 +84,8 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
|
|||||||
|
|
||||||
@Value("${device.connectivity.mqtts.pem_cert_file:}")
|
@Value("${device.connectivity.mqtts.pem_cert_file:}")
|
||||||
private String mqttsPemCertFile;
|
private String mqttsPemCertFile;
|
||||||
|
@Value("${device.connectivity.coaps.pem_cert_file:}")
|
||||||
|
private String coapsPemCertFile;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JsonNode findDevicePublishTelemetryCommands(String baseUrl, Device device) throws URISyntaxException {
|
public JsonNode findDevicePublishTelemetryCommands(String baseUrl, Device device) throws URISyntaxException {
|
||||||
@ -133,22 +136,19 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
|
|||||||
public Resource getPemCertFile(String protocol) {
|
public Resource getPemCertFile(String protocol) {
|
||||||
return certs.computeIfAbsent(protocol, key -> {
|
return certs.computeIfAbsent(protocol, key -> {
|
||||||
DeviceConnectivityInfo connectivity = getConnectivity(protocol);
|
DeviceConnectivityInfo connectivity = getConnectivity(protocol);
|
||||||
if (!MQTTS.equals(protocol) || connectivity == null) {
|
if (connectivity == null) {
|
||||||
log.warn("Unknown connectivity protocol: {}", protocol);
|
log.warn("Unknown connectivity protocol: {}", protocol);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(mqttsPemCertFile) && ResourceUtils.resourceExists(this, mqttsPemCertFile)) {
|
return switch (protocol) {
|
||||||
try {
|
case COAPS -> getCert(coapsPemCertFile);
|
||||||
return getCert(mqttsPemCertFile);
|
case MQTTS -> getCert(mqttsPemCertFile);
|
||||||
} catch (Exception e) {
|
default -> {
|
||||||
String msg = String.format("Failed to read %s server certificate!", protocol);
|
log.warn("Unsupported secure protocol: {}", protocol);
|
||||||
log.warn(msg);
|
yield null;
|
||||||
throw new RuntimeException(msg, e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +174,11 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
|
|||||||
return info != null && info.isEnabled();
|
return info != null && info.isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Resource getCert(String path) throws Exception {
|
private Resource getCert(String path) {
|
||||||
|
if (StringUtils.isBlank(path) || !ResourceUtils.resourceExists(this, path)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
StringBuilder pemContentBuilder = new StringBuilder();
|
StringBuilder pemContentBuilder = new StringBuilder();
|
||||||
|
|
||||||
try (InputStream inStream = ResourceUtils.getInputStream(this, path);
|
try (InputStream inStream = ResourceUtils.getInputStream(this, path);
|
||||||
@ -197,6 +201,10 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
|
|||||||
pemContentBuilder.append("-----END CERTIFICATE-----\n");
|
pemContentBuilder.append("-----END CERTIFICATE-----\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
String msg = String.format("Failed to read %s server certificate!", path);
|
||||||
|
log.warn(msg);
|
||||||
|
throw new RuntimeException(msg, e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ByteArrayResource(pemContentBuilder.toString().getBytes(StandardCharsets.UTF_8));
|
return new ByteArrayResource(pemContentBuilder.toString().getBytes(StandardCharsets.UTF_8));
|
||||||
@ -311,8 +319,11 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isEnabled(COAPS)) {
|
if (isEnabled(COAPS)) {
|
||||||
|
ArrayNode coapsCommands = coapCommands.putArray(COAPS);
|
||||||
|
Optional.ofNullable(DeviceConnectivityUtil.getCurlPemCertCommand(baseUrl, COAPS))
|
||||||
|
.ifPresent(coapsCommands::add);
|
||||||
Optional.ofNullable(getCoapPublishCommand(COAPS, baseUrl, deviceCredentials))
|
Optional.ofNullable(getCoapPublishCommand(COAPS, baseUrl, deviceCredentials))
|
||||||
.ifPresent(v -> coapCommands.put(COAPS, v));
|
.ifPresent(coapsCommands::add);
|
||||||
|
|
||||||
Optional.ofNullable(getDockerCoapPublishCommand(COAPS, baseUrl, deviceCredentials))
|
Optional.ofNullable(getDockerCoapPublishCommand(COAPS, baseUrl, deviceCredentials))
|
||||||
.ifPresent(v -> dockerCoapCommands.put(COAPS, v));
|
.ifPresent(v -> dockerCoapCommands.put(COAPS, v));
|
||||||
@ -336,7 +347,7 @@ public class DeviceConnectivityServiceImpl implements DeviceConnectivityService
|
|||||||
DeviceConnectivityInfo properties = getConnectivity(protocol);
|
DeviceConnectivityInfo properties = getConnectivity(protocol);
|
||||||
String host = getHost(baseUrl, properties, protocol);
|
String host = getHost(baseUrl, properties, protocol);
|
||||||
String port = StringUtils.isBlank(properties.getPort()) ? "" : ":" + properties.getPort();
|
String port = StringUtils.isBlank(properties.getPort()) ? "" : ":" + properties.getPort();
|
||||||
return DeviceConnectivityUtil.getDockerCoapPublishCommand(protocol, host, port, deviceCredentials);
|
return DeviceConnectivityUtil.getDockerCoapPublishCommand(protocol, baseUrl, host, port, deviceCredentials);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -199,19 +199,39 @@ public class DeviceConnectivityUtil {
|
|||||||
switch (deviceCredentials.getCredentialsType()) {
|
switch (deviceCredentials.getCredentialsType()) {
|
||||||
case ACCESS_TOKEN:
|
case ACCESS_TOKEN:
|
||||||
String client = COAPS.equals(protocol) ? "coap-client-openssl" : "coap-client";
|
String client = COAPS.equals(protocol) ? "coap-client-openssl" : "coap-client";
|
||||||
return String.format("%s -v 6 -m POST %s://%s%s/api/v1/%s/telemetry -t json -e %s",
|
String certificate = COAPS.equals(protocol) ? " -R " + CA_ROOT_CERT_PEM : "";
|
||||||
client, protocol, host, port, deviceCredentials.getCredentialsId(), JSON_EXAMPLE_PAYLOAD);
|
return String.format("%s -v 6 -m POST%s -t \"application/json\" -e %s %s://%s%s/api/v1/%s/telemetry",
|
||||||
|
client, certificate, JSON_EXAMPLE_PAYLOAD, protocol, host, port, deviceCredentials.getCredentialsId());
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getDockerCoapPublishCommand(String protocol, String host, String port, DeviceCredentials deviceCredentials) {
|
public static String getDockerCoapPublishCommand(String protocol, String baseUrl, String host, String port, DeviceCredentials deviceCredentials) {
|
||||||
String coapCommand = getCoapPublishCommand(protocol, host, port, deviceCredentials);
|
String coapCommand = getCoapPublishCommand(protocol, host, port, deviceCredentials);
|
||||||
if (coapCommand != null && isLocalhost(host)) {
|
|
||||||
|
if (coapCommand == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuilder mqttDockerCommand = new StringBuilder();
|
||||||
|
mqttDockerCommand.append(DOCKER_RUN).append(isLocalhost(host) ? ADD_DOCKER_INTERNAL_HOST : "").append(COAP_IMAGE);
|
||||||
|
|
||||||
|
if (isLocalhost(host)) {
|
||||||
coapCommand = coapCommand.replace(host, HOST_DOCKER_INTERNAL);
|
coapCommand = coapCommand.replace(host, HOST_DOCKER_INTERNAL);
|
||||||
}
|
}
|
||||||
return coapCommand != null ? String.format("%s%s%s", DOCKER_RUN + (isLocalhost(host) ? ADD_DOCKER_INTERNAL_HOST : ""), COAP_IMAGE, coapCommand) : null;
|
|
||||||
|
if (COAPS.equals(protocol)) {
|
||||||
|
mqttDockerCommand.append("/bin/sh -c \"")
|
||||||
|
.append(getCurlPemCertCommand(baseUrl, protocol))
|
||||||
|
.append(" && ")
|
||||||
|
.append(coapCommand)
|
||||||
|
.append("\"");
|
||||||
|
} else {
|
||||||
|
mqttDockerCommand.append(coapCommand);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mqttDockerCommand.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getHost(String baseUrl, DeviceConnectivityInfo properties, String protocol) throws URISyntaxException {
|
public static String getHost(String baseUrl, DeviceConnectivityInfo properties, String protocol) throws URISyntaxException {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user