Browse Source

lwm2m: add to JacksonUtil new method "validateFieldsToTree"

pull/5171/head
nickAS21 5 years ago
parent
commit
8dbacbd65f
  1. 23
      common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java
  2. 25
      dao/src/main/java/org/thingsboard/server/dao/device/DeviceCredentialsServiceImpl.java

23
common/util/src/main/java/org/thingsboard/common/util/JacksonUtil.java

@ -23,6 +23,8 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
import java.util.Arrays;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by Valerii Sosliuk on 5/12/2017.
@ -118,4 +120,25 @@ public class JacksonUtil {
public static <T> JsonNode valueToTree(T value) {
return OBJECT_MAPPER.valueToTree(value);
}
public static String validateFieldsToTree(JsonNode nodeCredentialsValue, String[] fields, String delimiter) {
try {
Set msgSet = ConcurrentHashMap.newKeySet();
for (String field : fields) {
String[] keys = field.split(delimiter);
JsonNode nodeVal = nodeCredentialsValue;
for (String key : keys) {
if (!nodeVal.hasNonNull(key)) {
msgSet.add(keys[keys.length - 1]);
break;
} else {
nodeVal = nodeVal.get(key);
}
}
}
return String.join(", ", msgSet);
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
}
}

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

@ -260,14 +260,14 @@ public class DeviceCredentialsServiceImpl extends AbstractEntityService implemen
// LwM2MCredentialsValid credentials = JacksonUtil.fromString(deviceCredentials.getCredentialsValue(), LwM2MCredentialsValid.class);
JsonNode nodeCredentialsValue = JacksonUtil.toJsonNode(deviceCredentials.getCredentialsValue());
String [] fields = {"client", "bootstrap", "bootstrap:bootstrapServer", "bootstrap:lwm2mServer"};
String validateMsg = validateNodeCredentials (nodeCredentialsValue, fields);
String validateMsg = JacksonUtil.validateFieldsToTree(nodeCredentialsValue, fields, ":");
if (validateMsg.isEmpty()) {
checkClientKey(nodeCredentialsValue.get("client"));
checkServerKey(nodeCredentialsValue.get("bootstrap").get("bootstrapServer"), "Client`s by bootstrapServer");
checkServerKey(nodeCredentialsValue.get("bootstrap").get("lwm2mServer"), "Client`s by lwm2mServer");
}
else {
throw new DataValidationException(validateMsg);
throw new DataValidationException("Device credentials are missing fields or mandatory value in this fields: " + validateMsg);
}
} catch (DataValidationException | DecoderException e) {
throw new DataValidationException(e.getMessage());
@ -286,27 +286,6 @@ public class DeviceCredentialsServiceImpl extends AbstractEntityService implemen
}
}
private String validateNodeCredentials (JsonNode nodeCredentialsValue, String [] fields) {
Set msgSet = ConcurrentHashMap.newKeySet();
String msg = "";
for (String field : fields) {
if (field.contains(":")) {
String [] keys = field.split(":");
if (!nodeCredentialsValue.hasNonNull(keys[0])) {
msgSet.add(keys[1]);
}
else {
if (!nodeCredentialsValue.get(keys[0]).hasNonNull(keys[1])) msgSet.add(keys[1]);
}
}
else {
if (!nodeCredentialsValue.hasNonNull(field)) msgSet.add(field);
}
}
if (msgSet.size() > 0) msg = "Device credentials are missing fields or mandatory value in this fields: " + String.join(", ", msgSet);
return msg;
}
private void checkClientKey (JsonNode node) throws DataValidationException, DecoderException {
String modeName = node.get("securityConfigClientMode").asText();
// checks security config

Loading…
Cancel
Save