Transport Type check
This commit is contained in:
parent
d440d500e5
commit
b9b82446eb
@ -24,6 +24,7 @@ import org.eclipse.californium.core.network.ExchangeObserver;
|
||||
import org.eclipse.californium.core.server.resources.CoapExchange;
|
||||
import org.eclipse.californium.core.server.resources.Resource;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.data.security.DeviceTokenCredentials;
|
||||
import org.thingsboard.server.common.msg.session.FeatureType;
|
||||
import org.thingsboard.server.common.msg.session.SessionMsgType;
|
||||
@ -145,7 +146,7 @@ public class CoapTransportResource extends CoapResource {
|
||||
return;
|
||||
}
|
||||
|
||||
transportService.process(TransportProtos.ValidateDeviceTokenRequestMsg.newBuilder().setToken(credentials.get().getCredentialsId()).build(),
|
||||
transportService.process(DeviceTransportType.DEFAULT, TransportProtos.ValidateDeviceTokenRequestMsg.newBuilder().setToken(credentials.get().getCredentialsId()).build(),
|
||||
new DeviceAuthCallback(transportContext, exchange, sessionInfo -> {
|
||||
UUID sessionId = new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB());
|
||||
try {
|
||||
|
||||
@ -30,6 +30,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.data.id.DeviceId;
|
||||
import org.thingsboard.server.common.transport.SessionMsgListener;
|
||||
import org.thingsboard.server.common.transport.TransportContext;
|
||||
@ -78,7 +79,7 @@ public class DeviceApiController {
|
||||
@RequestParam(value = "sharedKeys", required = false, defaultValue = "") String sharedKeys,
|
||||
HttpServletRequest httpRequest) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
GetAttributeRequestMsg.Builder request = GetAttributeRequestMsg.newBuilder().setRequestId(0);
|
||||
List<String> clientKeySet = !StringUtils.isEmpty(clientKeys) ? Arrays.asList(clientKeys.split(",")) : null;
|
||||
@ -100,7 +101,7 @@ public class DeviceApiController {
|
||||
public DeferredResult<ResponseEntity> postDeviceAttributes(@PathVariable("deviceToken") String deviceToken,
|
||||
@RequestBody String json, HttpServletRequest request) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
transportService.process(sessionInfo, JsonConverter.convertToAttributesProto(new JsonParser().parse(json)),
|
||||
@ -114,7 +115,7 @@ public class DeviceApiController {
|
||||
public DeferredResult<ResponseEntity> postTelemetry(@PathVariable("deviceToken") String deviceToken,
|
||||
@RequestBody String json, HttpServletRequest request) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
transportService.process(sessionInfo, JsonConverter.convertToTelemetryProto(new JsonParser().parse(json)),
|
||||
@ -128,7 +129,7 @@ public class DeviceApiController {
|
||||
public DeferredResult<ResponseEntity> claimDevice(@PathVariable("deviceToken") String deviceToken,
|
||||
@RequestBody(required = false) String json, HttpServletRequest request) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
DeviceId deviceId = new DeviceId(new UUID(sessionInfo.getDeviceIdMSB(), sessionInfo.getDeviceIdLSB()));
|
||||
@ -143,7 +144,7 @@ public class DeviceApiController {
|
||||
@RequestParam(value = "timeout", required = false, defaultValue = "0") long timeout,
|
||||
HttpServletRequest httpRequest) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
transportService.registerSyncSession(sessionInfo, new HttpSessionListener(responseWriter),
|
||||
@ -160,7 +161,7 @@ public class DeviceApiController {
|
||||
@PathVariable("requestId") Integer requestId,
|
||||
@RequestBody String json, HttpServletRequest request) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
transportService.process(sessionInfo, ToDeviceRpcResponseMsg.newBuilder().setRequestId(requestId).setPayload(json).build(), new HttpOkCallback(responseWriter));
|
||||
@ -172,7 +173,7 @@ public class DeviceApiController {
|
||||
public DeferredResult<ResponseEntity> postRpcRequest(@PathVariable("deviceToken") String deviceToken,
|
||||
@RequestBody String json, HttpServletRequest httpRequest) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<ResponseEntity>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
JsonObject request = new JsonParser().parse(json).getAsJsonObject();
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
@ -190,7 +191,7 @@ public class DeviceApiController {
|
||||
@RequestParam(value = "timeout", required = false, defaultValue = "0") long timeout,
|
||||
HttpServletRequest httpRequest) {
|
||||
DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>();
|
||||
transportContext.getTransportService().process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(),
|
||||
new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> {
|
||||
TransportService transportService = transportContext.getTransportService();
|
||||
transportService.registerSyncSession(sessionInfo, new HttpSessionListener(responseWriter),
|
||||
|
||||
@ -24,6 +24,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.msg.EncryptionUtil;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.TransportServiceCallback;
|
||||
@ -157,7 +158,7 @@ public class MqttSslHandlerProvider {
|
||||
String sha3Hash = EncryptionUtil.getSha3Hash(strCert);
|
||||
final String[] credentialsBodyHolder = new String[1];
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
transportService.process(TransportProtos.ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
|
||||
transportService.process(DeviceTransportType.MQTT, TransportProtos.ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
|
||||
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
||||
@Override
|
||||
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
||||
|
||||
@ -39,6 +39,7 @@ import io.netty.util.concurrent.Future;
|
||||
import io.netty.util.concurrent.GenericFutureListener;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.data.device.profile.MqttTopics;
|
||||
import org.thingsboard.server.common.msg.EncryptionUtil;
|
||||
import org.thingsboard.server.common.transport.SessionMsgListener;
|
||||
@ -366,7 +367,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
||||
ctx.writeAndFlush(createMqttConnAckMsg(CONNECTION_REFUSED_BAD_USER_NAME_OR_PASSWORD));
|
||||
ctx.close();
|
||||
} else {
|
||||
transportService.process(ValidateDeviceTokenRequestMsg.newBuilder().setToken(userName).build(),
|
||||
transportService.process(DeviceTransportType.MQTT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(userName).build(),
|
||||
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
||||
@Override
|
||||
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
||||
@ -387,7 +388,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement
|
||||
try {
|
||||
String strCert = SslUtil.getX509CertificateString(cert);
|
||||
String sha3Hash = EncryptionUtil.getSha3Hash(strCert);
|
||||
transportService.process(ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
|
||||
transportService.process(DeviceTransportType.MQTT, ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
|
||||
new TransportServiceCallback<ValidateDeviceCredentialsResponse>() {
|
||||
@Override
|
||||
public void onSuccess(ValidateDeviceCredentialsResponse msg) {
|
||||
|
||||
@ -16,6 +16,7 @@
|
||||
package org.thingsboard.server.common.transport;
|
||||
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||
import org.thingsboard.server.common.transport.auth.GetOrCreateDeviceFromGatewayResponse;
|
||||
import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse;
|
||||
@ -45,10 +46,10 @@ public interface TransportService {
|
||||
|
||||
GetTenantRoutingInfoResponseMsg getRoutingInfo(GetTenantRoutingInfoRequestMsg msg);
|
||||
|
||||
void process(ValidateDeviceTokenRequestMsg msg,
|
||||
void process(DeviceTransportType transportType, ValidateDeviceTokenRequestMsg msg,
|
||||
TransportServiceCallback<ValidateDeviceCredentialsResponse> callback);
|
||||
|
||||
void process(ValidateDeviceX509CertRequestMsg msg,
|
||||
void process(DeviceTransportType transportType, ValidateDeviceX509CertRequestMsg msg,
|
||||
TransportServiceCallback<ValidateDeviceCredentialsResponse> callback);
|
||||
|
||||
void process(GetOrCreateDeviceFromGatewayRequestMsg msg,
|
||||
|
||||
@ -27,6 +27,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.common.util.ThingsBoardThreadFactory;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.DeviceTransportType;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.id.DeviceId;
|
||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||
@ -252,20 +253,20 @@ public class DefaultTransportService implements TransportService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(TransportProtos.ValidateDeviceTokenRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
|
||||
public void process(DeviceTransportType transportType, TransportProtos.ValidateDeviceTokenRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
|
||||
log.trace("Processing msg: {}", msg);
|
||||
TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setValidateTokenRequestMsg(msg).build());
|
||||
doProcess(protoMsg, callback);
|
||||
doProcess(transportType, protoMsg, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(TransportProtos.ValidateDeviceX509CertRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
|
||||
public void process(DeviceTransportType transportType, TransportProtos.ValidateDeviceX509CertRequestMsg msg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
|
||||
log.trace("Processing msg: {}", msg);
|
||||
TbProtoQueueMsg<TransportApiRequestMsg> protoMsg = new TbProtoQueueMsg<>(UUID.randomUUID(), TransportApiRequestMsg.newBuilder().setValidateX509CertRequestMsg(msg).build());
|
||||
doProcess(protoMsg, callback);
|
||||
doProcess(transportType, protoMsg, callback);
|
||||
}
|
||||
|
||||
private void doProcess(TbProtoQueueMsg<TransportApiRequestMsg> protoMsg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
|
||||
private void doProcess(DeviceTransportType transportType, TbProtoQueueMsg<TransportApiRequestMsg> protoMsg, TransportServiceCallback<ValidateDeviceCredentialsResponse> callback) {
|
||||
ListenableFuture<ValidateDeviceCredentialsResponse> response = Futures.transform(transportApiRequestTemplate.send(protoMsg), tmp -> {
|
||||
TransportProtos.ValidateDeviceCredentialsResponseMsg msg = tmp.getValue().getValidateTokenResponseMsg();
|
||||
ValidateDeviceCredentialsResponse.ValidateDeviceCredentialsResponseBuilder result = ValidateDeviceCredentialsResponse.builder();
|
||||
@ -283,6 +284,11 @@ public class DefaultTransportService implements TransportService {
|
||||
deviceProfiles.put(tdi.getDeviceProfileId(), profile);
|
||||
}
|
||||
}
|
||||
if (transportType != DeviceTransportType.DEFAULT
|
||||
&& profile != null && profile.getTransportType() != DeviceTransportType.DEFAULT && profile.getTransportType() != transportType) {
|
||||
log.debug("[{}] Device profile [{}] has different transport type: {}, expected: {}", tdi.getDeviceId(), tdi.getDeviceProfileId(), profile.getTransportType(), transportType);
|
||||
throw new IllegalStateException("Device profile has different transport type: " + profile.getTransportType() + ". Expected: " + transportType);
|
||||
}
|
||||
result.deviceProfile(profile);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user