Browse Source

Refactor

pull/5023/head
Viacheslav Klimov 5 years ago
parent
commit
b84b505d9b
  1. 74
      application/src/main/java/org/thingsboard/server/service/device/DeviceBulkImportService.java
  2. 13
      application/src/main/java/org/thingsboard/server/service/importing/BulkImportColumnType.java
  3. 9
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java

74
application/src/main/java/org/thingsboard/server/service/device/DeviceBulkImportService.java

@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.node.TextNode;
import lombok.SneakyThrows;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.cluster.TbClusterService;
@ -54,6 +55,7 @@ import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.permission.AccessControlService;
import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Map;
import java.util.Optional;
@ -150,57 +152,25 @@ public class DeviceBulkImportService extends AbstractBulkImportService<Device> {
DeviceCredentials credentials = new DeviceCredentials();
if (columns.contains(BulkImportColumnType.ACCESS_TOKEN)) {
credentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
credentials.setCredentialsId(fields.get(BulkImportColumnType.ACCESS_TOKEN));
} else if (CollectionUtils.containsAny(columns, EnumSet.of(BulkImportColumnType.MQTT_CLIENT_ID, BulkImportColumnType.MQTT_USER_NAME, BulkImportColumnType.MQTT_PASSWORD))) {
credentials.setCredentialsType(DeviceCredentialsType.MQTT_BASIC);
BasicMqttCredentials basicMqttCredentials = new BasicMqttCredentials();
basicMqttCredentials.setClientId(fields.get(BulkImportColumnType.MQTT_CLIENT_ID));
basicMqttCredentials.setUserName(fields.get(BulkImportColumnType.MQTT_USER_NAME));
basicMqttCredentials.setPassword(fields.get(BulkImportColumnType.MQTT_PASSWORD));
credentials.setCredentialsValue(JacksonUtil.toString(basicMqttCredentials));
} else if (columns.contains(BulkImportColumnType.X509)) {
credentials.setCredentialsType(DeviceCredentialsType.X509_CERTIFICATE);
credentials.setCredentialsValue(fields.get(BulkImportColumnType.X509));
} else if (columns.contains(BulkImportColumnType.LWM2M_CLIENT_ENDPOINT)) {
if (columns.contains(BulkImportColumnType.LWM2M_CLIENT_ENDPOINT)) {
credentials.setCredentialsType(DeviceCredentialsType.LWM2M_CREDENTIALS);
ObjectNode lwm2mCredentials = JacksonUtil.newObjectNode();
ObjectNode client = JacksonUtil.newObjectNode();
Stream.of(BulkImportColumnType.LWM2M_CLIENT_ENDPOINT, BulkImportColumnType.LWM2M_CLIENT_SECURITY_CONFIG_MODE,
BulkImportColumnType.LWM2M_CLIENT_IDENTITY, BulkImportColumnType.LWM2M_CLIENT_KEY, BulkImportColumnType.LWM2M_CLIENT_CERT)
.forEach(lwm2mClientProperty -> {
String value = fields.get(lwm2mClientProperty);
if (value != null) {
client.set(lwm2mClientProperty.getKey(), new TextNode(value));
}
});
setValues(client, fields, Set.of(BulkImportColumnType.LWM2M_CLIENT_SECURITY_CONFIG_MODE,
BulkImportColumnType.LWM2M_CLIENT_ENDPOINT, BulkImportColumnType.LWM2M_CLIENT_IDENTITY,
BulkImportColumnType.LWM2M_CLIENT_KEY, BulkImportColumnType.LWM2M_CLIENT_CERT));
LwM2MClientCredentials lwM2MClientCredentials = JacksonUtil.treeToValue(client, LwM2MClientCredentials.class);
// so that only fields needed for specific type of lwM2MClientCredentials were saved in json
lwm2mCredentials.set("client", JacksonUtil.valueToTree(lwM2MClientCredentials));
ObjectNode bootstrapServer = JacksonUtil.newObjectNode();
Stream.of(BulkImportColumnType.LWM2M_BOOTSTRAP_SERVER_SECURITY_MODE, BulkImportColumnType.LWM2M_BOOTSTRAP_SERVER_PUBLIC_KEY_OR_ID,
BulkImportColumnType.LWM2M_BOOTSTRAP_SERVER_SECRET_KEY)
.forEach(lwm2mBootstrapServerProperty -> {
String value = fields.get(lwm2mBootstrapServerProperty);
if (value != null) {
bootstrapServer.set(lwm2mBootstrapServerProperty.getKey(), new TextNode(value));
}
});
setValues(bootstrapServer, fields, Set.of(BulkImportColumnType.LWM2M_BOOTSTRAP_SERVER_SECURITY_MODE,
BulkImportColumnType.LWM2M_BOOTSTRAP_SERVER_PUBLIC_KEY_OR_ID, BulkImportColumnType.LWM2M_BOOTSTRAP_SERVER_SECRET_KEY));
ObjectNode lwm2mServer = JacksonUtil.newObjectNode();
Stream.of(BulkImportColumnType.LWM2M_SERVER_SECURITY_MODE, BulkImportColumnType.LWM2M_SERVER_CLIENT_PUBLIC_KEY_OR_ID,
BulkImportColumnType.LWM2M_SERVER_CLIENT_SECRET_KEY)
.forEach(lwm2mServerProperty -> {
String value = fields.get(lwm2mServerProperty);
if (value != null) {
lwm2mServer.set(lwm2mServerProperty.getKey(), new TextNode(value));
}
});
setValues(lwm2mServer, fields, Set.of(BulkImportColumnType.LWM2M_SERVER_SECURITY_MODE,
BulkImportColumnType.LWM2M_SERVER_CLIENT_PUBLIC_KEY_OR_ID, BulkImportColumnType.LWM2M_SERVER_CLIENT_SECRET_KEY));
ObjectNode bootstrap = JacksonUtil.newObjectNode();
bootstrap.set("bootstrapServer", bootstrapServer);
@ -208,8 +178,21 @@ public class DeviceBulkImportService extends AbstractBulkImportService<Device> {
lwm2mCredentials.set("bootstrap", bootstrap);
credentials.setCredentialsValue(lwm2mCredentials.toString());
}
} else if (columns.contains(BulkImportColumnType.X509)) {
credentials.setCredentialsType(DeviceCredentialsType.X509_CERTIFICATE);
credentials.setCredentialsValue(fields.get(BulkImportColumnType.X509));
} else if (CollectionUtils.containsAny(columns, EnumSet.of(BulkImportColumnType.MQTT_CLIENT_ID, BulkImportColumnType.MQTT_USER_NAME, BulkImportColumnType.MQTT_PASSWORD))) {
credentials.setCredentialsType(DeviceCredentialsType.MQTT_BASIC);
BasicMqttCredentials basicMqttCredentials = new BasicMqttCredentials();
basicMqttCredentials.setClientId(fields.get(BulkImportColumnType.MQTT_CLIENT_ID));
basicMqttCredentials.setUserName(fields.get(BulkImportColumnType.MQTT_USER_NAME));
basicMqttCredentials.setPassword(fields.get(BulkImportColumnType.MQTT_PASSWORD));
credentials.setCredentialsValue(JacksonUtil.toString(basicMqttCredentials));
} else if (columns.contains(BulkImportColumnType.ACCESS_TOKEN)) {
credentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
credentials.setCredentialsId(fields.get(BulkImportColumnType.ACCESS_TOKEN));
}
return credentials;
}
@ -245,4 +228,13 @@ public class DeviceBulkImportService extends AbstractBulkImportService<Device> {
}
}
private void setValues(ObjectNode objectNode, Map<BulkImportColumnType, String> data, Collection<BulkImportColumnType> columns) {
for (BulkImportColumnType column : columns) {
String value = StringUtils.defaultString(data.get(column), column.getDefaultValue());
if (value != null && column.getKey() != null) {
objectNode.set(column.getKey(), new TextNode(value));
}
}
}
}

