lwm2m - upDate lwm2mServer
This commit is contained in:
		
							parent
							
								
									0344b61ed3
								
							
						
					
					
						commit
						781ef66f0b
					
				@ -17,17 +17,19 @@ package org.thingsboard.server.common.data.device.profile;
 | 
			
		||||
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceTransportType;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServersConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServerCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.OtherConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.TelemetryMappingConfiguration;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
@Data
 | 
			
		||||
public class Lwm2mDeviceProfileTransportConfiguration implements DeviceProfileTransportConfiguration {
 | 
			
		||||
 | 
			
		||||
    private static final long serialVersionUID = 6257277825459600068L;
 | 
			
		||||
 | 
			
		||||
    private TelemetryMappingConfiguration observeAttr;
 | 
			
		||||
    private LwM2MBootstrapServersConfiguration bootstrap;
 | 
			
		||||
    private List<LwM2MBootstrapServerCredential> bootstrap;
 | 
			
		||||
    private OtherConfiguration clientLwM2mSettings;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,6 @@ import java.util.List;
 | 
			
		||||
@Data
 | 
			
		||||
public class LwM2MBootstrapServersConfiguration {
 | 
			
		||||
 | 
			
		||||
    List<LwM2MBootstrapServerCredential> serverConfiguration;
 | 
			
		||||
    List<LwM2MBootstrapServerCredential> bootstrap;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,6 @@ package org.thingsboard.server.transport.lwm2m.bootstrap;
 | 
			
		||||
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.eclipse.californium.elements.util.SslContextUtil;
 | 
			
		||||
import org.eclipse.californium.scandium.config.DtlsConnectorConfig;
 | 
			
		||||
import org.eclipse.leshan.server.bootstrap.BootstrapSessionManager;
 | 
			
		||||
import org.eclipse.leshan.server.californium.bootstrap.LeshanBootstrapServer;
 | 
			
		||||
@ -26,8 +25,8 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
import org.thingsboard.server.common.transport.TransportService;
 | 
			
		||||
import org.thingsboard.server.common.transport.config.ssl.SslCredentials;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MBootstrapSecurityStore;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MInMemoryBootstrapConfigStore;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.store.LwM2MBootstrapSecurityStore;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.store.LwM2MInMemoryBootstrapConfigStore;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2mDefaultBootstrapSessionManager;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportBootstrapConfig;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
 | 
			
		||||
@ -35,10 +34,6 @@ import org.thingsboard.server.transport.lwm2m.server.DefaultLwM2mTransportServic
 | 
			
		||||
 | 
			
		||||
import javax.annotation.PostConstruct;
 | 
			
		||||
import javax.annotation.PreDestroy;
 | 
			
		||||
import java.security.KeyStore;
 | 
			
		||||
import java.security.KeyStoreException;
 | 
			
		||||
import java.security.PrivateKey;
 | 
			
		||||
import java.security.PublicKey;
 | 
			
		||||
import java.security.cert.X509Certificate;
 | 
			
		||||
 | 
			
		||||
import static org.thingsboard.server.transport.lwm2m.server.LwM2MNetworkConfig.getCoapConfig;
 | 
			
		||||
 | 
			
		||||
@ -16,23 +16,27 @@
 | 
			
		||||
package org.thingsboard.server.transport.lwm2m.bootstrap.secure;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.Getter;
 | 
			
		||||
import lombok.Setter;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.eclipse.leshan.core.SecurityMode;
 | 
			
		||||
import org.eclipse.leshan.core.request.BindingMode;
 | 
			
		||||
import org.eclipse.leshan.core.util.Hex;
 | 
			
		||||
import org.eclipse.leshan.server.bootstrap.BootstrapConfig;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.AbstractLwM2MBootstrapClientCredentialWithKeys;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MBootstrapClientCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MSecurityMode;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.AbstractLwM2MBootstrapServerCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServerCredential;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicInteger;
 | 
			
		||||
 | 
			
		||||
@Slf4j
 | 
			
		||||
@Data
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
public class LwM2MBootstrapConfig implements Serializable {
 | 
			
		||||
 | 
			
		||||
    List<LwM2MBootstrapServerCredential> serverConfiguration;
 | 
			
