Refactoring of packages
This commit is contained in:
parent
8c9a6c3e47
commit
67431a044a
@ -69,8 +69,8 @@
|
||||
<!--<artifactId>coap</artifactId>-->
|
||||
<!--</dependency>-->
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.transport</groupId>
|
||||
<artifactId>mqtt-common</artifactId>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>mqtt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
|
||||
@ -64,7 +64,6 @@ import org.thingsboard.server.service.encoding.DataDecodingEncodingService;
|
||||
import org.thingsboard.server.service.executors.DbCallbackExecutorService;
|
||||
import org.thingsboard.server.service.executors.ExternalCallExecutorService;
|
||||
import org.thingsboard.server.service.mail.MailExecutorService;
|
||||
import org.thingsboard.server.service.queue.MsgQueueService;
|
||||
import org.thingsboard.server.service.rpc.DeviceRpcService;
|
||||
import org.thingsboard.server.service.script.JsExecutorService;
|
||||
import org.thingsboard.server.service.script.JsInvokeService;
|
||||
|
||||
@ -417,7 +417,7 @@ js:
|
||||
max_errors: "${REMOTE_JS_SANDBOX_MAX_ERRORS:3}"
|
||||
|
||||
transport:
|
||||
type: "${TRANSPORT_TYPE:remote}" # local or remote
|
||||
type: "${TRANSPORT_TYPE:local}" # local or remote
|
||||
remote:
|
||||
transport_api:
|
||||
requests_topic: "${TB_TRANSPORT_API_REQUEST_TOPIC:tb.transport.api.requests}"
|
||||
@ -434,11 +434,12 @@ transport:
|
||||
topic: "${TB_TRANSPORT_NOTIFICATIONS_TOPIC:tb.transport.notifications}"
|
||||
# Local HTTP transport parameters
|
||||
http:
|
||||
enabled: "${MQTT_ENABLED:true}"
|
||||
request_timeout: "${HTTP_REQUEST_TIMEOUT:60000}"
|
||||
# Local MQTT transport parameters
|
||||
mqtt:
|
||||
# Enable/disable mqtt transport protocol.
|
||||
enabled: "${MQTT_ENABLED:false}"
|
||||
enabled: "${MQTT_ENABLED:true}"
|
||||
bind_address: "${MQTT_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${MQTT_BIND_PORT:1883}"
|
||||
adaptor: "${MQTT_ADAPTOR_NAME:JsonMqttAdaptor}"
|
||||
@ -465,7 +466,7 @@ transport:
|
||||
# Local CoAP transport parameters
|
||||
coap:
|
||||
# Enable/disable coap transport protocol.
|
||||
enabled: "${COAP_ENABLED:false}"
|
||||
enabled: "${COAP_ENABLED:true}"
|
||||
bind_address: "${COAP_BIND_ADDRESS:0.0.0.0}"
|
||||
bind_port: "${COAP_BIND_PORT:5683}"
|
||||
adaptor: "${COAP_ADAPTOR_NAME:JsonCoapAdaptor}"
|
||||
|
||||
@ -40,6 +40,10 @@
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>data</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.dao;
|
||||
package org.thingsboard.server.common.msg;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.bouncycastle.crypto.digests.SHA3Digest;
|
||||
@ -23,7 +23,6 @@
|
||||
<version>2.2.0-SNAPSHOT</version>
|
||||
<artifactId>thingsboard</artifactId>
|
||||
</parent>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
|
||||
@ -64,6 +64,10 @@
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Copyright © 2016-2018 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.kafka;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
/**
|
||||
* Created by ashvayka on 12.10.18.
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class TbNodeIdProvider {
|
||||
|
||||
@Getter
|
||||
@Value("${cluster.node_id:#{null}}")
|
||||
private String nodeId;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
if (StringUtils.isEmpty(nodeId)) {
|
||||
try {
|
||||
nodeId = InetAddress.getLocalHost().getHostName();
|
||||
} catch (UnknownHostException e) {
|
||||
nodeId = org.apache.commons.lang3.RandomStringUtils.randomAlphabetic(10);
|
||||
}
|
||||
}
|
||||
log.info("Current NodeId: {}", nodeId);
|
||||
}
|
||||
|
||||
}
|
||||
@ -19,12 +19,12 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<version>2.2.0-SNAPSHOT</version>
|
||||
<artifactId>transport</artifactId>
|
||||
</parent>
|
||||
<groupId>org.thingsboard.transport</groupId>
|
||||
<artifactId>mqtt-common</artifactId>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>mqtt</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Thingsboard MQTT Transport Common</name>
|
||||
@ -32,18 +32,22 @@
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<main.dir>${basedir}/../..</main.dir>
|
||||
<main.dir>${basedir}/../../..</main.dir>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>transport</artifactId>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>transport-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.netty</groupId>
|
||||
<artifactId>netty-all</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
@ -68,6 +72,12 @@
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.findbugs</groupId>
|
||||
<artifactId>jsr305</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
@ -23,12 +23,19 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||
import org.thingsboard.server.dao.EncryptionUtil;
|
||||
import org.thingsboard.server.dao.device.DeviceCredentialsService;
|
||||
import org.thingsboard.server.common.msg.EncryptionUtil;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.TransportServiceCallback;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||
import org.thingsboard.server.transport.mqtt.util.SslUtil;
|
||||
|
||||
import javax.net.ssl.*;
|
||||
import javax.net.ssl.KeyManager;
|
||||
import javax.net.ssl.KeyManagerFactory;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.SSLEngine;
|
||||
import javax.net.ssl.TrustManager;
|
||||
import javax.net.ssl.TrustManagerFactory;
|
||||
import javax.net.ssl.X509TrustManager;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
@ -37,6 +44,8 @@ import java.net.URL;
|
||||
import java.security.KeyStore;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Created by valerii.sosliuk on 11/6/16.
|
||||
@ -58,7 +67,7 @@ public class MqttSslHandlerProvider {
|
||||
private String keyStoreType;
|
||||
|
||||
@Autowired
|
||||
private DeviceCredentialsService deviceCredentialsService;
|
||||
private TransportService transportService;
|
||||
|
||||
public SslHandler getSslHandler() {
|
||||
try {
|
||||
@ -111,17 +120,17 @@ public class MqttSslHandlerProvider {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new ThingsboardMqttX509TrustManager(x509Tm, deviceCredentialsService);
|
||||
return new ThingsboardMqttX509TrustManager(x509Tm, transportService);
|
||||
}
|
||||
|
||||
static class ThingsboardMqttX509TrustManager implements X509TrustManager {
|
||||
|
||||
private final X509TrustManager trustManager;
|
||||
private DeviceCredentialsService deviceCredentialsService;
|
||||
private TransportService transportService;
|
||||
|
||||
ThingsboardMqttX509TrustManager(X509TrustManager trustManager, DeviceCredentialsService deviceCredentialsService) {
|
||||
ThingsboardMqttX509TrustManager(X509TrustManager trustManager, TransportService transportService) {
|
||||
this.trustManager = trustManager;
|
||||
this.deviceCredentialsService = deviceCredentialsService;
|
||||
this.transportService = transportService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -138,20 +147,39 @@ public class MqttSslHandlerProvider {
|
||||
@Override
|
||||
public void checkClientTrusted(X509Certificate[] chain,
|
||||
String authType) throws CertificateException {
|
||||
DeviceCredentials deviceCredentials = null;
|
||||
String credentialsBody = null;
|
||||
for (X509Certificate cert : chain) {
|
||||
try {
|
||||
String strCert = SslUtil.getX509CertificateString(cert);
|
||||
String sha3Hash = EncryptionUtil.getSha3Hash(strCert);
|
||||
deviceCredentials = deviceCredentialsService.findDeviceCredentialsByCredentialsId(sha3Hash);
|
||||
if (deviceCredentials != null && strCert.equals(deviceCredentials.getCredentialsValue())) {
|
||||
final String[] credentialsBodyHolder = new String[1];
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
transportService.process(TransportProtos.ValidateDeviceX509CertRequestMsg.newBuilder().setHash(sha3Hash).build(),
|
||||
new TransportServiceCallback<TransportProtos.ValidateDeviceCredentialsResponseMsg>() {
|
||||
@Override
|
||||
public void onSuccess(TransportProtos.ValidateDeviceCredentialsResponseMsg msg) {
|
||||
if (!StringUtils.isEmpty(msg.getCredentialsBody())) {
|
||||
credentialsBodyHolder[0] = msg.getCredentialsBody();
|
||||
}
|
||||
latch.countDown();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(Throwable e) {
|
||||
log.error(e.getMessage(), e);
|
||||
latch.countDown();
|
||||
}
|
||||
});
|
||||
latch.await(10, TimeUnit.SECONDS);
|
||||
if (strCert.equals(credentialsBodyHolder[0])) {
|
||||
credentialsBody = credentialsBodyHolder[0];
|
||||
break;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
} catch (InterruptedException | IOException e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
if (deviceCredentials == null) {
|
||||
if (credentialsBody == null) {
|
||||
throw new CertificateException("Invalid Device Certificate");
|
||||
}
|
||||
}
|
||||
@ -20,21 +20,17 @@ import io.netty.handler.ssl.SslHandler;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.quota.host.HostRequestsQuotaService;
|
||||
import org.thingsboard.server.kafka.TbNodeIdProvider;
|
||||
import org.thingsboard.server.transport.mqtt.adaptors.MqttTransportAdaptor;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
import java.net.InetAddress;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
@ -61,11 +57,12 @@ public class MqttTransportContext {
|
||||
@Autowired
|
||||
private MqttTransportAdaptor adaptor;
|
||||
|
||||
@Autowired
|
||||
private TbNodeIdProvider nodeIdProvider;
|
||||
|
||||
@Value("${transport.mqtt.netty.max_payload_size}")
|
||||
private Integer maxPayloadSize;
|
||||
|
||||
@Value("${cluster.node_id:#{null}}")
|
||||
private String nodeId;
|
||||
|
||||
private SslHandler sslHandler;
|
||||
|
||||
@ -74,14 +71,6 @@ public class MqttTransportContext {
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
if (StringUtils.isEmpty(nodeId)) {
|
||||
try {
|
||||
nodeId = InetAddress.getLocalHost().getHostName();
|
||||
} catch (UnknownHostException e) {
|
||||
nodeId = RandomStringUtils.randomAlphabetic(10);
|
||||
}
|
||||
}
|
||||
log.info("Current NodeId: {}", nodeId);
|
||||
executor = Executors.newCachedThreadPool();
|
||||
}
|
||||
|
||||
@ -92,4 +81,7 @@ public class MqttTransportContext {
|
||||
}
|
||||
}
|
||||
|
||||
public String getNodeId() {
|
||||
return nodeIdProvider.getNodeId();
|
||||
}
|
||||
}
|
||||
@ -43,7 +43,7 @@ import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.TransportServiceCallback;
|
||||
import org.thingsboard.server.common.transport.adaptor.AdaptorException;
|
||||
import org.thingsboard.server.common.transport.quota.QuotaService;
|
||||
import org.thingsboard.server.dao.EncryptionUtil;
|
||||
import org.thingsboard.server.common.msg.EncryptionUtil;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.DeviceInfoProto;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.SessionEvent;
|
||||
@ -21,13 +21,6 @@ import io.netty.channel.socket.SocketChannel;
|
||||
import io.netty.handler.codec.mqtt.MqttDecoder;
|
||||
import io.netty.handler.codec.mqtt.MqttEncoder;
|
||||
import io.netty.handler.ssl.SslHandler;
|
||||
import org.thingsboard.server.common.transport.SessionMsgProcessor;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.auth.DeviceAuthService;
|
||||
import org.thingsboard.server.common.transport.quota.QuotaService;
|
||||
import org.thingsboard.server.dao.device.DeviceService;
|
||||
import org.thingsboard.server.dao.relation.RelationService;
|
||||
import org.thingsboard.server.transport.mqtt.adaptors.MqttTransportAdaptor;
|
||||
|
||||
/**
|
||||
* @author Andrew Shvayka
|
||||
@ -23,19 +23,9 @@ import io.netty.channel.socket.nio.NioServerSocketChannel;
|
||||
import io.netty.util.ResourceLeakDetector;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.transport.SessionMsgProcessor;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
import org.thingsboard.server.common.transport.auth.DeviceAuthService;
|
||||
import org.thingsboard.server.common.transport.quota.host.HostRequestsQuotaService;
|
||||
import org.thingsboard.server.dao.device.DeviceService;
|
||||
import org.thingsboard.server.dao.relation.RelationService;
|
||||
import org.thingsboard.server.transport.mqtt.adaptors.MqttTransportAdaptor;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
@ -18,7 +18,6 @@ package org.thingsboard.server.transport.mqtt.adaptors;
|
||||
import io.netty.handler.codec.mqtt.MqttMessage;
|
||||
import io.netty.handler.codec.mqtt.MqttPublishMessage;
|
||||
import org.thingsboard.server.common.transport.adaptor.AdaptorException;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeRequestMsg;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.GetAttributeResponseMsg;
|
||||
@ -16,11 +16,8 @@
|
||||
package org.thingsboard.server.transport.mqtt.session;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
import io.netty.handler.codec.mqtt.MqttMessage;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.thingsboard.server.common.msg.session.ex.SessionException;
|
||||
import org.thingsboard.server.common.transport.adaptor.AdaptorException;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
@ -17,7 +17,7 @@ package org.thingsboard.server.transport.mqtt.util;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.util.Base64Utils;
|
||||
import org.thingsboard.server.dao.EncryptionUtil;
|
||||
import org.thingsboard.server.common.msg.EncryptionUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.cert.CertificateEncodingException;
|
||||
@ -25,85 +25,20 @@
|
||||
</parent>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>transport</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>Thingsboard Server Common Transport components</name>
|
||||
<name>Thingsboard Server Commons</name>
|
||||
<url>https://thingsboard.io</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<main.dir>${basedir}/../..</main.dir>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>data</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>message</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>log4j-over-slf4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.protobuf</groupId>
|
||||
<artifactId>protobuf-java</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.xolstice.maven.plugins</groupId>
|
||||
<artifactId>protobuf-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<modules>
|
||||
<module>transport-api</module>
|
||||
<module>mqtt</module>
|
||||
<!--module>http</module-->
|
||||
<!--module>coap</module-->
|
||||
</modules>
|
||||
|
||||
</project>
|
||||
|
||||
113
common/transport/transport-api/pom.xml
Normal file
113
common/transport/transport-api/pom.xml
Normal file
@ -0,0 +1,113 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2018 The Thingsboard Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<version>2.2.0-SNAPSHOT</version>
|
||||
<artifactId>transport</artifactId>
|
||||
</parent>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>transport-api</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>Thingsboard Server Common Transport components</name>
|
||||
<url>https://thingsboard.io</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<main.dir>${basedir}/../../..</main.dir>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>data</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>message</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>queue</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>log4j-over-slf4j</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-all</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.protobuf</groupId>
|
||||
<artifactId>protobuf-java</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.xolstice.maven.plugins</groupId>
|
||||
<artifactId>protobuf-maven-plugin</artifactId>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.mqtt.service;
|
||||
package org.thingsboard.server.common.transport.service;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.kafka.clients.consumer.ConsumerRecords;
|
||||
@ -21,6 +21,7 @@ import org.apache.kafka.clients.producer.Callback;
|
||||
import org.apache.kafka.clients.producer.RecordMetadata;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.transport.SessionMsgListener;
|
||||
import org.thingsboard.server.common.transport.TransportService;
|
||||
@ -44,7 +45,7 @@ import org.thingsboard.server.kafka.TBKafkaConsumerTemplate;
|
||||
import org.thingsboard.server.kafka.TBKafkaProducerTemplate;
|
||||
import org.thingsboard.server.kafka.TbKafkaRequestTemplate;
|
||||
import org.thingsboard.server.kafka.TbKafkaSettings;
|
||||
import org.thingsboard.server.transport.mqtt.MqttTransportContext;
|
||||
import org.thingsboard.server.kafka.TbNodeIdProvider;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.annotation.PreDestroy;
|
||||
@ -58,9 +59,10 @@ import java.util.concurrent.Executors;
|
||||
/**
|
||||
* Created by ashvayka on 05.10.18.
|
||||
*/
|
||||
@ConditionalOnProperty(prefix = "transport", value = "type", havingValue = "remote", matchIfMissing = true)
|
||||
@Service
|
||||
@Slf4j
|
||||
public class MqttTransportService implements TransportService {
|
||||
public class RemoteTransportService implements TransportService {
|
||||
|
||||
@Value("${kafka.rule_engine.topic}")
|
||||
private String ruleEngineTopic;
|
||||
@ -89,7 +91,7 @@ public class MqttTransportService implements TransportService {
|
||||
private TbKafkaSettings kafkaSettings;
|
||||
//We use this to get the node id. We should replace this with a component that provides the node id.
|
||||
@Autowired
|
||||
private MqttTransportContext transportContext;
|
||||
private TbNodeIdProvider nodeIdProvider;
|
||||
|
||||
private ExecutorService transportCallbackExecutor;
|
||||
|
||||
@ -112,8 +114,8 @@ public class MqttTransportService implements TransportService {
|
||||
|
||||
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<TransportApiResponseMsg> responseBuilder = TBKafkaConsumerTemplate.builder();
|
||||
responseBuilder.settings(kafkaSettings);
|
||||
responseBuilder.topic(transportApiResponsesTopic + "." + transportContext.getNodeId());
|
||||
responseBuilder.clientId("transport-api-client-" + transportContext.getNodeId());
|
||||
responseBuilder.topic(transportApiResponsesTopic + "." + nodeIdProvider.getNodeId());
|
||||
responseBuilder.clientId("transport-api-client-" + nodeIdProvider.getNodeId());
|
||||
responseBuilder.groupId("transport-api-client");
|
||||
responseBuilder.autoCommit(true);
|
||||
responseBuilder.autoCommitIntervalMs(autoCommitInterval);
|
||||
@ -138,8 +140,8 @@ public class MqttTransportService implements TransportService {
|
||||
|
||||
TBKafkaConsumerTemplate.TBKafkaConsumerTemplateBuilder<ToTransportMsg> mainConsumerBuilder = TBKafkaConsumerTemplate.builder();
|
||||
mainConsumerBuilder.settings(kafkaSettings);
|
||||
mainConsumerBuilder.topic(notificationsTopic + "." + transportContext.getNodeId());
|
||||
mainConsumerBuilder.clientId("transport-" + transportContext.getNodeId());
|
||||
mainConsumerBuilder.topic(notificationsTopic + "." + nodeIdProvider.getNodeId());
|
||||
mainConsumerBuilder.clientId("transport-" + nodeIdProvider.getNodeId());
|
||||
mainConsumerBuilder.groupId("transport");
|
||||
mainConsumerBuilder.autoCommit(true);
|
||||
mainConsumerBuilder.autoCommitIntervalMs(notificationsAutoCommitInterval);
|
||||
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.mqtt.service;
|
||||
package org.thingsboard.server.common.transport.service;
|
||||
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg;
|
||||
import org.thingsboard.server.kafka.TbKafkaEncoder;
|
||||
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.mqtt.service;
|
||||
package org.thingsboard.server.common.transport.service;
|
||||
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg;
|
||||
import org.thingsboard.server.kafka.TbKafkaDecoder;
|
||||
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.mqtt.service;
|
||||
package org.thingsboard.server.common.transport.service;
|
||||
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg;
|
||||
import org.thingsboard.server.kafka.TbKafkaEncoder;
|
||||
@ -13,7 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.mqtt.service;
|
||||
package org.thingsboard.server.common.transport.service;
|
||||
|
||||
import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg;
|
||||
import org.thingsboard.server.kafka.TbKafkaDecoder;
|
||||
@ -123,6 +123,7 @@ message ValidateDeviceX509CertRequestMsg {
|
||||
|
||||
message ValidateDeviceCredentialsResponseMsg {
|
||||
DeviceInfoProto deviceInfo = 1;
|
||||
string credentialsBody = 2;
|
||||
}
|
||||
|
||||
message GetOrCreateDeviceFromGatewayRequestMsg {
|
||||
@ -26,7 +26,7 @@ import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.id.DeviceId;
|
||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||
import org.thingsboard.server.common.data.security.DeviceCredentialsType;
|
||||
import org.thingsboard.server.dao.EncryptionUtil;
|
||||
import org.thingsboard.server.common.msg.EncryptionUtil;
|
||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||
import org.thingsboard.server.dao.service.DataValidator;
|
||||
|
||||
|
||||
15
pom.xml
15
pom.xml
@ -354,6 +354,16 @@
|
||||
<artifactId>transport</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>transport-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>mqtt</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.transport</groupId>
|
||||
<artifactId>http</artifactId>
|
||||
@ -364,11 +374,6 @@
|
||||
<artifactId>coap</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.transport</groupId>
|
||||
<artifactId>mqtt-common</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<artifactId>dao</artifactId>
|
||||
|
||||
@ -71,6 +71,10 @@
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-web</artifactId>
|
||||
|
||||
@ -25,7 +25,6 @@ import org.thingsboard.rule.engine.api.TbContext;
|
||||
import org.thingsboard.rule.engine.api.TbNode;
|
||||
import org.thingsboard.rule.engine.api.TbNodeConfiguration;
|
||||
import org.thingsboard.rule.engine.api.TbNodeException;
|
||||
import org.thingsboard.rule.engine.api.TbRelationTypes;
|
||||
import org.thingsboard.rule.engine.api.util.DonAsynchron;
|
||||
import org.thingsboard.rule.engine.api.util.TbNodeUtils;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
|
||||
@ -23,7 +23,6 @@ import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
import org.thingsboard.server.common.msg.core.*;
|
||||
import org.thingsboard.server.common.transport.SessionMsgProcessor;
|
||||
import org.thingsboard.server.common.transport.auth.DeviceAuthService;
|
||||
import org.thingsboard.server.common.transport.quota.host.HostRequestsQuotaService;
|
||||
|
||||
@ -15,22 +15,10 @@
|
||||
*/
|
||||
package org.thingsboard.server.transport.http.session;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
import org.thingsboard.server.common.msg.core.*;
|
||||
import org.thingsboard.server.common.msg.session.*;
|
||||
import org.thingsboard.server.common.msg.session.ex.SessionException;
|
||||
import org.thingsboard.server.common.transport.SessionMsgProcessor;
|
||||
import org.thingsboard.server.common.transport.adaptor.JsonConverter;
|
||||
import org.thingsboard.server.common.transport.auth.DeviceAuthService;
|
||||
import org.thingsboard.server.common.transport.session.DeviceAwareSessionContext;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @author Andrew Shvayka
|
||||
|
||||
@ -37,12 +37,8 @@
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
<artifactId>transport</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.transport</groupId>
|
||||
<artifactId>mqtt-common</artifactId>
|
||||
<groupId>org.thingsboard.common.transport</groupId>
|
||||
<artifactId>mqtt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.thingsboard.common</groupId>
|
||||
|
||||
@ -23,7 +23,6 @@
|
||||
<version>2.2.0-SNAPSHOT</version>
|
||||
<artifactId>thingsboard</artifactId>
|
||||
</parent>
|
||||
<groupId>org.thingsboard</groupId>
|
||||
<artifactId>transport</artifactId>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
@ -37,7 +36,6 @@
|
||||
<modules>
|
||||
<module>http</module>
|
||||
<!--<module>coap</module>-->
|
||||
<module>mqtt-common</module>
|
||||
<module>mqtt-transport</module>
|
||||
</modules>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user