13
application/src/main/java/org/thingsboard/server/service/importing/BulkImportColumnType.java

@ -17,6 +17,7 @@ package org.thingsboard.server.service.importing;
import lombok.Getter;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MSecurityMode;
@Getter
public enum BulkImportColumnType {
@ -32,14 +33,14 @@ public enum BulkImportColumnType {
MQTT_USER_NAME,
MQTT_PASSWORD,
LWM2M_CLIENT_ENDPOINT("endpoint"),
LWM2M_CLIENT_SECURITY_CONFIG_MODE("securityConfigClientMode"),
LWM2M_CLIENT_SECURITY_CONFIG_MODE("securityConfigClientMode", LwM2MSecurityMode.NO_SEC.name()),
LWM2M_CLIENT_IDENTITY("identity"),
LWM2M_CLIENT_KEY("key"),
LWM2M_CLIENT_CERT("cert"),
LWM2M_BOOTSTRAP_SERVER_SECURITY_MODE("securityMode"),
LWM2M_BOOTSTRAP_SERVER_SECURITY_MODE("securityMode", LwM2MSecurityMode.NO_SEC.name()),
LWM2M_BOOTSTRAP_SERVER_PUBLIC_KEY_OR_ID("clientPublicKeyOrId"),
LWM2M_BOOTSTRAP_SERVER_SECRET_KEY("clientSecretKey"),
LWM2M_SERVER_SECURITY_MODE("securityMode"),
LWM2M_SERVER_SECURITY_MODE("securityMode", LwM2MSecurityMode.NO_SEC.name()),
LWM2M_SERVER_CLIENT_PUBLIC_KEY_OR_ID("clientPublicKeyOrId"),
LWM2M_SERVER_CLIENT_SECRET_KEY("clientSecretKey"),
IS_GATEWAY,
@ -50,6 +51,7 @@ public enum BulkImportColumnType {
SECRET;
private String key;
private String defaultValue;
private boolean isKv = false;
BulkImportColumnType() {
@ -59,6 +61,11 @@ public enum BulkImportColumnType {
this.key = key;
}
BulkImportColumnType(String key, String defaultValue) {
this.key = key;
this.defaultValue = defaultValue;
}
BulkImportColumnType(boolean isKv) {
this.isKv = isKv;
}

9
dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java

@ -18,12 +18,12 @@ package org.thingsboard.server.dao.device;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.exception.ConstraintViolationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.server.common.data.Device;
import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials;
@ -120,9 +120,14 @@ public class DeviceCredentialsServiceImpl extends AbstractEntityService implemen
} catch (IllegalArgumentException e) {
throw new DeviceCredentialsValidationException("Invalid credentials body for simple mqtt credentials!");
}
if (StringUtils.isEmpty(mqttCredentials.getClientId()) && StringUtils.isEmpty(mqttCredentials.getUserName())) {
throw new DeviceCredentialsValidationException("Both mqtt client id and user name are empty!");
}
if (StringUtils.isNotEmpty(mqttCredentials.getClientId()) && StringUtils.isNotEmpty(mqttCredentials.getPassword())) {
throw new DeviceCredentialsValidationException("Password cannot be specified along with client id");
}
if (StringUtils.isEmpty(mqttCredentials.getClientId())) {
deviceCredentials.setCredentialsId(mqttCredentials.getUserName());
} else if (StringUtils.isEmpty(mqttCredentials.getUserName())) {
@ -130,7 +135,7 @@ public class DeviceCredentialsServiceImpl extends AbstractEntityService implemen
} else {
deviceCredentials.setCredentialsId(EncryptionUtil.getSha3Hash("|", mqttCredentials.getClientId(), mqttCredentials.getUserName()));
}
if (!StringUtils.isEmpty(mqttCredentials.getPassword())) {
if (StringUtils.isNotEmpty(mqttCredentials.getPassword())) {
mqttCredentials.setPassword(mqttCredentials.getPassword());
}
deviceCredentials.setCredentialsValue(JacksonUtil.toString(mqttCredentials));

Loading…
Cancel
Save