		||||
@ -75,52 +79,68 @@ public class LwM2MBootstrapConfig implements Serializable {
 | 
			
		||||
    @Setter
 | 
			
		||||
    private LwM2MBootstrapClientCredential lwm2mServer;
 | 
			
		||||
 | 
			
		||||
    public LwM2MBootstrapConfig(List<LwM2MBootstrapServerCredential> serverConfiguration, LwM2MBootstrapClientCredential bootstrapClientCredential) {
 | 
			
		||||
    public LwM2MBootstrapConfig(){};
 | 
			
		||||
 | 
			
		||||
    public LwM2MBootstrapConfig(List<LwM2MBootstrapServerCredential> serverConfiguration, LwM2MBootstrapClientCredential bootstrapClientServer, LwM2MBootstrapClientCredential lwm2mClientServer) {
 | 
			
		||||
        this.serverConfiguration = serverConfiguration;
 | 
			
		||||
        this.bootstrapServer = bootstrapClientServer;
 | 
			
		||||
        this.lwm2mServer = lwm2mClientServer;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    public BootstrapConfig getLwM2MBootstrapConfig() {
 | 
			
		||||
        BootstrapConfig configBs = new BootstrapConfig();
 | 
			
		||||
        /* Delete old security objects */
 | 
			
		||||
        AtomicInteger index = new AtomicInteger();
 | 
			
		||||
        /** Delete old security/config objects in LwM2mDefaultBootstrapSessionManager -> initTasks */
 | 
			
		||||
        configBs.toDelete.add("/0");
 | 
			
		||||
        configBs.toDelete.add("/1");
 | 
			
		||||
        /* Server Configuration (object 1) as defined in LWM2M 1.0.x TS. */
 | 
			
		||||
        BootstrapConfig.ServerConfig server0 = new BootstrapConfig.ServerConfig();
 | 
			
		||||
//        server0.shortId = servers.getShortId();
 | 
			
		||||
//        server0.lifetime = servers.getLifetime();
 | 
			
		||||
//        server0.defaultMinPeriod = servers.getDefaultMinPeriod();
 | 
			
		||||
//        server0.notifIfDisabled = servers.isNotifIfDisabled();
 | 
			
		||||
//        server0.binding = BindingMode.parse(servers.getBinding());
 | 
			
		||||
        configBs.servers.put(0, server0);
 | 
			
		||||
        /* Security Configuration (object 0) as defined in LWM2M 1.0.x TS. Bootstrap instance = 0 */
 | 
			
		||||
//        this.bootstrapServer.setBootstrapServerIs(true);
 | 
			
		||||
//        configBs.security.put(0, setServerSecurity(this.lwm2mServer.getHost(), this.lwm2mServer.getPort(), this.lwm2mServer.getSecurityHost(), this.lwm2mServer.getSecurityPort(), this.bootstrapServer.isBootstrapServerIs(), this.bootstrapServer.getSecurityMode(), this.bootstrapServer.getClientPublicKeyOrId(), this.bootstrapServer.getServerPublicKey(), this.bootstrapServer.getClientSecretKey(), this.bootstrapServer.getServerId()));
 | 
			
		||||
//        /* Security Configuration (object 0) as defined in LWM2M 1.0.x TS. Server instance = 1 */
 | 
			
		||||
//        configBs.security.put(1, setServerSecurity(this.lwm2mServer.getHost(), this.lwm2mServer.getPort(), this.lwm2mServer.getSecurityHost(), this.lwm2mServer.getSecurityPort(), this.lwm2mServer.isBootstrapServerIs(), this.lwm2mServer.getSecurityMode(), this.lwm2mServer.getClientPublicKeyOrId(), this.lwm2mServer.getServerPublicKey(), this.lwm2mServer.getClientSecretKey(), this.lwm2mServer.getServerId()));
 | 
			
		||||
        serverConfiguration.forEach(serverCredential -> {
 | 
			
		||||
            BootstrapConfig.ServerConfig serverConfig = new BootstrapConfig.ServerConfig();
 | 
			
		||||
            serverConfig.shortId = ((AbstractLwM2MBootstrapServerCredential)serverCredential).getShortServerId();
 | 
			
		||||
            serverConfig.lifetime = ((AbstractLwM2MBootstrapServerCredential)serverCredential).getLifetime();
 | 
			
		||||
            serverConfig.defaultMinPeriod = ((AbstractLwM2MBootstrapServerCredential)serverCredential).getDefaultMinPeriod();
 | 
			
		||||
            serverConfig.notifIfDisabled = ((AbstractLwM2MBootstrapServerCredential)serverCredential).isNotifIfDisabled();
 | 
			
		||||
            serverConfig.binding = BindingMode.parse(((AbstractLwM2MBootstrapServerCredential)serverCredential).getBinding());
 | 
			
		||||
            int k = index.get();
 | 
			
		||||
            configBs.servers.put(k, serverConfig);
 | 
			
		||||
            BootstrapConfig.ServerSecurity serverSecurity = setServerSecurity((AbstractLwM2MBootstrapServerCredential)serverCredential, serverCredential.getSecurityMode());
 | 
			
		||||
            configBs.security.put(k, serverSecurity);
 | 
			
		||||
            index.getAndIncrement();
 | 
			
		||||
 | 
			
		||||
        });
 | 
			
		||||
        return configBs;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private BootstrapConfig.ServerSecurity setServerSecurity(String host, Integer port, String securityHost, Integer securityPort, boolean bootstrapServer, SecurityMode securityMode, String clientPublicKey, String serverPublicKey, String secretKey, int serverId) {
 | 
			
		||||
    private BootstrapConfig.ServerSecurity setServerSecurity(AbstractLwM2MBootstrapServerCredential serverCredential, LwM2MSecurityMode securityMode) {
 | 
			
		||||
        BootstrapConfig.ServerSecurity serverSecurity = new BootstrapConfig.ServerSecurity();
 | 
			
		||||
        if (securityMode.equals(SecurityMode.NO_SEC)) {
 | 
			
		||||
            serverSecurity.uri = "coap://" + host + ":" + Integer.toString(port);
 | 
			
		||||
        } else {
 | 
			
		||||
            serverSecurity.uri = "coaps://" + securityHost + ":" + Integer.toString(securityPort);
 | 
			
		||||
        String serverUri = "coap://";
 | 
			
		||||
        byte[] publicKeyOrId = new byte[]{};;
 | 
			
		||||
        byte[] secretKey = new byte[]{};;
 | 
			
		||||
        serverSecurity.serverId = serverCredential.getShortServerId();
 | 
			
		||||
        serverSecurity.securityMode = SecurityMode.valueOf(securityMode.name());
 | 
			
		||||
        serverSecurity.bootstrapServer = serverCredential.isBootstrapServerIs();
 | 
			
		||||
        if (!LwM2MSecurityMode.NO_SEC.equals(securityMode)) {
 | 
			
		||||
            serverUri = "coaps://";
 | 
			
		||||
            if (serverSecurity.bootstrapServer) {
 | 
			
		||||
                publicKeyOrId = ((AbstractLwM2MBootstrapClientCredentialWithKeys)this.bootstrapServer).getDecodedClientPublicKeyOrId();
 | 
			
		||||
                secretKey = ((AbstractLwM2MBootstrapClientCredentialWithKeys)this.bootstrapServer).getDecodedClientSecretKey();
 | 
			
		||||
 | 
			
		||||
            } else {
 | 
			
		||||
                publicKeyOrId = ((AbstractLwM2MBootstrapClientCredentialWithKeys)this.lwm2mServer).getDecodedClientPublicKeyOrId();
 | 
			
		||||
                secretKey = ((AbstractLwM2MBootstrapClientCredentialWithKeys)this.lwm2mServer).getDecodedClientSecretKey();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        serverSecurity.bootstrapServer = bootstrapServer;
 | 
			
		||||
        serverSecurity.securityMode = securityMode;
 | 
			
		||||
        serverSecurity.publicKeyOrId = setPublicKeyOrId(clientPublicKey, securityMode);
 | 
			
		||||
        serverSecurity.serverPublicKey = (serverPublicKey != null && !serverPublicKey.isEmpty()) ? Hex.decodeHex(serverPublicKey.toCharArray()) : new byte[]{};
 | 
			
		||||
        serverSecurity.secretKey = (secretKey != null && !secretKey.isEmpty()) ? Hex.decodeHex(secretKey.toCharArray()) : new byte[]{};
 | 
			
		||||
        serverSecurity.serverId = serverId;
 | 
			
		||||
        serverUri += (((serverCredential.getHost().equals("0.0.0.0") ? "localhost" : serverCredential.getHost()) + ":" + serverCredential.getPort()));
 | 
			
		||||
        log.info("serverSecurity.uri = [{}]", serverUri);
 | 
			
		||||
        log.info("publicKeyOrId  [{}]", Hex.encodeHexString(publicKeyOrId));
 | 
			
		||||
        log.info("secretKey [{}]", Hex.encodeHexString(secretKey));
 | 
			
		||||
        log.info("server [{}]", Hex.encodeHexString(serverCredential.getDecodedCServerPublicKey()));
 | 
			
		||||
        serverSecurity.uri = serverUri;
 | 
			
		||||
        serverSecurity.publicKeyOrId = publicKeyOrId;
 | 
			
		||||
        serverSecurity.secretKey = secretKey;
 | 
			
		||||
        serverSecurity.serverPublicKey = serverCredential.getDecodedCServerPublicKey();
 | 
			
		||||
        return serverSecurity;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private byte[] setPublicKeyOrId(String publicKeyOrIdStr, SecurityMode securityMode) {
 | 
			
		||||
        return (publicKeyOrIdStr == null || publicKeyOrIdStr.isEmpty()) ? new byte[]{} :
 | 
			
		||||
                SecurityMode.PSK.equals(securityMode) ? publicKeyOrIdStr.getBytes(StandardCharsets.UTF_8) :
 | 
			
		||||
                        Hex.decodeHex(publicKeyOrIdStr.toCharArray());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -34,6 +34,7 @@ import org.eclipse.leshan.server.security.BootstrapSecurityStore;
 | 
			
		||||
import org.eclipse.leshan.server.security.SecurityChecker;
 | 
			
		||||
import org.eclipse.leshan.server.security.SecurityInfo;
 | 
			
		||||
import org.thingsboard.server.common.transport.TransportService;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.store.LwM2MBootstrapSecurityStore;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2MAuthException;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
@ -118,6 +119,7 @@ public class LwM2mDefaultBootstrapSessionManager extends DefaultBootstrapSession
 | 
			
		||||
            session.setModel(modelProvider.getObjectModel(session, tasks.supportedObjects));
 | 
			
		||||
 | 
			
		||||
        // set Requests to Send
 | 
			
		||||
        log.info("tasks.requestsToSend = [{}]", tasks.requestsToSend);
 | 
			
		||||
        session.setRequests(tasks.requestsToSend);
 | 
			
		||||
 | 
			
		||||
        // prepare list where we will store Responses
 | 
			
		||||
 | 
			
		||||
@ -13,12 +13,10 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.transport.lwm2m.bootstrap.secure;
 | 
			
		||||
package org.thingsboard.server.transport.lwm2m.bootstrap.store;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.eclipse.leshan.core.SecurityMode;
 | 
			
		||||
import org.eclipse.leshan.core.util.Hex;
 | 
			
		||||
import org.eclipse.leshan.core.util.SecurityUtil;
 | 
			
		||||
import org.eclipse.leshan.server.bootstrap.BootstrapConfig;
 | 
			
		||||
import org.eclipse.leshan.server.bootstrap.EditableBootstrapConfigStore;
 | 
			
		||||
import org.eclipse.leshan.server.bootstrap.InvalidConfigurationException;
 | 
			
		||||
@ -26,9 +24,10 @@ import org.eclipse.leshan.server.security.BootstrapSecurityStore;
 | 
			
		||||
import org.eclipse.leshan.server.security.SecurityInfo;
 | 
			
		||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServersConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MSecurityMode;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.AbstractLwM2MBootstrapServerCredential;
 | 
			
		||||
import org.thingsboard.server.gen.transport.TransportProtos;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MBootstrapConfig;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.secure.LwM2mCredentialsSecurityInfoValidator;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.secure.TbLwM2MSecurityInfo;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.server.LwM2mSessionMsgListener;
 | 
			
		||||
@ -42,12 +41,12 @@ import java.util.Iterator;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.concurrent.ConcurrentHashMap;
 | 
			
		||||
import java.util.concurrent.atomic.AtomicBoolean;
 | 
			
		||||
 | 
			
		||||
import static org.thingsboard.server.transport.lwm2m.server.uplink.LwM2mTypeServer.BOOTSTRAP;
 | 
			
		||||
import static org.thingsboard.server.transport.lwm2m.utils.LwM2MTransportUtil.LOG_LWM2M_ERROR;
 | 
			
		||||
import static org.thingsboard.server.transport.lwm2m.utils.LwM2MTransportUtil.LOG_LWM2M_INFO;
 | 
			
		||||
import static org.thingsboard.server.transport.lwm2m.utils.LwM2MTransportUtil.LOG_LWM2M_TELEMETRY;
 | 
			
		||||
import static org.thingsboard.server.transport.lwm2m.utils.LwM2MTransportUtil.getBootstrapParametersFromThingsboard;
 | 
			
		||||
 | 
			
		||||
@Slf4j
 | 
			
		||||
@Service("LwM2MBootstrapSecurityStore")
 | 
			
		||||
@ -73,7 +72,7 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
 | 
			
		||||
    public Iterator<SecurityInfo> getAllByEndpoint(String endPoint) {
 | 
			
		||||
        // TODO
 | 
			
		||||
        TbLwM2MSecurityInfo store = lwM2MCredentialsSecurityInfoValidator.getEndpointSecurityInfoByCredentialsId(endPoint, BOOTSTRAP);
 | 
			
		||||
        if (store.getBootstrapCredentialConfig() != null && store.getSecurityMode() != null) {
 | 
			
		||||
        if (store.getBootstrapCredentialConfig() != null) {
 | 
			
		||||
            /* add value to store  from BootstrapJson */
 | 
			
		||||
            this.setBootstrapConfigScurityInfo(store);
 | 
			
		||||
            BootstrapConfig bsConfigNew = store.getBootstrapConfig();
 | 
			
		||||
@ -123,15 +122,15 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
 | 
			
		||||
        LwM2MBootstrapConfig lwM2MBootstrapConfig = this.getParametersBootstrap(store);
 | 
			
		||||
        if (lwM2MBootstrapConfig != null) {
 | 
			
		||||
            /* Security info */
 | 
			
		||||
            switch (lwM2MBootstrapConfig.getBootstrapServer().getSecurityMode()) {
 | 
			
		||||
                /* Use RPK only */
 | 
			
		||||
                case PSK:
 | 
			
		||||
//            switch (lwM2MBootstrapConfig.getBootstrapServer().getSecurityMode()) {
 | 
			
		||||
//                /* Use RPK only */
 | 
			
		||||
//                case PSK:
 | 
			
		||||
//                    store.setSecurityInfo(SecurityInfo.newPreSharedKeyInfo(store.getEndpoint(),
 | 
			
		||||
//                            lwM2MBootstrapConfig.getBootstrapServer().getClientPublicKeyOrId(),
 | 
			
		||||
//                            Hex.decodeHex(lwM2MBootstrapConfig.getBootstrapServer().getClientSecretKey().toCharArray())));
 | 
			
		||||
                    store.setSecurityMode(SecurityMode.PSK);
 | 
			
		||||
                    break;
 | 
			
		||||
                case RPK:
 | 
			
		||||
//                    store.setSecurityMode(SecurityMode.PSK);
 | 
			
		||||
//                    break;
 | 
			
		||||
//                case RPK:
 | 
			
		||||
//                    try {
 | 
			
		||||
////                        store.setSecurityInfo(SecurityInfo.newRawPublicKeyInfo(store.getEndpoint(),
 | 
			
		||||
////                                SecurityUtil.publicKey.decode(Hex.decodeHex(lwM2MBootstrapConfig.getBootstrapServer().getClientPublicKeyOrId().toCharArray()))));
 | 
			
		||||
@ -140,16 +139,16 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
 | 
			
		||||
//                    } catch (IOException | GeneralSecurityException e) {
 | 
			
		||||
//                        log.error("Unable to decode Client public key for [{}]  [{}]", store.getEndpoint(), e.getMessage());
 | 
			
		||||
//                    }
 | 
			
		||||
                case X509:
 | 
			
		||||
                    store.setSecurityInfo(SecurityInfo.newX509CertInfo(store.getEndpoint()));
 | 
			
		||||
                    store.setSecurityMode(SecurityMode.X509);
 | 
			
		||||
                    break;
 | 
			
		||||
                case NO_SEC:
 | 
			
		||||
                    store.setSecurityMode(SecurityMode.NO_SEC);
 | 
			
		||||
                    store.setSecurityInfo(null);
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
            }
 | 
			
		||||
//                case X509:
 | 
			
		||||
//                    store.setSecurityInfo(SecurityInfo.newX509CertInfo(store.getEndpoint()));
 | 
			
		||||
//                    store.setSecurityMode(SecurityMode.X509);
 | 
			
		||||
//                    break;
 | 
			
		||||
//                case NO_SEC:
 | 
			
		||||
//                    store.setSecurityMode(SecurityMode.NO_SEC);
 | 
			
		||||
//                    store.setSecurityInfo(null);
 | 
			
		||||
//                    break;
 | 
			
		||||
//                default:
 | 
			
		||||
//            }
 | 
			
		||||
            BootstrapConfig bootstrapConfig = lwM2MBootstrapConfig.getLwM2MBootstrapConfig();
 | 
			
		||||
            store.setBootstrapConfig(bootstrapConfig);
 | 
			
		||||
        }
 | 
			
		||||
@ -158,7 +157,7 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
 | 
			
		||||
    private LwM2MBootstrapConfig getParametersBootstrap(TbLwM2MSecurityInfo store) {
 | 
			
		||||
        LwM2MBootstrapConfig lwM2MBootstrapConfig = store.getBootstrapCredentialConfig();
 | 
			
		||||
        if (lwM2MBootstrapConfig != null) {
 | 
			
		||||
            LwM2MBootstrapServersConfiguration bootstrapObject = getBootstrapParametersFromThingsboard(store.getDeviceProfile());
 | 
			
		||||
//            LwM2MBootstrapServersConfiguration bootstrapObject = getBootstrapParametersFromThingsboard(store.getDeviceProfile());
 | 
			
		||||
//            lwM2MBootstrapConfig.setServers(JacksonUtil.fromString(JacksonUtil.toString(bootstrapObject.getServers()), LwM2MBootstrapServers.class));
 | 
			
		||||
//            LwM2MServerBootstrap bootstrapServerProfile = JacksonUtil.fromString(JacksonUtil.toString(bootstrapObject.getBootstrapServer()), LwM2MServerBootstrap.class);
 | 
			
		||||
//            if (SecurityMode.NO_SEC != bootstrapServerProfile.getSecurityMode() && bootstrapServerProfile != null) {
 | 
			
		||||
@ -170,23 +169,25 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
 | 
			
		||||
//                profileLwm2mServer.setSecurityHost(profileLwm2mServer.getHost());
 | 
			
		||||
//                profileLwm2mServer.setSecurityPort(profileLwm2mServer.getPort());
 | 
			
		||||
//            }
 | 
			
		||||
//            UUID sessionUUiD = UUID.randomUUID();
 | 
			
		||||
//            TransportProtos.SessionInfoProto sessionInfo = helper.getValidateSessionInfo(store.getMsg(), sessionUUiD.getMostSignificantBits(), sessionUUiD.getLeastSignificantBits());
 | 
			
		||||
//            bsSessions.put(store.getEndpoint(), sessionInfo);
 | 
			
		||||
//            context.getTransportService().registerAsyncSession(sessionInfo, new LwM2mSessionMsgListener(null, null, null, sessionInfo, context.getTransportService()));
 | 
			
		||||
//            if (this.getValidatedSecurityMode(lwM2MBootstrapConfig.getBootstrapServer(), bootstrapServerProfile, lwM2MBootstrapConfig.getLwm2mServer(), profileLwm2mServer)) {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            UUID sessionUUiD = UUID.randomUUID();
 | 
			
		||||
            TransportProtos.SessionInfoProto sessionInfo = helper.getValidateSessionInfo(store.getMsg(), sessionUUiD.getMostSignificantBits(), sessionUUiD.getLeastSignificantBits());
 | 
			
		||||
            bsSessions.put(store.getEndpoint(), sessionInfo);
 | 
			
		||||
            context.getTransportService().registerAsyncSession(sessionInfo, new LwM2mSessionMsgListener(null, null, null, sessionInfo, context.getTransportService()));
 | 
			
		||||
            if (this.getValidatedSecurityMode(lwM2MBootstrapConfig)) {
 | 
			
		||||
//                lwM2MBootstrapConfig.setBootstrapServer(new LwM2MServerBootstrap(lwM2MBootstrapConfig.getBootstrapServer(), bootstrapServerProfile));
 | 
			
		||||
//                lwM2MBootstrapConfig.setLwm2mServer(new LwM2MServerBootstrap(lwM2MBootstrapConfig.getLwm2mServer(), profileLwm2mServer));
 | 
			
		||||
//                String logMsg = String.format("%s: getParametersBootstrap: %s Access connect client with bootstrap server.", LOG_LWM2M_INFO, store.getEndpoint());
 | 
			
		||||
//                helper.sendParametersOnThingsboardTelemetry(helper.getKvStringtoThingsboard(LOG_LWM2M_TELEMETRY, logMsg), sessionInfo);
 | 
			
		||||
//                return lwM2MBootstrapConfig;
 | 
			
		||||
//            } else {
 | 
			
		||||
//                log.error(" [{}] Different values SecurityMode between of client and profile.", store.getEndpoint());
 | 
			
		||||
//                log.error("{} getParametersBootstrap: [{}] Different values SecurityMode between of client and profile.", LOG_LWM2M_ERROR, store.getEndpoint());
 | 
			
		||||
//                String logMsg = String.format("%s: getParametersBootstrap: %s Different values SecurityMode between of client and profile.", LOG_LWM2M_ERROR, store.getEndpoint());
 | 
			
		||||
//                helper.sendParametersOnThingsboardTelemetry(helper.getKvStringtoThingsboard(LOG_LWM2M_TELEMETRY, logMsg), sessionInfo);
 | 
			
		||||
//                return null;
 | 
			
		||||
//            }
 | 
			
		||||
                String logMsg = String.format("%s: getParametersBootstrap: %s Access connect client with bootstrap server.", LOG_LWM2M_INFO, store.getEndpoint());
 | 
			
		||||
                helper.sendParametersOnThingsboardTelemetry(helper.getKvStringtoThingsboard(LOG_LWM2M_TELEMETRY, logMsg), sessionInfo);
 | 
			
		||||
                return lwM2MBootstrapConfig;
 | 
			
		||||
            } else {
 | 
			
		||||
                log.error(" [{}] Different values SecurityMode between of client and profile.", store.getEndpoint());
 | 
			
		||||
                log.error("{} getParametersBootstrap: [{}] Different values SecurityMode between of client and profile.", LOG_LWM2M_ERROR, store.getEndpoint());
 | 
			
		||||
                String logMsg = String.format("%s: getParametersBootstrap: %s Different values SecurityMode between of client and profile.", LOG_LWM2M_ERROR, store.getEndpoint());
 | 
			
		||||
                helper.sendParametersOnThingsboardTelemetry(helper.getKvStringtoThingsboard(LOG_LWM2M_TELEMETRY, logMsg), sessionInfo);
 | 
			
		||||
                return null;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        log.error("Unable to decode Json or Certificate for [{}]", store.getEndpoint());
 | 
			
		||||
        return null;
 | 
			
		||||
@ -196,15 +197,27 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
 | 
			
		||||
     * Bootstrap security have to sync between (bootstrapServer in credential and  bootstrapServer in profile)
 | 
			
		||||
     * and (lwm2mServer  in credential and lwm2mServer  in profile
 | 
			
		||||
     *
 | 
			
		||||
     * @param bootstrapFromCredential - Bootstrap -> Security of bootstrapServer in credential
 | 
			
		||||
     * @param bootstrapServerProfile  - Bootstrap -> Security of bootstrapServer in profile
 | 
			
		||||
     * @param lwm2mFromCredential     - Bootstrap -> Security of lwm2mServer in credential
 | 
			
		||||
     * @param profileLwm2mServer      - Bootstrap -> Security of lwm2mServer in profile
 | 
			
		||||
     * @return false if not sync between SecurityMode of Bootstrap credential and profile
 | 
			
		||||
     */
 | 
			
		||||
    private boolean getValidatedSecurityMode(LwM2MServerBootstrap bootstrapFromCredential, LwM2MServerBootstrap bootstrapServerProfile, LwM2MServerBootstrap lwm2mFromCredential, LwM2MServerBootstrap profileLwm2mServer) {
 | 
			
		||||
        return (bootstrapFromCredential.getSecurityMode().equals(bootstrapServerProfile.getSecurityMode()) &&
 | 
			
		||||
                lwm2mFromCredential.getSecurityMode().equals(profileLwm2mServer.getSecurityMode()));
 | 
			
		||||
//    private boolean getValidatedSecurityMode(LwM2MServerBootstrap bootstrapFromCredential, LwM2MServerBootstrap bootstrapServerProfile, LwM2MServerBootstrap lwm2mFromCredential, LwM2MServerBootstrap profileLwm2mServer) {
 | 
			
		||||
    private boolean getValidatedSecurityMode(LwM2MBootstrapConfig lwM2MBootstrapConfig) {
 | 
			
		||||
        LwM2MSecurityMode bootstrapServerSecurityMode = lwM2MBootstrapConfig.getBootstrapServer().getSecurityMode();
 | 
			
		||||
        LwM2MSecurityMode lwm2mServerSecurityMode = lwM2MBootstrapConfig.getLwm2mServer().getSecurityMode();
 | 
			
		||||
        AtomicBoolean validBs = new AtomicBoolean(true);
 | 
			
		||||
        AtomicBoolean  validLw = new AtomicBoolean(true);
 | 
			
		||||
        lwM2MBootstrapConfig.getServerConfiguration().forEach(serverCredential -> {
 | 
			
		||||
            if (((AbstractLwM2MBootstrapServerCredential)serverCredential).isBootstrapServerIs()) {
 | 
			
		||||
                if (!bootstrapServerSecurityMode.equals(serverCredential.getSecurityMode())) {
 | 
			
		||||
                    validBs.set(false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                if (!lwm2mServerSecurityMode.equals(serverCredential.getSecurityMode())) {
 | 
			
		||||
                    validLw.set(false);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        return validBs.get()&validLw.get();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TransportProtos.SessionInfoProto getSessionByEndpoint(String endpoint) {
 | 
			
		||||
@ -13,7 +13,7 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.transport.lwm2m.bootstrap.secure;
 | 
			
		||||
package org.thingsboard.server.transport.lwm2m.bootstrap.store;
 | 
			
		||||
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.eclipse.leshan.core.request.Identity;
 | 
			
		||||
@ -24,13 +24,14 @@ import org.springframework.stereotype.Component;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MClientCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MSecurityMode;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.PSKClientCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.credentials.lwm2m.RPKClientCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.transport.TransportServiceCallback;
 | 
			
		||||
import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse;
 | 
			
		||||
import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceLwM2MCredentialsRequestMsg;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MBootstrapConfig;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.secure.credentials.LwM2MClientCredentials;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportContext;
 | 
			
		||||
@ -68,17 +69,16 @@ public class LwM2mCredentialsSecurityInfoValidator {
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onSuccess(ValidateDeviceCredentialsResponse msg) {
 | 
			
		||||
                        log.trace("Validated credentials: [{}] [{}]", credentialsId, msg);
 | 
			
		||||
                        String credentialsBody = msg.getCredentials();
 | 
			
		||||
                        resultSecurityStore[0] = createSecurityInfo(credentialsId, credentialsBody, keyValue);
 | 
			
		||||
                        resultSecurityStore[0].setMsg(msg);
 | 
			
		||||
                        resultSecurityStore[0].setDeviceProfile(msg.getDeviceProfile());
 | 
			
		||||
                        resultSecurityStore[0] = createSecurityInfo(credentialsId, msg, keyValue);
 | 
			
		||||
                        latch.countDown();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    @Override
 | 
			
		||||
                    public void onError(Throwable e) {
 | 
			
		||||
                        log.trace("[{}] [{}] Failed to process credentials ", credentialsId, e);
 | 
			
		||||
                        resultSecurityStore[0] = createSecurityInfo(credentialsId, null, null);
 | 
			
		||||
                        TbLwM2MSecurityInfo result = new TbLwM2MSecurityInfo();
 | 
			
		||||
                        result.setEndpoint(credentialsId);
 | 
			
		||||
                        resultSecurityStore[0] = result;
 | 
			
		||||
                        latch.countDown();
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
@ -88,50 +88,47 @@ public class LwM2mCredentialsSecurityInfoValidator {
 | 
			
		||||
            log.error("Failed to await credentials!", e);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return resultSecurityStore[0];
 | 
			
		||||
 | 
			
		||||
//        if ((CLIENT.equals(keyValue) && securityInfo.getSecurityMode() == null) ||
 | 
			
		||||
//                (BOOTSTRAP.equals(keyValue) && securityInfo.getBootstrapCredentialConfig().getBootstrapServer()==null && securityInfo.getBootstrapCredentialConfig().getLwm2mServer()==null)){
 | 
			
		||||
//            throw new LwM2MAuthException();
 | 
			
		||||
//        }
 | 
			
		||||
//
 | 
			
		||||
//        return securityInfo;
 | 
			
		||||
        TbLwM2MSecurityInfo securityInfo = resultSecurityStore[0];
 | 
			
		||||
        if ((CLIENT.equals(keyValue) && securityInfo.getSecurityMode() == null)) {
 | 
			
		||||
            throw new LwM2MAuthException();
 | 
			
		||||
        }
 | 
			
		||||
        return securityInfo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Create new SecurityInfo
 | 
			
		||||
     *
 | 
			
		||||
     * @return SecurityInfo
 | 
			
		||||
     */
 | 
			
		||||
    private TbLwM2MSecurityInfo createSecurityInfo(String endpoint, String jsonStr, LwM2mTypeServer keyValue) {
 | 
			
		||||
    private TbLwM2MSecurityInfo createSecurityInfo(String endpoint, ValidateDeviceCredentialsResponse msg, LwM2mTypeServer keyValue) {
 | 
			
		||||
        TbLwM2MSecurityInfo result = new TbLwM2MSecurityInfo();
 | 
			
		||||
        LwM2MClientCredentials credentials = JacksonUtil.fromString(jsonStr, LwM2MClientCredentials.class);
 | 
			
		||||
        LwM2MClientCredentials credentials = JacksonUtil.fromString(msg.getCredentials(), LwM2MClientCredentials.class);
 | 
			
		||||
        if (credentials != null) {
 | 
			
		||||
            result.setMsg(msg);
 | 
			
		||||
            result.setDeviceProfile(msg.getDeviceProfile());
 | 
			
		||||
            result.setEndpoint(credentials.getClient().getEndpoint());
 | 
			
		||||
//            if ((keyValue.equals(CLIENT))) {
 | 
			
		||||
            switch (credentials.getClient().getSecurityConfigClientMode()) {
 | 
			
		||||
                case NO_SEC:
 | 
			
		||||
                    createClientSecurityInfoNoSec(result);
 | 
			
		||||
                    break;
 | 
			
		||||
                case PSK:
 | 
			
		||||
                    createClientSecurityInfoPSK(result, endpoint, credentials.getClient());
 | 
			
		||||
                    break;
 | 
			
		||||
                case RPK:
 | 
			
		||||
                    createClientSecurityInfoRPK(result, endpoint, credentials.getClient());
 | 
			
		||||
                    break;
 | 
			
		||||
                case X509:
 | 
			
		||||
                    createClientSecurityInfoX509(result, endpoint, credentials.getClient());
 | 
			
		||||
                    break;
 | 
			
		||||
                default:
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
//            } else
 | 
			
		||||
            if (keyValue.equals(BOOTSTRAP)) {
 | 
			
		||||
                result.setBootstrapCredentialConfig(credentials.getBootstrap());
 | 
			
		||||
                if (LwM2MSecurityMode.PSK.equals(credentials.getClient().getSecurityConfigClientMode())) {
 | 
			
		||||
                    PSKClientCredential pskClientConfig = (PSKClientCredential) credentials.getClient();
 | 
			
		||||
                    endpoint = StringUtils.isNotEmpty(pskClientConfig.getEndpoint()) ? pskClientConfig.getEndpoint() : endpoint;
 | 
			
		||||
                }
 | 
			
		||||
                result.setEndpoint(endpoint);
 | 
			
		||||
//                result.setSecurityMode(credentials.getBootstrap().getBootstrapServer().getSecurityMode());
 | 
			
		||||
            } else {
 | 
			
		||||
                result.setEndpoint(credentials.getClient().getEndpoint());
 | 
			
		||||
                switch (credentials.getClient().getSecurityConfigClientMode()) {
 | 
			
		||||
                    case NO_SEC:
 | 
			
		||||
                        createClientSecurityInfoNoSec(result);
 | 
			
		||||
                        break;
 | 
			
		||||
                    case PSK:
 | 
			
		||||
                        createClientSecurityInfoPSK(result, endpoint, credentials.getClient());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case RPK:
 | 
			
		||||
                        createClientSecurityInfoRPK(result, endpoint, credentials.getClient());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case X509:
 | 
			
		||||
                        createClientSecurityInfoX509(result, endpoint, credentials.getClient());
 | 
			
		||||
                        break;
 | 
			
		||||
                    default:
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
                LwM2MBootstrapConfig bootstrapCredentialConfig = new LwM2MBootstrapConfig(((Lwm2mDeviceProfileTransportConfiguration) msg.getDeviceProfile().getProfileData().getTransportConfiguration()).getBootstrap(),
 | 
			
		||||
                        credentials.getBootstrap().getBootstrapServer(), credentials.getBootstrap().getLwm2mServer());
 | 
			
		||||
                result.setBootstrapCredentialConfig(bootstrapCredentialConfig);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
 | 
			
		||||
@ -28,12 +28,13 @@ import java.io.Serializable;
 | 
			
		||||
@Data
 | 
			
		||||
public class TbLwM2MSecurityInfo implements Serializable {
 | 
			
		||||
    private ValidateDeviceCredentialsResponse msg;
 | 
			
		||||
    private DeviceProfile deviceProfile;
 | 
			
		||||
    private String endpoint;
 | 
			
		||||
    private SecurityInfo securityInfo;
 | 
			
		||||
    private SecurityMode securityMode;
 | 
			
		||||
    private DeviceProfile deviceProfile;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /** bootstrap */
 | 
			
		||||
    private LwM2MBootstrapConfig bootstrapCredentialConfig;
 | 
			
		||||
    private String endpoint;
 | 
			
		||||
    private BootstrapConfig bootstrapConfig;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ import org.eclipse.leshan.server.security.SecurityInfo;
 | 
			
		||||
import org.jetbrains.annotations.Nullable;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.secure.LwM2mCredentialsSecurityInfoValidator;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.secure.TbLwM2MSecurityInfo;
 | 
			
		||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2MAuthException;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
@ -71,7 +72,12 @@ public class TbLwM2mSecurityStore implements TbMainSecurityStore {
 | 
			
		||||
    public SecurityInfo getByIdentity(String pskIdentity) {
 | 
			
		||||
        SecurityInfo securityInfo = securityStore.getByIdentity(pskIdentity);
 | 
			
		||||
        if (securityInfo == null) {
 | 
			
		||||
            securityInfo = fetchAndPutSecurityInfo(pskIdentity);
 | 
			
		||||
            try {
 | 
			
		||||
                securityInfo = fetchAndPutSecurityInfo(pskIdentity);
 | 
			
		||||
            } catch (LwM2MAuthException e) {
 | 
			
		||||
                log.info("Registration failed: FORBIDDEN, endpointId: [{}]", pskIdentity);
 | 
			
		||||
                securityInfo = SecurityInfo.newPreSharedKeyInfo(pskIdentity, pskIdentity, new byte[]{0x00});
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return securityInfo;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ import org.eclipse.leshan.server.registration.Registration;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceProfile;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceTransportType;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServersConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServerCredential;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.DeviceProfileTransportConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.ota.OtaPackageKey;
 | 
			
		||||
@ -181,7 +181,7 @@ public class LwM2MTransportUtil {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static LwM2MBootstrapServersConfiguration getBootstrapParametersFromThingsboard(DeviceProfile deviceProfile) {
 | 
			
		||||
    public static List<LwM2MBootstrapServerCredential> getBootstrapParametersFromThingsboard(DeviceProfile deviceProfile) {
 | 
			
		||||
        return toLwM2MClientProfile(deviceProfile).getBootstrap();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -46,7 +46,6 @@ import org.thingsboard.server.common.data.DeviceProfileType;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceTransportType;
 | 
			
		||||
import org.thingsboard.server.common.data.OtaPackage;
 | 
			
		||||
import org.thingsboard.server.common.data.Tenant;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.lwm2m.bootstrap.LwM2MBootstrapServersConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.DefaultCoapDeviceTypeConfiguration;
 | 
			
		||||
@ -418,8 +417,8 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    } else if (transportConfiguration instanceof Lwm2mDeviceProfileTransportConfiguration) {
 | 
			
		||||
                        LwM2MBootstrapServersConfiguration lwM2MBootstrapServersConfiguration = ((Lwm2mDeviceProfileTransportConfiguration) transportConfiguration).getBootstrap();
 | 
			
		||||
                        for (LwM2MBootstrapServerCredential bootstrapServerCredential : lwM2MBootstrapServersConfiguration.getServerConfiguration()) {
 | 
			
		||||
                        List<LwM2MBootstrapServerCredential> lwM2MBootstrapServersConfigurations = ((Lwm2mDeviceProfileTransportConfiguration) transportConfiguration).getBootstrap();
 | 
			
		||||
                        for (LwM2MBootstrapServerCredential bootstrapServerCredential : lwM2MBootstrapServersConfigurations) {
 | 
			
		||||
                            validateLwm2mServersCredentialOfBootstrapForClient(bootstrapServerCredential);
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user