Commit a787ca9d5d933277760dd86d63defed0c8520be8

Authored by Andrii Shvaika
1 parent ff334b54

Refactoring of the lwm2m yml configuration

Showing 24 changed files with 315 additions and 415 deletions
... ... @@ -132,7 +132,7 @@ import org.thingsboard.server.service.firmware.FirmwareStateService;
132 132 import org.thingsboard.server.service.edge.EdgeNotificationService;
133 133 import org.thingsboard.server.service.edge.rpc.EdgeGrpcService;
134 134 import org.thingsboard.server.service.edge.rpc.init.SyncEdgeService;
135   -import org.thingsboard.server.service.lwm2m.LwM2MModelsRepository;
  135 +import org.thingsboard.server.service.lwm2m.LwM2MServerSecurityInfoRepository;
136 136 import org.thingsboard.server.service.profile.TbDeviceProfileCache;
137 137 import org.thingsboard.server.service.queue.TbClusterService;
138 138 import org.thingsboard.server.service.resource.TbResourceService;
... ... @@ -267,7 +267,7 @@ public abstract class BaseController {
267 267 protected TbDeviceProfileCache deviceProfileCache;
268 268
269 269 @Autowired
270   - protected LwM2MModelsRepository lwM2MModelsRepository;
  270 + protected LwM2MServerSecurityInfoRepository lwM2MServerSecurityInfoRepository;
271 271
272 272 @Autowired(required = false)
273 273 protected EdgeService edgeService;
... ...
... ... @@ -47,9 +47,9 @@ public class Lwm2mController extends BaseController {
47 47 @RequestMapping(value = "/lwm2m/deviceProfile/bootstrap/{securityMode}/{bootstrapServerIs}", method = RequestMethod.GET)
48 48 @ResponseBody
49 49 public ServerSecurityConfig getLwm2mBootstrapSecurityInfo(@PathVariable("securityMode") String securityMode,
50   - @PathVariable("bootstrapServerIs") boolean bootstrapServerIs) throws ThingsboardException {
  50 + @PathVariable("bootstrapServerIs") boolean bootstrapServer) throws ThingsboardException {
51 51 try {
52   - return lwM2MModelsRepository.getBootstrapSecurityInfo(securityMode, bootstrapServerIs);
  52 + return lwM2MServerSecurityInfoRepository.getServerSecurityInfo(securityMode, bootstrapServer);
53 53 } catch (Exception e) {
54 54 throw handleException(e);
55 55 }
... ...
application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MServerSecurityInfoRepository.java renamed from application/src/main/java/org/thingsboard/server/service/lwm2m/LwM2MModelsRepository.java
... ... @@ -16,14 +16,15 @@
16 16 package org.thingsboard.server.service.lwm2m;
17 17
18 18
  19 +import lombok.RequiredArgsConstructor;
19 20 import lombok.extern.slf4j.Slf4j;
20 21 import org.eclipse.leshan.core.util.Hex;
21   -import org.springframework.beans.factory.annotation.Autowired;
22 22 import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
23 23 import org.springframework.stereotype.Service;
24 24 import org.thingsboard.server.common.data.lwm2m.ServerSecurityConfig;
25   -import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigBootstrap;
26   -import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigServer;
  25 +import org.thingsboard.server.transport.lwm2m.config.LwM2MSecureServerConfig;
  26 +import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportBootstrapConfig;
  27 +import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
27 28 import org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode;
28 29
29 30 import java.math.BigInteger;
... ... @@ -42,96 +43,59 @@ import java.security.spec.KeySpec;
42 43
43 44 @Slf4j
44 45 @Service
  46 +@RequiredArgsConstructor
45 47 @ConditionalOnExpression("('${service.type:null}'=='tb-transport' && '${transport.lwm2m.enabled:false}'=='true') || '${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core'")
46   -public class LwM2MModelsRepository {
  48 +public class LwM2MServerSecurityInfoRepository {
47 49
48   - private static final String INCORRECT_TENANT_ID = "Incorrect tenantId ";
49   -
50   - @Autowired
51   - LwM2MTransportConfigServer contextServer;
52   -
53   -
54   - @Autowired
55   - LwM2MTransportConfigBootstrap contextBootStrap;
  50 + private final LwM2MTransportServerConfig serverConfig;
  51 + private final LwM2MTransportBootstrapConfig bootstrapConfig;
56 52
57 53 /**
58 54 * @param securityMode
59   - * @param bootstrapServerIs
  55 + * @param bootstrapServer
60 56 * @return ServerSecurityConfig more value is default: Important - port, host, publicKey
61 57 */
62   - public ServerSecurityConfig getBootstrapSecurityInfo(String securityMode, boolean bootstrapServerIs) {
  58 + public ServerSecurityConfig getServerSecurityInfo(String securityMode, boolean bootstrapServer) {
63 59 LwM2MSecurityMode lwM2MSecurityMode = LwM2MSecurityMode.fromSecurityMode(securityMode.toLowerCase());
64   - return getBootstrapServer(bootstrapServerIs, lwM2MSecurityMode);
  60 + ServerSecurityConfig result = getServerSecurityConfig(bootstrapServer ? bootstrapConfig : serverConfig, lwM2MSecurityMode);
  61 + result.setBootstrapServerIs(bootstrapServer);
  62 + return result;
65 63 }
66 64
67   - /**
68   - * @param bootstrapServerIs
69   - * @param mode
70   - * @return ServerSecurityConfig more value is default: Important - port, host, publicKey
71   - */
72   - private ServerSecurityConfig getBootstrapServer(boolean bootstrapServerIs, LwM2MSecurityMode mode) {
  65 + private ServerSecurityConfig getServerSecurityConfig(LwM2MSecureServerConfig serverConfig, LwM2MSecurityMode mode) {
73 66 ServerSecurityConfig bsServ = new ServerSecurityConfig();
74   - bsServ.setBootstrapServerIs(bootstrapServerIs);
75   - if (bootstrapServerIs) {
76   - bsServ.setServerId(contextBootStrap.getBootstrapServerId());
77   - switch (mode) {
78   - case NO_SEC:
79   - bsServ.setHost(contextBootStrap.getBootstrapHost());
80   - bsServ.setPort(contextBootStrap.getBootstrapPortNoSec());
81   - bsServ.setServerPublicKey("");
82   - break;
83   - case PSK:
84   - bsServ.setHost(contextBootStrap.getBootstrapHostSecurity());
85   - bsServ.setPort(contextBootStrap.getBootstrapPortSecurity());
86   - bsServ.setServerPublicKey("");
87   - break;
88   - case RPK:
89   - case X509:
90   - bsServ.setHost(contextBootStrap.getBootstrapHostSecurity());
91   - bsServ.setPort(contextBootStrap.getBootstrapPortSecurity());
92   - bsServ.setServerPublicKey(getPublicKey (contextBootStrap.getBootstrapAlias(), this.contextBootStrap.getBootstrapPublicX(), this.contextBootStrap.getBootstrapPublicY()));
93   - break;
94   - default:
95   - break;
96   - }
97   - } else {
98   - bsServ.setServerId(contextServer.getServerId());
99   - switch (mode) {
100   - case NO_SEC:
101   - bsServ.setHost(contextServer.getServerHost());
102   - bsServ.setPort(contextServer.getServerPortNoSec());
103   - bsServ.setServerPublicKey("");
104   - break;
105   - case PSK:
106   - bsServ.setHost(contextServer.getServerHostSecurity());
107   - bsServ.setPort(contextServer.getServerPortSecurity());
108   - bsServ.setServerPublicKey("");
109   - break;
110   - case RPK:
111   - case X509:
112   - bsServ.setHost(contextServer.getServerHostSecurity());
113   - bsServ.setPort(contextServer.getServerPortSecurity());
114   - bsServ.setServerPublicKey(getPublicKey (contextServer.getServerAlias(), this.contextServer.getServerPublicX(), this.contextServer.getServerPublicY()));
115   - break;
116   - default:
117   - break;
118   - }
  67 + bsServ.setServerId(serverConfig.getId());
  68 + switch (mode) {
  69 + case NO_SEC:
  70 + bsServ.setHost(serverConfig.getHost());
  71 + bsServ.setPort(serverConfig.getPort());
  72 + bsServ.setServerPublicKey("");
  73 + break;
  74 + case PSK:
  75 + bsServ.setHost(serverConfig.getSecureHost());
  76 + bsServ.setPort(serverConfig.getSecurePort());
  77 + bsServ.setServerPublicKey("");
  78 + break;
  79 + case RPK:
  80 + case X509:
  81 + bsServ.setHost(serverConfig.getSecureHost());
  82 + bsServ.setPort(serverConfig.getSecurePort());
  83 + bsServ.setServerPublicKey(getPublicKey(serverConfig.getCertificateAlias(), this.serverConfig.getPublicX(), this.serverConfig.getPublicY()));
  84 + break;
  85 + default:
  86 + break;
119 87 }
120 88 return bsServ;
121 89 }
122 90
123   - private String getPublicKey (String alias, String publicServerX, String publicServerY) {
  91 + private String getPublicKey(String alias, String publicServerX, String publicServerY) {
124 92 String publicKey = getServerPublicKeyX509(alias);
125 93 return publicKey != null ? publicKey : getRPKPublicKey(publicServerX, publicServerY);
126 94 }
127 95
128   - /**
129   - * @param alias
130   - * @return PublicKey format HexString or null
131   - */
132 96 private String getServerPublicKeyX509(String alias) {
133 97 try {
134   - X509Certificate serverCertificate = (X509Certificate) contextServer.getKeyStoreValue().getCertificate(alias);
  98 + X509Certificate serverCertificate = (X509Certificate) serverConfig.getKeyStoreValue().getCertificate(alias);
135 99 return Hex.encodeHexString(serverCertificate.getEncoded());
136 100 } catch (CertificateEncodingException | KeyStoreException e) {
137 101 e.printStackTrace();
... ... @@ -139,11 +103,6 @@ public class LwM2MModelsRepository {
139 103 return null;
140 104 }
141 105
142   - /**
143   - * @param publicServerX
144   - * @param publicServerY
145   - * @return PublicKey format HexString or null
146   - */
147 106 private String getRPKPublicKey(String publicServerX, String publicServerY) {
148 107 try {
149 108 /** Get Elliptic Curve Parameter spec for secp256r1 */
... ...
... ... @@ -630,38 +630,14 @@ transport:
630 630 lwm2m:
631 631 # Enable/disable lvm2m transport protocol.
632 632 enabled: "${LWM2M_ENABLED:true}"
633   - # We choose a default timeout a bit higher to the MAX_TRANSMIT_WAIT(62-93s) which is the time from starting to
634   - # send a Confirmable message to the time when an acknowledgement is no longer expected.
635   - # DEFAULT_TIMEOUT = 2 * 60 * 1000l; 2 min in ms
636   - timeout: "${LWM2M_TIMEOUT:120000}"
637   - recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
638   - recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}"
639   - response_pool_size: "${LWM2M_RESPONSE_POOL_SIZE:100}"
640   - registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}"
641   - update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}"
642   - un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}"
643   - secure:
644   - # Certificate_x509:
645   - # To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format
646   - # Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh
647   - key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}"
648   - # key_store_path_file: "${KEY_STORE_PATH_FILE:/common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks"
649   - key_store_path_file: "${KEY_STORE_PATH_FILE:}"
650   - key_store_password: "${LWM2M_KEYSTORE_PASSWORD_SERVER:server_ks_password}"
651   - root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}"
652   - enable_gen_new_key_psk_rpk: "${ENABLE_GEN_NEW_KEY_PSK_RPK:false}"
653 633 server:
654 634 id: "${LWM2M_SERVER_ID:123}"
655 635 bind_address: "${LWM2M_BIND_ADDRESS:0.0.0.0}"
656   - bind_port_no_sec: "${LWM2M_BIND_PORT_NO_SEC:5685}"
657   - secure:
658   - bind_address_security: "${LWM2M_BIND_ADDRESS_SECURITY:0.0.0.0}"
659   - bind_port_security: "${LWM2M_BIND_PORT_SECURITY:5686}"
660   - # create_rpk: "${CREATE_RPK:}"
  636 + bind_port: "${LWM2M_BIND_PORT:5685}"
  637 + security:
  638 + bind_address: "${LWM2M_BIND_ADDRESS_SECURITY:0.0.0.0}"
  639 + bind_port: "${LWM2M_BIND_PORT_SECURITY:5686}"
661 640 # Only for RPK: Public & Private Key. If the keystore file is missing or not working
662   - # - Public Key (Hex): [3059301306072a8648ce3d020106082a8648ce3d0301070342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b]
663   - # - Private Key (Hex): [308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420dc774b309e547ceb48fee547e104ce201a9c48c449dc5414cd04e7f5cf05f67ba00a06082a8648ce3d030107a1440342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b],
664   - # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)]
665 641 public_x: "${LWM2M_SERVER_PUBLIC_X:05064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f358}"
666 642 public_y: "${LWM2M_SERVER_PUBLIC_Y:5eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}"
667 643 private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED:308193020100301306072a8648ce3d020106082a8648ce3d030107047930770201010420dc774b309e547ceb48fee547e104ce201a9c48c449dc5414cd04e7f5cf05f67ba00a06082a8648ce3d030107a1440342000405064b9e6762dd8d8b8a52355d7b4d8b9a3d64e6d2ee277d76c248861353f3585eeb1838e4f9e37b31fa347aef5ce3431eb54e0a2506910c5e0298817445721b}"
... ... @@ -671,19 +647,33 @@ transport:
671 647 enable: "${LWM2M_ENABLED_BS:true}"
672 648 id: "${LWM2M_SERVER_ID_BS:111}"
673 649 bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
674   - bind_port_no_sec: "${LWM2M_BIND_PORT_NO_SEC_BS:5687}"
675   - secure:
676   - bind_address_security: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
677   - bind_port_security: "${LWM2M_BIND_PORT_SECURITY_BS:5688}"
  650 + bind_port: "${LWM2M_BIND_PORT_BS:5687}"
  651 + security:
  652 + bind_address: "${LWM2M_BIND_ADDRESS_BS:0.0.0.0}"
  653 + bind_port: "${LWM2M_BIND_PORT_SECURITY_BS:5688}"
678 654 # Only for RPK: Public & Private Key. If the keystore file is missing or not working
679   - # - Elliptic Curve parameters : [secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)]
680   - # - Public Key (Hex): [3059301306072a8648ce3d020106082a8648ce3d030107034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34]
681   - # - Private Key (Hex): [308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34],
682 655 public_x: "${LWM2M_SERVER_PUBLIC_X_BS:5017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f91}"
683 656 public_y: "${LWM2M_SERVER_PUBLIC_Y_BS:3fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}"
684 657 private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED_BS:308193020100301306072a8648ce3d020106082a8648ce3d0301070479307702010104205ecafd90caa7be45c42e1f3f32571632b8409e6e6249d7124f4ba56fab3c8083a00a06082a8648ce3d030107a144034200045017c87a1c1768264656b3b355434b0def6edb8b9bf166a4762d9930cd730f913fc4e61bcd8901ec27c424114c3e887ed372497f0c2cf85839b8443e76988b34}"
685 658 # Only Certificate_x509:
686 659 alias: "${LWM2M_KEYSTORE_ALIAS_BS:bootstrap}"
  660 + security:
  661 + # Certificate_x509:
  662 + # To get helps about files format and how to generate it, see: https://github.com/eclipse/leshan/wiki/Credential-files-format
  663 + # Create new X509 Certificates: common/transport/lwm2m/src/main/resources/credentials/shell/lwM2M_credentials.sh
  664 + key_store_type: "${LWM2M_KEYSTORE_TYPE:JKS}"
  665 + # key_store_path_file: "${KEY_STORE_PATH_FILE:/common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks"
  666 + key_store: "${LWM2M_KEY_STORE:lwm2mserver.jks}"
  667 + key_store_password: "${LWM2M_KEY_STORE_PASSWORD:server_ks_password}"
  668 + root_alias: "${LWM2M_SERVER_ROOT_CA:rootca}"
  669 + enable_gen_new_key_psk_rpk: "${ENABLE_GEN_NEW_KEY_PSK_RPK:false}"
  670 + timeout: "${LWM2M_TIMEOUT:120000}"
  671 + recommended_ciphers: "${LWM2M_RECOMMENDED_CIPHERS:false}"
  672 + recommended_supported_groups: "${LWM2M_RECOMMENDED_SUPPORTED_GROUPS:true}"
  673 + response_pool_size: "${LWM2M_RESPONSE_POOL_SIZE:100}"
  674 + registered_pool_size: "${LWM2M_REGISTERED_POOL_SIZE:10}"
  675 + update_registered_pool_size: "${LWM2M_UPDATE_REGISTERED_POOL_SIZE:10}"
  676 + un_registered_pool_size: "${LWM2M_UN_REGISTERED_POOL_SIZE:10}"
687 677 # Use redis for Security and Registration stores
688 678 redis.enabled: "${LWM2M_REDIS_ENABLED:false}"
689 679 snmp:
... ...
... ... @@ -25,9 +25,11 @@ import org.springframework.beans.factory.annotation.Autowired;
25 25 import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
26 26 import org.springframework.context.annotation.Bean;
27 27 import org.springframework.stereotype.Component;
  28 +import org.thingsboard.server.common.data.StringUtils;
28 29 import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MBootstrapSecurityStore;
29 30 import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2MInMemoryBootstrapConfigStore;
30 31 import org.thingsboard.server.transport.lwm2m.bootstrap.secure.LwM2mDefaultBootstrapSessionManager;
  32 +import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportBootstrapConfig;
31 33 import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportContextServer;
32 34
33 35 import java.math.BigInteger;
... ... @@ -81,13 +83,13 @@ public class LwM2MTransportBootstrapServerConfiguration {
81 83 @Bean
82 84 public LeshanBootstrapServer getLeshanBootstrapServer() {
83 85 log.info("Prepare and start BootstrapServer... PostConstruct");
84   - return this.getLhBootstrapServer(this.contextBs.getCtxBootStrap().getBootstrapPortNoSec(), this.contextBs.getCtxBootStrap().getBootstrapPortSecurity());
  86 + return this.getLhBootstrapServer(this.contextBs.getCtxBootStrap().getPort(), this.contextBs.getCtxBootStrap().getSecurePort());
85 87 }
86 88
87 89 public LeshanBootstrapServer getLhBootstrapServer(Integer bootstrapPortNoSec, Integer bootstrapSecurePort) {
88 90 LeshanBootstrapServerBuilder builder = new LeshanBootstrapServerBuilder();
89   - builder.setLocalAddress(this.contextBs.getCtxBootStrap().getBootstrapHost(), bootstrapPortNoSec);
90   - builder.setLocalSecureAddress(this.contextBs.getCtxBootStrap().getBootstrapHostSecurity(), bootstrapSecurePort);
  91 + builder.setLocalAddress(this.contextBs.getCtxBootStrap().getHost(), bootstrapPortNoSec);
  92 + builder.setLocalSecureAddress(this.contextBs.getCtxBootStrap().getSecureHost(), bootstrapSecurePort);
91 93
92 94 /** Create CoAP Config */
93 95 builder.setCoapConfig(getCoapConfig(bootstrapPortNoSec, bootstrapSecurePort));
... ... @@ -106,14 +108,13 @@ public class LwM2MTransportBootstrapServerConfiguration {
106 108
107 109 /** Create and Set DTLS Config */
108 110 DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
109   - dtlsConfig.setRecommendedSupportedGroupsOnly(this.contextS.getLwM2MTransportConfigServer().isRecommendedSupportedGroups());
110   - dtlsConfig.setRecommendedCipherSuitesOnly(this.contextS.getLwM2MTransportConfigServer().isRecommendedCiphers());
  111 + dtlsConfig.setRecommendedSupportedGroupsOnly(this.contextS.getLwM2MTransportServerConfig().isRecommendedSupportedGroups());
  112 + dtlsConfig.setRecommendedCipherSuitesOnly(this.contextS.getLwM2MTransportServerConfig().isRecommendedCiphers());
111 113 if (this.pskMode) {
112 114 dtlsConfig.setSupportedCipherSuites(
113 115 TLS_PSK_WITH_AES_128_CCM_8,
114 116 TLS_PSK_WITH_AES_128_CBC_SHA256);
115   - }
116   - else {
  117 + } else {
117 118 dtlsConfig.setSupportedCipherSuites(
118 119 TLS_PSK_WITH_AES_128_CCM_8,
119 120 TLS_PSK_WITH_AES_128_CBC_SHA256,
... ... @@ -133,10 +134,10 @@ public class LwM2MTransportBootstrapServerConfiguration {
133 134
134 135 private void setServerWithCredentials(LeshanBootstrapServerBuilder builder) {
135 136 try {
136   - if (this.contextS.getLwM2MTransportConfigServer().getKeyStoreValue() != null) {
137   - KeyStore keyStoreServer = this.contextS.getLwM2MTransportConfigServer().getKeyStoreValue();
  137 + if (this.contextS.getLwM2MTransportServerConfig().getKeyStoreValue() != null) {
  138 + KeyStore keyStoreServer = this.contextS.getLwM2MTransportServerConfig().getKeyStoreValue();
138 139 if (this.setBuilderX509(builder)) {
139   - X509Certificate rootCAX509Cert = (X509Certificate) keyStoreServer.getCertificate(this.contextS.getLwM2MTransportConfigServer().getRootAlias());
  140 + X509Certificate rootCAX509Cert = (X509Certificate) keyStoreServer.getCertificate(this.contextS.getLwM2MTransportServerConfig().getRootCertificateAlias());
140 141 if (rootCAX509Cert != null) {
141 142 X509Certificate[] trustedCertificates = new X509Certificate[1];
142 143 trustedCertificates[0] = rootCAX509Cert;
... ... @@ -167,12 +168,10 @@ public class LwM2MTransportBootstrapServerConfiguration {
167 168 * For idea => KeyStorePathResource == common/transport/lwm2m/src/main/resources/credentials: in LwM2MTransportContextServer: credentials/serverKeyStore.jks
168 169 */
169 170 try {
170   - X509Certificate serverCertificate = (X509Certificate) this.contextS.getLwM2MTransportConfigServer().getKeyStoreValue().getCertificate(this.contextBs.getCtxBootStrap().getBootstrapAlias());
171   - PrivateKey privateKey = (PrivateKey) this.contextS.getLwM2MTransportConfigServer().getKeyStoreValue().getKey(this.contextBs.getCtxBootStrap().getBootstrapAlias(), this.contextS.getLwM2MTransportConfigServer().getKeyStorePasswordServer() == null ? null : this.contextS.getLwM2MTransportConfigServer().getKeyStorePasswordServer().toCharArray());
  171 + X509Certificate serverCertificate = (X509Certificate) this.contextS.getLwM2MTransportServerConfig().getKeyStoreValue().getCertificate(this.contextBs.getCtxBootStrap().getCertificateAlias());
  172 + PrivateKey privateKey = (PrivateKey) this.contextS.getLwM2MTransportServerConfig().getKeyStoreValue().getKey(this.contextBs.getCtxBootStrap().getCertificateAlias(), this.contextS.getLwM2MTransportServerConfig().getKeyStorePassword() == null ? null : this.contextS.getLwM2MTransportServerConfig().getKeyStorePassword().toCharArray());
172 173 PublicKey publicKey = serverCertificate.getPublicKey();
173   - if (serverCertificate != null &&
174   - privateKey != null && privateKey.getEncoded().length > 0 &&
175   - publicKey != null && publicKey.getEncoded().length > 0) {
  174 + if (privateKey != null && privateKey.getEncoded().length > 0 && publicKey != null && publicKey.getEncoded().length > 0) {
176 175 builder.setPublicKey(serverCertificate.getPublicKey());
177 176 builder.setPrivateKey(privateKey);
178 177 builder.setCertificateChain(new X509Certificate[]{serverCertificate});
... ... @@ -199,10 +198,12 @@ public class LwM2MTransportBootstrapServerConfiguration {
199 198 }
200 199
201 200 private void infoPramsUri(String mode) {
202   - log.info("Bootstrap Server uses [{}]: serverNoSecureURI : [{}], serverSecureURI : [{}]",
  201 + log.info("Bootstrap Server uses [{}]: serverNoSecureURI : [{}:{}], serverSecureURI : [{}:{}]",
203 202 mode,
204   - this.contextBs.getCtxBootStrap().getBootstrapHost() + ":" + this.contextBs.getCtxBootStrap().getBootstrapPortNoSec(),
205   - this.contextBs.getCtxBootStrap().getBootstrapHostSecurity() + ":" + this.contextBs.getCtxBootStrap().getBootstrapPortSecurity());
  203 + this.contextBs.getCtxBootStrap().getHost(),
  204 + this.contextBs.getCtxBootStrap().getPort(),
  205 + this.contextBs.getCtxBootStrap().getSecureHost(),
  206 + this.contextBs.getCtxBootStrap().getSecurePort());
206 207 }
207 208
208 209
... ... @@ -236,23 +237,25 @@ public class LwM2MTransportBootstrapServerConfiguration {
236 237 AlgorithmParameters algoParameters = AlgorithmParameters.getInstance("EC");
237 238 algoParameters.init(new ECGenParameterSpec("secp256r1"));
238 239 ECParameterSpec parameterSpec = algoParameters.getParameterSpec(ECParameterSpec.class);
239   - if (this.contextBs.getCtxBootStrap().getBootstrapPublicX() != null && !this.contextBs.getCtxBootStrap().getBootstrapPublicX().isEmpty() && this.contextBs.getCtxBootStrap().getBootstrapPublicY() != null && !this.contextBs.getCtxBootStrap().getBootstrapPublicY().isEmpty()) {
  240 + LwM2MTransportBootstrapConfig serverConfig = this.contextBs.getCtxBootStrap();
  241 + if (StringUtils.isNotEmpty(serverConfig.getPublicX()) && StringUtils.isNotEmpty(serverConfig.getPublicY())) {
240 242 /** Get point values */
241   - byte[] publicX = Hex.decodeHex(this.contextBs.getCtxBootStrap().getBootstrapPublicX().toCharArray());
242   - byte[] publicY = Hex.decodeHex(this.contextBs.getCtxBootStrap().getBootstrapPublicY().toCharArray());
  243 + byte[] publicX = Hex.decodeHex(serverConfig.getPublicX().toCharArray());
  244 + byte[] publicY = Hex.decodeHex(serverConfig.getPublicY().toCharArray());
243 245 /** Create key specs */
244 246 KeySpec publicKeySpec = new ECPublicKeySpec(new ECPoint(new BigInteger(publicX), new BigInteger(publicY)),
245 247 parameterSpec);
246 248 /** Get public key */
247 249 this.publicKey = KeyFactory.getInstance("EC").generatePublic(publicKeySpec);
248 250 }
249   - if (this.contextBs.getCtxBootStrap().getBootstrapPrivateEncoded() != null && !this.contextBs.getCtxBootStrap().getBootstrapPrivateEncoded().isEmpty()) {
  251 + String privateEncodedKey = serverConfig.getPrivateEncoded();
  252 + if (StringUtils.isNotEmpty(privateEncodedKey)) {
250 253 /** Get private key */
251   - byte[] privateS = Hex.decodeHex(this.contextBs.getCtxBootStrap().getBootstrapPrivateEncoded().toCharArray());
  254 + byte[] privateS = Hex.decodeHex(privateEncodedKey.toCharArray());
252 255 try {
253 256 this.privateKey = KeyFactory.getInstance("EC").generatePrivate(new PKCS8EncodedKeySpec(privateS));
254 257 } catch (InvalidKeySpecException ignore2) {
255   - log.error("Invalid Bootstrap Server rpk.PrivateKey.getEncoded () [{}}]. PrivateKey has no EC algorithm", this.contextBs.getCtxBootStrap().getBootstrapPrivateEncoded());
  258 + log.error("Invalid Bootstrap Server rpk.PrivateKey.getEncoded () [{}}]. PrivateKey has no EC algorithm", privateEncodedKey);
256 259 }
257 260 }
258 261 }
... ...
... ... @@ -34,7 +34,7 @@ import lombok.extern.slf4j.Slf4j;
34 34 import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
35 35 import org.springframework.stereotype.Component;
36 36 import org.thingsboard.server.common.transport.TransportContext;
37   -import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigBootstrap;
  37 +import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportBootstrapConfig;
38 38
39 39
40 40 @Slf4j
... ... @@ -42,13 +42,13 @@ import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigBootstr
42 42 @ConditionalOnExpression("('${service.type:null}'=='tb-transport' && '${transport.lwm2m.enabled:false}'=='true') || '${service.type:null}'=='monolith'")
43 43 public class LwM2MTransportContextBootstrap extends TransportContext {
44 44
45   - private final LwM2MTransportConfigBootstrap lwM2MTransportConfigBootstrap;
  45 + private final LwM2MTransportBootstrapConfig lwM2MTransportBootstrapConfig;
46 46
47   - public LwM2MTransportContextBootstrap(LwM2MTransportConfigBootstrap ctxBootStrap) {
48   - this.lwM2MTransportConfigBootstrap = ctxBootStrap;
  47 + public LwM2MTransportContextBootstrap(LwM2MTransportBootstrapConfig ctxBootStrap) {
  48 + this.lwM2MTransportBootstrapConfig = ctxBootStrap;
49 49 }
50 50
51   - public LwM2MTransportConfigBootstrap getCtxBootStrap() {
52   - return this.lwM2MTransportConfigBootstrap;
  51 + public LwM2MTransportBootstrapConfig getCtxBootStrap() {
  52 + return this.lwM2MTransportBootstrapConfig;
53 53 }
54 54 }
... ...
... ... @@ -35,7 +35,7 @@ import org.thingsboard.server.transport.lwm2m.secure.LwM2mCredentialsSecurityInf
35 35 import org.thingsboard.server.transport.lwm2m.secure.ReadResultSecurityStore;
36 36 import org.thingsboard.server.transport.lwm2m.server.LwM2mSessionMsgListener;
37 37 import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportContextServer;
38   -import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler;
  38 +import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil;
39 39
40 40 import java.io.IOException;
41 41 import java.security.GeneralSecurityException;
... ... @@ -43,12 +43,12 @@ import java.util.Collections;
43 43 import java.util.List;
44 44 import java.util.UUID;
45 45
46   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.BOOTSTRAP_SERVER;
47   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_ERROR;
48   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_INFO;
49   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LWM2M_SERVER;
50   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.SERVERS;
51   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getBootstrapParametersFromThingsboard;
  46 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.BOOTSTRAP_SERVER;
  47 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_ERROR;
  48 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_INFO;
  49 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LWM2M_SERVER;
  50 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.SERVERS;
  51 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.getBootstrapParametersFromThingsboard;
52 52
53 53 @Slf4j
54 54 @Service("LwM2MBootstrapSecurityStore")
... ... @@ -69,7 +69,7 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
69 69
70 70 @Override
71 71 public List<SecurityInfo> getAllByEndpoint(String endPoint) {
72   - ReadResultSecurityStore store = lwM2MCredentialsSecurityInfoValidator.createAndValidateCredentialsSecurityInfo(endPoint, LwM2mTransportHandler.LwM2mTypeServer.BOOTSTRAP);
  72 + ReadResultSecurityStore store = lwM2MCredentialsSecurityInfoValidator.createAndValidateCredentialsSecurityInfo(endPoint, LwM2mTransportHandlerUtil.LwM2mTypeServer.BOOTSTRAP);
73 73 if (store.getBootstrapJsonCredential() != null && store.getSecurityMode() < LwM2MSecurityMode.DEFAULT_MODE.code) {
74 74 /** add value to store from BootstrapJson */
75 75 this.setBootstrapConfigScurityInfo(store);
... ... @@ -93,7 +93,7 @@ public class LwM2MBootstrapSecurityStore implements BootstrapSecurityStore {
93 93
94 94 @Override
95 95 public SecurityInfo getByIdentity(String identity) {
96   - ReadResultSecurityStore store = lwM2MCredentialsSecurityInfoValidator.createAndValidateCredentialsSecurityInfo(identity, LwM2mTransportHandler.LwM2mTypeServer.BOOTSTRAP);
  96 + ReadResultSecurityStore store = lwM2MCredentialsSecurityInfoValidator.createAndValidateCredentialsSecurityInfo(identity, LwM2mTransportHandlerUtil.LwM2mTypeServer.BOOTSTRAP);
97 97 if (store.getBootstrapJsonCredential() != null && store.getSecurityMode() < LwM2MSecurityMode.DEFAULT_MODE.code) {
98 98 /** add value to store from BootstrapJson */
99 99 this.setBootstrapConfigScurityInfo(store);
... ...
  1 +/**
  2 + * Copyright © 2016-2021 The Thingsboard Authors
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +package org.thingsboard.server.transport.lwm2m.config;
  17 +
  18 +public interface LwM2MSecureServerConfig {
  19 +
  20 + Integer getId();
  21 +
  22 + String getHost();
  23 +
  24 + Integer getPort();
  25 +
  26 + String getSecureHost();
  27 +
  28 + Integer getSecurePort();
  29 +
  30 + String getPublicX();
  31 +
  32 + String getPublicY();
  33 +
  34 + String getPrivateEncoded();
  35 +
  36 + String getCertificateAlias();
  37 +
  38 +}
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/config/LwM2MTransportBootstrapConfig.java renamed from common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigBootstrap.java
... ... @@ -13,7 +13,7 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.common.transport.lwm2m;
  16 +package org.thingsboard.server.transport.lwm2m.config;
17 17
18 18 import lombok.Getter;
19 19 import lombok.Setter;
... ... @@ -29,53 +29,42 @@ import java.util.Map;
29 29 @Slf4j
30 30 @Component
31 31 @ConditionalOnExpression("('${service.type:null}'=='tb-transport' && '${transport.lwm2m.enabled:false}'=='true') || '${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core'")
32   -public class LwM2MTransportConfigBootstrap {
33   -
34   - @Getter
35   - @Value("${transport.lwm2m.bootstrap.enable:}")
36   - private Boolean bootstrapEnable;
  32 +public class LwM2MTransportBootstrapConfig implements LwM2MSecureServerConfig {
37 33
38 34 @Getter
39 35 @Value("${transport.lwm2m.bootstrap.id:}")
40   - private Integer bootstrapServerId;
  36 + private Integer id;
41 37
42 38 @Getter
43 39 @Value("${transport.lwm2m.bootstrap.bind_address:}")
44   - private String bootstrapHost;
  40 + private String host;
45 41
46 42 @Getter
47   - @Value("${transport.lwm2m.bootstrap.bind_port_no_sec:}")
48   - private Integer bootstrapPortNoSec;
  43 + @Value("${transport.lwm2m.bootstrap.bind_port:}")
  44 + private Integer port;
49 45
50 46 @Getter
51   - @Value("${transport.lwm2m.bootstrap.secure.bind_address_security:}")
52   - private String bootstrapHostSecurity;
  47 + @Value("${transport.lwm2m.bootstrap.security.bind_address:}")
  48 + private String secureHost;
53 49
54 50 @Getter
55   - @Value("${transport.lwm2m.bootstrap.secure.bind_port_security:}")
56   - private Integer bootstrapPortSecurity;
  51 + @Value("${transport.lwm2m.bootstrap.security.bind_port:}")
  52 + private Integer securePort;
57 53
58 54 @Getter
59   - @Value("${transport.lwm2m.bootstrap.secure.public_x:}")
60   - private String bootstrapPublicX;
  55 + @Value("${transport.lwm2m.bootstrap.security.public_x:}")
  56 + private String publicX;
61 57
62 58 @Getter
63   - @Value("${transport.lwm2m.bootstrap.secure.public_y:}")
64   - private String bootstrapPublicY;
  59 + @Value("${transport.lwm2m.bootstrap.security.public_y:}")
  60 + private String publicY;
65 61
66 62 @Getter
67   - @Setter
68   - private PublicKey bootstrapPublicKey;
  63 + @Value("${transport.lwm2m.bootstrap.security.private_encoded:}")
  64 + private String privateEncoded;
69 65
70 66 @Getter
71   - @Value("${transport.lwm2m.bootstrap.secure.private_encoded:}")
72   - private String bootstrapPrivateEncoded;
  67 + @Value("${transport.lwm2m.bootstrap.security.alias:}")
  68 + private String certificateAlias;
73 69
74   - @Getter
75   - @Value("${transport.lwm2m.bootstrap.secure.alias:}")
76   - private String bootstrapAlias;
77   -
78   - @Getter
79   - @Setter
80   - private Map<String /** clientEndPoint */, TransportProtos.ValidateDeviceCredentialsResponseMsg> sessions;
81 70 }
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/config/LwM2MTransportServerConfig.java renamed from common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/lwm2m/LwM2MTransportConfigServer.java
... ... @@ -13,8 +13,9 @@
13 13 * See the License for the specific language governing permissions and
14 14 * limitations under the License.
15 15 */
16   -package org.thingsboard.server.common.transport.lwm2m;
  16 +package org.thingsboard.server.transport.lwm2m.config;
17 17
  18 +import com.google.common.io.Resources;
18 19 import lombok.Getter;
19 20 import lombok.Setter;
20 21 import lombok.extern.slf4j.Slf4j;
... ... @@ -38,38 +39,7 @@ import java.security.cert.CertificateException;
38 39 @Slf4j
39 40 @Component
40 41 @ConditionalOnExpression("('${service.type:null}'=='tb-transport' && '${transport.lwm2m.enabled:false}'=='true') || '${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core'")
41   -public class LwM2MTransportConfigServer {
42   -
43   - @Getter
44   - private String KEY_STORE_DEFAULT_RESOURCE_PATH = "credentials";
45   -
46   - @Getter
47   - private String KEY_STORE_DEFAULT_FILE = "serverKeyStore.jks";
48   -
49   - @Getter
50   - private String APP_DIR = "common";
51   -
52   - @Getter
53   - private String TRANSPORT_DIR = "transport";
54   -
55   - @Getter
56   - private String LWM2M_DIR = "lwm2m";
57   -
58   - @Getter
59   - private String SRC_DIR = "src";
60   -
61   - @Getter
62   - private String MAIN_DIR = "main";
63   -
64   - @Getter
65   - private String RESOURCES_DIR = "resources";
66   -
67   - @Getter
68   - private String BASE_DIR_PATH = System.getProperty("user.dir");
69   -
70   - @Getter
71   - // private String PATH_DATA_MICROSERVICE = "/usr/share/tb-lwm2m-transport/data$";
72   - private String PATH_DATA = "data";
  42 +public class LwM2MTransportServerConfig implements LwM2MSecureServerConfig {
73 43
74 44 @Getter
75 45 @Setter
... ... @@ -108,11 +78,11 @@ public class LwM2MTransportConfigServer {
108 78 private int unRegisteredPoolSize;
109 79
110 80 @Getter
111   - @Value("${transport.lwm2m.secure.key_store_type:}")
  81 + @Value("${transport.lwm2m.security.key_store_type:}")
112 82 private String keyStoreType;
113 83
114 84 @Getter
115   - @Value("${transport.lwm2m.secure.key_store_path_file:}")
  85 + @Value("${transport.lwm2m.security.key_store:}")
116 86 private String keyStorePathFile;
117 87
118 88 @Getter
... ... @@ -120,98 +90,64 @@ public class LwM2MTransportConfigServer {
120 90 private KeyStore keyStoreValue;
121 91
122 92 @Getter
123   - @Value("${transport.lwm2m.secure.key_store_password:}")
124   - private String keyStorePasswordServer;
  93 + @Value("${transport.lwm2m.security.key_store_password:}")
  94 + private String keyStorePassword;
125 95
126 96 @Getter
127   - @Value("${transport.lwm2m.secure.root_alias:}")
128   - private String rootAlias;
  97 + @Value("${transport.lwm2m.security.root_alias:}")
  98 + private String rootCertificateAlias;
129 99
130 100 @Getter
131   - @Value("${transport.lwm2m.secure.enable_gen_new_key_psk_rpk:}")
  101 + @Value("${transport.lwm2m.security.enable_gen_new_key_psk_rpk:}")
132 102 private Boolean enableGenNewKeyPskRpk;
133 103
134 104 @Getter
135 105 @Value("${transport.lwm2m.server.id:}")
136   - private Integer serverId;
  106 + private Integer id;
137 107
138 108 @Getter
139 109 @Value("${transport.lwm2m.server.bind_address:}")
140   - private String serverHost;
  110 + private String host;
141 111
142 112 @Getter
143   - @Value("${transport.lwm2m.server.secure.bind_address_security:}")
144   - private String serverHostSecurity;
  113 + @Value("${transport.lwm2m.server.bind_port:}")
  114 + private Integer port;
145 115
146 116 @Getter
147   - @Value("${transport.lwm2m.server.bind_port_no_sec:}")
148   - private Integer serverPortNoSec;
  117 + @Value("${transport.lwm2m.server.security.bind_address:}")
  118 + private String secureHost;
149 119
150 120 @Getter
151   - @Value("${transport.lwm2m.server.secure.bind_port_security:}")
152   - private Integer serverPortSecurity;
  121 + @Value("${transport.lwm2m.server.security.bind_port:}")
  122 + private Integer securePort;
153 123
154 124 @Getter
155   - @Value("${transport.lwm2m.server.secure.public_x:}")
156   - private String serverPublicX;
  125 + @Value("${transport.lwm2m.server.security.public_x:}")
  126 + private String publicX;
157 127
158 128 @Getter
159   - @Value("${transport.lwm2m.server.secure.public_y:}")
160   - private String serverPublicY;
  129 + @Value("${transport.lwm2m.server.security.public_y:}")
  130 + private String publicY;
161 131
162 132 @Getter
163   - @Value("${transport.lwm2m.server.secure.private_encoded:}")
164   - private String serverPrivateEncoded;
  133 + @Value("${transport.lwm2m.server.security.private_encoded:}")
  134 + private String privateEncoded;
165 135
166 136 @Getter
167   - @Value("${transport.lwm2m.server.secure.alias:}")
168   - private String serverAlias;
169   -
  137 + @Value("${transport.lwm2m.server.security.alias:}")
  138 + private String certificateAlias;
  139 +
  140 +
170 141 @PostConstruct
171 142 public void init() {
172   - this.getInKeyStore();
173   - }
174   -
175   - private KeyStore getInKeyStore() {
176 143 try {
177   - if (keyStoreValue != null && keyStoreValue.size() > 0)
178   - return keyStoreValue;
179   - } catch (KeyStoreException e) {
180   - log.error("Uninitialized keystore [{}]", keyStoreValue.toString());
181   - }
182   - Path keyStorePath = (keyStorePathFile != null && !keyStorePathFile.isEmpty()) ? Paths.get(keyStorePathFile) :
183   - (new File(Paths.get(getBaseDirPath(), PATH_DATA, KEY_STORE_DEFAULT_RESOURCE_PATH, KEY_STORE_DEFAULT_FILE).toUri()).isFile()) ?
184   - Paths.get(getBaseDirPath(), PATH_DATA, KEY_STORE_DEFAULT_RESOURCE_PATH, KEY_STORE_DEFAULT_FILE) :
185   - Paths.get(getBaseDirPath(), APP_DIR, TRANSPORT_DIR, LWM2M_DIR, SRC_DIR, MAIN_DIR, RESOURCES_DIR, KEY_STORE_DEFAULT_RESOURCE_PATH, KEY_STORE_DEFAULT_FILE);
186   - File keyStoreFile = new File(keyStorePath.toUri());
187   - if (keyStoreFile.isFile()) {
188   - try {
189   - InputStream inKeyStore = new FileInputStream(keyStoreFile);
190   - keyStoreValue = KeyStore.getInstance(keyStoreType);
191   - keyStoreValue.load(inKeyStore, keyStorePasswordServer == null ? null : keyStorePasswordServer.toCharArray());
192   - } catch (CertificateException | NoSuchAlgorithmException | IOException | KeyStoreException e) {
193   - log.error("[{}] Unable to load KeyStore files server, folder is not a directory", e.getMessage());
194   - keyStoreValue = null;
195   - }
196   - log.info("[{}] Load KeyStore files server, folder is a directory", keyStoreFile.getAbsoluteFile());
197   - } else {
198   - log.error("[{}] Unable to load KeyStore files server, is not a file", keyStoreFile.getAbsoluteFile());
199   - keyStoreValue = null;
200   - }
201   - return keyStoreValue;
202   - }
203   -
204   - private String getBaseDirPath() {
205   - Path FULL_FILE_PATH;
206   - if (BASE_DIR_PATH.endsWith("bin")) {
207   - FULL_FILE_PATH = Paths.get(BASE_DIR_PATH.replaceAll("bin$", ""));
208   - } else if (BASE_DIR_PATH.endsWith("conf")) {
209   - FULL_FILE_PATH = Paths.get(BASE_DIR_PATH.replaceAll("conf$", ""));
210   - } else if (BASE_DIR_PATH.endsWith("application")) {
211   - FULL_FILE_PATH = Paths.get(BASE_DIR_PATH.substring(0, BASE_DIR_PATH.length() - "application".length()));
212   - } else {
213   - FULL_FILE_PATH = Paths.get(BASE_DIR_PATH);
  144 + File keyStoreFile = new File(Resources.getResource(keyStorePathFile).toURI());
  145 + InputStream inKeyStore = new FileInputStream(keyStoreFile);
  146 + keyStoreValue = KeyStore.getInstance(keyStoreType);
  147 + keyStoreValue.load(inKeyStore, keyStorePassword == null ? null : keyStorePassword.toCharArray());
  148 + } catch (Exception e) {
  149 + log.error("Unable to lookup LwM2M keystore. Reason: " + e.getMessage(), e);
  150 + throw new RuntimeException("Failed to lookup LwM2M keystore", e);
214 151 }
215   - return FULL_FILE_PATH.toUri().getPath();
216 152 }
217 153 }
... ...
... ... @@ -27,7 +27,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceCreden
27 27 import org.thingsboard.server.gen.transport.TransportProtos.ValidateDeviceLwM2MCredentialsRequestMsg;
28 28 import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
29 29 import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportContextServer;
30   -import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler;
  30 +import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil;
31 31
32 32 import java.io.IOException;
33 33 import java.security.GeneralSecurityException;
... ... @@ -58,7 +58,7 @@ public class LwM2mCredentialsSecurityInfoValidator {
58 58 * @param keyValue -
59 59 * @return ValidateDeviceCredentialsResponseMsg and SecurityInfo
60 60 */
61   - public ReadResultSecurityStore createAndValidateCredentialsSecurityInfo(String endpoint, LwM2mTransportHandler.LwM2mTypeServer keyValue) {
  61 + public ReadResultSecurityStore createAndValidateCredentialsSecurityInfo(String endpoint, LwM2mTransportHandlerUtil.LwM2mTypeServer keyValue) {
62 62 CountDownLatch latch = new CountDownLatch(1);
63 63 final ReadResultSecurityStore[] resultSecurityStore = new ReadResultSecurityStore[1];
64 64 contextS.getTransportService().process(ValidateDeviceLwM2MCredentialsRequestMsg.newBuilder().setCredentialsId(endpoint).build(),
... ... @@ -68,7 +68,7 @@ public class LwM2mCredentialsSecurityInfoValidator {
68 68 String credentialsBody = msg.getCredentialsBody();
69 69 resultSecurityStore[0] = createSecurityInfo(endpoint, credentialsBody, keyValue);
70 70 resultSecurityStore[0].setMsg(msg);
71   - Optional<DeviceProfile> deviceProfileOpt = LwM2mTransportHandler.decode(msg.getProfileBody().toByteArray());
  71 + Optional<DeviceProfile> deviceProfileOpt = LwM2mTransportHandlerUtil.decode(msg.getProfileBody().toByteArray());
72 72 deviceProfileOpt.ifPresent(profile -> resultSecurityStore[0].setDeviceProfile(profile));
73 73 latch.countDown();
74 74 }
... ... @@ -81,7 +81,7 @@ public class LwM2mCredentialsSecurityInfoValidator {
81 81 }
82 82 });
83 83 try {
84   - latch.await(contextS.getLwM2MTransportConfigServer().getTimeout(), TimeUnit.MILLISECONDS);
  84 + latch.await(contextS.getLwM2MTransportServerConfig().getTimeout(), TimeUnit.MILLISECONDS);
85 85 } catch (InterruptedException e) {
86 86 log.error("Failed to await credentials!", e);
87 87 }
... ... @@ -95,9 +95,9 @@ public class LwM2mCredentialsSecurityInfoValidator {
95 95 * @param keyValue -
96 96 * @return SecurityInfo
97 97 */
98   - private ReadResultSecurityStore createSecurityInfo(String endPoint, String jsonStr, LwM2mTransportHandler.LwM2mTypeServer keyValue) {
  98 + private ReadResultSecurityStore createSecurityInfo(String endPoint, String jsonStr, LwM2mTransportHandlerUtil.LwM2mTypeServer keyValue) {
99 99 ReadResultSecurityStore result = new ReadResultSecurityStore();
100   - JsonObject objectMsg = LwM2mTransportHandler.validateJson(jsonStr);
  100 + JsonObject objectMsg = LwM2mTransportHandlerUtil.validateJson(jsonStr);
101 101 if (objectMsg != null && !objectMsg.isJsonNull()) {
102 102 JsonObject object = (objectMsg.has(keyValue.type) && !objectMsg.get(keyValue.type).isJsonNull()) ? objectMsg.get(keyValue.type).getAsJsonObject() : null;
103 103 /**
... ... @@ -108,7 +108,7 @@ public class LwM2mCredentialsSecurityInfoValidator {
108 108 && objectMsg.get("client").getAsJsonObject().get("endpoint").isJsonPrimitive()) ? objectMsg.get("client").getAsJsonObject().get("endpoint").getAsString() : null;
109 109 endPoint = (endPointPsk == null || endPointPsk.isEmpty()) ? endPoint : endPointPsk;
110 110 if (object != null && !object.isJsonNull()) {
111   - if (keyValue.equals(LwM2mTransportHandler.LwM2mTypeServer.BOOTSTRAP)) {
  111 + if (keyValue.equals(LwM2mTransportHandlerUtil.LwM2mTypeServer.BOOTSTRAP)) {
112 112 result.setBootstrapJsonCredential(object);
113 113 result.setEndPoint(endPoint);
114 114 result.setSecurityMode(LwM2MSecurityMode.fromSecurityMode(object.get("bootstrapServer").getAsJsonObject().get("securityMode").getAsString().toLowerCase()).code);
... ...
... ... @@ -26,8 +26,8 @@ import org.eclipse.leshan.server.registration.RegistrationUpdate;
26 26
27 27 import java.util.Collection;
28 28
29   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_INFO;
30   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromObjectIdToIdVer;
  29 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_INFO;
  30 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromObjectIdToIdVer;
31 31
32 32 @Slf4j
33 33 public class LwM2mServerListener {
... ...
... ... @@ -43,7 +43,7 @@ import org.thingsboard.server.common.transport.TransportContext;
43 43 import org.thingsboard.server.common.transport.TransportResourceCache;
44 44 import org.thingsboard.server.common.transport.TransportService;
45 45 import org.thingsboard.server.common.transport.TransportServiceCallback;
46   -import org.thingsboard.server.common.transport.lwm2m.LwM2MTransportConfigServer;
  46 +import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
47 47 import org.thingsboard.server.gen.transport.TransportProtos;
48 48 import org.thingsboard.server.gen.transport.TransportProtos.PostAttributeMsg;
49 49 import org.thingsboard.server.gen.transport.TransportProtos.PostTelemetryMsg;
... ... @@ -57,7 +57,7 @@ import java.util.ArrayList;
57 57 import java.util.List;
58 58
59 59 import static org.thingsboard.server.gen.transport.TransportProtos.KeyValueType.BOOLEAN_V;
60   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_TELEMETRY;
  60 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_TELEMETRY;
61 61
62 62 @Slf4j
63 63 @Component
... ... @@ -65,7 +65,7 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandle
65 65 public class LwM2mTransportContextServer extends TransportContext {
66 66
67 67
68   - private final LwM2MTransportConfigServer lwM2MTransportConfigServer;
  68 + private final LwM2MTransportServerConfig lwM2MTransportServerConfig;
69 69
70 70 private final TransportService transportService;
71 71
... ... @@ -75,15 +75,15 @@ public class LwM2mTransportContextServer extends TransportContext {
75 75 @Getter
76 76 private final LwM2MJsonAdaptor adaptor;
77 77
78   - public LwM2mTransportContextServer(LwM2MTransportConfigServer lwM2MTransportConfigServer, TransportService transportService, TransportResourceCache transportResourceCache, LwM2MJsonAdaptor adaptor) {
79   - this.lwM2MTransportConfigServer = lwM2MTransportConfigServer;
  78 + public LwM2mTransportContextServer(LwM2MTransportServerConfig lwM2MTransportServerConfig, TransportService transportService, TransportResourceCache transportResourceCache, LwM2MJsonAdaptor adaptor) {
  79 + this.lwM2MTransportServerConfig = lwM2MTransportServerConfig;
80 80 this.transportService = transportService;
81 81 this.transportResourceCache = transportResourceCache;
82 82 this.adaptor = adaptor;
83 83 }
84 84
85   - public LwM2MTransportConfigServer getLwM2MTransportConfigServer() {
86   - return this.lwM2MTransportConfigServer;
  85 + public LwM2MTransportServerConfig getLwM2MTransportServerConfig() {
  86 + return this.lwM2MTransportServerConfig;
87 87 }
88 88
89 89 public TransportResourceCache getTransportResourceCache() {
... ...
common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mTransportHandlerUtil.java renamed from common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2mTransportHandler.java
... ... @@ -67,7 +67,7 @@ import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPA
67 67 import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_PATH;
68 68
69 69 @Slf4j
70   -public class LwM2mTransportHandler {
  70 +public class LwM2mTransportHandlerUtil {
71 71
72 72 public static final String TRANSPORT_DEFAULT_LWM2M_VERSION = "1.0";
73 73 public static final String CLIENT_LWM2M_SETTINGS = "clientLwM2mSettings";
... ... @@ -256,7 +256,7 @@ public class LwM2mTransportHandler {
256 256 ObjectMapper mapper = new ObjectMapper();
257 257 String profileStr = mapper.writeValueAsString(profile);
258 258 JsonObject profileJson = (profileStr != null) ? validateJson(profileStr) : null;
259   - return getValidateCredentialsBodyFromThingsboard(profileJson) ? LwM2mTransportHandler.getNewProfileParameters(profileJson, deviceProfile.getTenantId()) : null;
  259 + return getValidateCredentialsBodyFromThingsboard(profileJson) ? LwM2mTransportHandlerUtil.getNewProfileParameters(profileJson, deviceProfile.getTenantId()) : null;
260 260 } catch (IOException e) {
261 261 log.error("", e);
262 262 }
... ...
... ... @@ -66,18 +66,18 @@ import java.util.stream.Collectors;
66 66 import static org.eclipse.californium.core.coap.CoAP.ResponseCode.CONTENT;
67 67 import static org.eclipse.leshan.core.ResponseCode.BAD_REQUEST;
68 68 import static org.eclipse.leshan.core.ResponseCode.NOT_FOUND;
69   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.DEFAULT_TIMEOUT;
70   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.FR_PATH_RESOURCE_VER_ID;
71   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_ERROR;
72   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_INFO;
73   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_VALUE;
74   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper;
75   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.OBSERVE_CANCEL;
76   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.OBSERVE_READ_ALL;
77   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.RESPONSE_CHANNEL;
78   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromIdVerToObjectId;
79   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromObjectIdToIdVer;
80   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.createWriteAttributeRequest;
  69 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.DEFAULT_TIMEOUT;
  70 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.FR_PATH_RESOURCE_VER_ID;
  71 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_ERROR;
  72 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_INFO;
  73 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_VALUE;
  74 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper;
  75 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.OBSERVE_CANCEL;
  76 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.OBSERVE_READ_ALL;
  77 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.RESPONSE_CHANNEL;
  78 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromIdVerToObjectId;
  79 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromObjectIdToIdVer;
  80 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.createWriteAttributeRequest;
81 81
82 82 @Slf4j
83 83 @Service
... ... @@ -110,7 +110,7 @@ public class LwM2mTransportRequest {
110 110 @PostConstruct
111 111 public void init() {
112 112 this.converter = LwM2mValueConverterImpl.getInstance();
113   - executorResponse = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getResponsePoolSize(),
  113 + executorResponse = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getResponsePoolSize(),
114 114 new NamedThreadFactory(String.format("LwM2M %s channel response", RESPONSE_CHANNEL)));
115 115 }
116 116
... ... @@ -161,7 +161,7 @@ public class LwM2mTransportRequest {
161 161 leshanServer.getObservationService().cancelObservations(registration, target);
162 162 break;
163 163 case EXECUTE:
164   - resourceModel = lwM2MClient.getResourceModel(targetIdVer, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer()
  164 + resourceModel = lwM2MClient.getResourceModel(targetIdVer, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig()
165 165 .getModelProvider());
166 166 if (params != null && !resourceModel.multiple) {
167 167 request = new ExecuteRequest(target, (String) this.converter.convertValue(params, resourceModel.type, ResourceModel.Type.STRING, resultIds));
... ... @@ -171,7 +171,7 @@ public class LwM2mTransportRequest {
171 171 break;
172 172 case WRITE_REPLACE:
173 173 // Request to write a <b>String Single-Instance Resource</b> using the TLV content format.
174   - resourceModel = lwM2MClient.getResourceModel(targetIdVer, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer()
  174 + resourceModel = lwM2MClient.getResourceModel(targetIdVer, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig()
175 175 .getModelProvider());
176 176 if (contentFormat.equals(ContentFormat.TLV)) {
177 177 request = this.getWriteRequestSingleResource(null, resultIds.getObjectId(),
... ...
... ... @@ -31,7 +31,9 @@ import org.eclipse.leshan.server.security.EditableSecurityStore;
31 31 import org.eclipse.leshan.server.security.SecurityChecker;
32 32 import org.springframework.context.annotation.Bean;
33 33 import org.springframework.stereotype.Component;
  34 +import org.thingsboard.server.common.data.StringUtils;
34 35 import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
  36 +import org.thingsboard.server.transport.lwm2m.config.LwM2MTransportServerConfig;
35 37 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext;
36 38 import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl;
37 39
... ... @@ -83,13 +85,13 @@ public class LwM2mTransportServerConfiguration {
83 85 @Bean
84 86 public LeshanServer getLeshanServer() {
85 87 log.info("Starting LwM2M transport Server... PostConstruct");
86   - return this.getLhServer(this.context.getLwM2MTransportConfigServer().getServerPortNoSec(), this.context.getLwM2MTransportConfigServer().getServerPortSecurity());
  88 + return this.getLhServer(this.context.getLwM2MTransportServerConfig().getPort(), this.context.getLwM2MTransportServerConfig().getSecurePort());
87 89 }
88 90
89 91 private LeshanServer getLhServer(Integer serverPortNoSec, Integer serverSecurePort) {
90 92 LeshanServerBuilder builder = new LeshanServerBuilder();
91   - builder.setLocalAddress(this.context.getLwM2MTransportConfigServer().getServerHost(), serverPortNoSec);
92   - builder.setLocalSecureAddress(this.context.getLwM2MTransportConfigServer().getServerHostSecurity(), serverSecurePort);
  93 + builder.setLocalAddress(this.context.getLwM2MTransportServerConfig().getHost(), serverPortNoSec);
  94 + builder.setLocalSecureAddress(this.context.getLwM2MTransportServerConfig().getSecureHost(), serverSecurePort);
93 95 builder.setDecoder(new DefaultLwM2mNodeDecoder());
94 96 /** Use a magic converter to support bad type send by the UI. */
95 97 builder.setEncoder(new DefaultLwM2mNodeEncoder(LwM2mValueConverterImpl.getInstance()));
... ... @@ -102,7 +104,7 @@ public class LwM2mTransportServerConfiguration {
102 104
103 105 /** Define model provider (Create Models )*/
104 106 LwM2mModelProvider modelProvider = new LwM2mVersionedModelProvider(this.lwM2mClientContext, this.context);
105   - this.context.getLwM2MTransportConfigServer().setModelProvider(modelProvider);
  107 + this.context.getLwM2MTransportServerConfig().setModelProvider(modelProvider);
106 108 builder.setObjectModelProvider(modelProvider);
107 109
108 110 /** Create credentials */
... ... @@ -116,8 +118,8 @@ public class LwM2mTransportServerConfiguration {
116 118 /** Create DTLS Config */
117 119 DtlsConnectorConfig.Builder dtlsConfig = new DtlsConnectorConfig.Builder();
118 120 dtlsConfig.setServerOnly(true);
119   - dtlsConfig.setRecommendedSupportedGroupsOnly(this.context.getLwM2MTransportConfigServer().isRecommendedSupportedGroups());
120   - dtlsConfig.setRecommendedCipherSuitesOnly(this.context.getLwM2MTransportConfigServer().isRecommendedCiphers());
  121 + dtlsConfig.setRecommendedSupportedGroupsOnly(this.context.getLwM2MTransportServerConfig().isRecommendedSupportedGroups());
  122 + dtlsConfig.setRecommendedCipherSuitesOnly(this.context.getLwM2MTransportServerConfig().isRecommendedCiphers());
121 123 if (this.pskMode) {
122 124 dtlsConfig.setSupportedCipherSuites(
123 125 TLS_PSK_WITH_AES_128_CCM_8,
... ... @@ -139,9 +141,9 @@ public class LwM2mTransportServerConfiguration {
139 141
140 142 private void setServerWithCredentials(LeshanServerBuilder builder) {
141 143 try {
142   - if (this.context.getLwM2MTransportConfigServer().getKeyStoreValue() != null) {
  144 + if (this.context.getLwM2MTransportServerConfig().getKeyStoreValue() != null) {
143 145 if (this.setBuilderX509(builder)) {
144   - X509Certificate rootCAX509Cert = (X509Certificate) this.context.getLwM2MTransportConfigServer().getKeyStoreValue().getCertificate(this.context.getLwM2MTransportConfigServer().getRootAlias());
  146 + X509Certificate rootCAX509Cert = (X509Certificate) this.context.getLwM2MTransportServerConfig().getKeyStoreValue().getCertificate(this.context.getLwM2MTransportServerConfig().getRootCertificateAlias());
145 147 if (rootCAX509Cert != null) {
146 148 X509Certificate[] trustedCertificates = new X509Certificate[1];
147 149 trustedCertificates[0] = rootCAX509Cert;
... ... @@ -175,17 +177,11 @@ public class LwM2mTransportServerConfiguration {
175 177 }
176 178
177 179 private boolean setBuilderX509(LeshanServerBuilder builder) {
178   - /**
179   - * For deb => KeyStorePathFile == yml or commandline: KEY_STORE_PATH_FILE
180   - * For idea => KeyStorePathResource == common/transport/lwm2m/src/main/resources/credentials: in LwM2MTransportContextServer: credentials/serverKeyStore.jks
181   - */
182 180 try {
183   - X509Certificate serverCertificate = (X509Certificate) this.context.getLwM2MTransportConfigServer().getKeyStoreValue().getCertificate(this.context.getLwM2MTransportConfigServer().getServerAlias());
184   - PrivateKey privateKey = (PrivateKey) this.context.getLwM2MTransportConfigServer().getKeyStoreValue().getKey(this.context.getLwM2MTransportConfigServer().getServerAlias(), this.context.getLwM2MTransportConfigServer().getKeyStorePasswordServer() == null ? null : this.context.getLwM2MTransportConfigServer().getKeyStorePasswordServer().toCharArray());
  181 + X509Certificate serverCertificate = (X509Certificate) this.context.getLwM2MTransportServerConfig().getKeyStoreValue().getCertificate(this.context.getLwM2MTransportServerConfig().getCertificateAlias());
  182 + PrivateKey privateKey = (PrivateKey) this.context.getLwM2MTransportServerConfig().getKeyStoreValue().getKey(this.context.getLwM2MTransportServerConfig().getCertificateAlias(), this.context.getLwM2MTransportServerConfig().getKeyStorePassword() == null ? null : this.context.getLwM2MTransportServerConfig().getKeyStorePassword().toCharArray());
185 183 PublicKey publicKey = serverCertificate.getPublicKey();
186   - if (serverCertificate != null &&
187   - privateKey != null && privateKey.getEncoded().length > 0 &&
188   - publicKey != null && publicKey.getEncoded().length > 0) {
  184 + if (privateKey != null && privateKey.getEncoded().length > 0 && publicKey != null && publicKey.getEncoded().length > 0) {
189 185 builder.setPublicKey(serverCertificate.getPublicKey());
190 186 builder.setPrivateKey(privateKey);
191 187 builder.setCertificateChain(new X509Certificate[]{serverCertificate});
... ... @@ -212,10 +208,12 @@ public class LwM2mTransportServerConfiguration {
212 208 }
213 209
214 210 private void infoPramsUri(String mode) {
215   - log.info("Server uses [{}]: serverNoSecureURI : [{}], serverSecureURI : [{}]",
216   - mode,
217   - this.context.getLwM2MTransportConfigServer().getServerHost() + ":" + this.context.getLwM2MTransportConfigServer().getServerPortNoSec(),
218   - this.context.getLwM2MTransportConfigServer().getServerHostSecurity() + ":" + this.context.getLwM2MTransportConfigServer().getServerPortSecurity());
  211 + LwM2MTransportServerConfig lwM2MTransportServerConfig = this.context.getLwM2MTransportServerConfig();
  212 + log.info("Server uses [{}]: serverNoSecureURI : [{}:{}], serverSecureURI : [{}:{}]", mode,
  213 + lwM2MTransportServerConfig.getHost(),
  214 + lwM2MTransportServerConfig.getPort(),
  215 + lwM2MTransportServerConfig.getSecureHost(),
  216 + lwM2MTransportServerConfig.getSecurePort());
219 217 }
220 218
221 219 private boolean setServerRPK(LeshanServerBuilder builder) {
... ... @@ -233,39 +231,26 @@ public class LwM2mTransportServerConfiguration {
233 231 return false;
234 232 }
235 233
236   -
237   - /**
238   - * From yml: server
239   - * public_x: "${LWM2M_SERVER_PUBLIC_X:405354ea8893471d9296afbc8b020a5c6201b0bb25812a53b849d4480fa5f069}"
240   - * public_y: "${LWM2M_SERVER_PUBLIC_Y:30c9237e946a3a1692c1cafaa01a238a077f632c99371348337512363f28212b}"
241   - * private_encoded: "${LWM2M_SERVER_PRIVATE_ENCODED:274671fe40ce937b8a6352cf0a418e8a39e4bf0bb9bf74c910db953c20c73802}"
242   - */
243 234 private void generateKeyForRPK() throws NoSuchAlgorithmException, InvalidParameterSpecException, InvalidKeySpecException {
244 235 /** Get Elliptic Curve Parameter spec for secp256r1 */
245 236 AlgorithmParameters algoParameters = AlgorithmParameters.getInstance("EC");
246 237 algoParameters.init(new ECGenParameterSpec("secp256r1"));
247 238 ECParameterSpec parameterSpec = algoParameters.getParameterSpec(ECParameterSpec.class);
248   - if (this.context.getLwM2MTransportConfigServer().getServerPublicX() != null &&
249   - !this.context.getLwM2MTransportConfigServer().getServerPublicX().isEmpty() &&
250   - this.context.getLwM2MTransportConfigServer().getServerPublicY() != null &&
251   - !this.context.getLwM2MTransportConfigServer().getServerPublicY().isEmpty()) {
252   - /** Get point values */
253   - byte[] publicX = Hex.decodeHex(this.context.getLwM2MTransportConfigServer().getServerPublicX().toCharArray());
254   - byte[] publicY = Hex.decodeHex(this.context.getLwM2MTransportConfigServer().getServerPublicY().toCharArray());
255   - /** Create key specs */
  239 + LwM2MTransportServerConfig serverConfig = this.context.getLwM2MTransportServerConfig();
  240 + if (StringUtils.isNotEmpty(serverConfig.getPublicX()) && StringUtils.isNotEmpty(serverConfig.getPublicY())) {
  241 + byte[] publicX = Hex.decodeHex(serverConfig.getPublicX().toCharArray());
  242 + byte[] publicY = Hex.decodeHex(serverConfig.getPublicY().toCharArray());
256 243 KeySpec publicKeySpec = new ECPublicKeySpec(new ECPoint(new BigInteger(publicX), new BigInteger(publicY)),
257 244 parameterSpec);
258   - /** Get keys */
259 245 this.publicKey = KeyFactory.getInstance("EC").generatePublic(publicKeySpec);
260 246 }
261   - if (this.context.getLwM2MTransportConfigServer().getServerPrivateEncoded() != null &&
262   - !this.context.getLwM2MTransportConfigServer().getServerPrivateEncoded().isEmpty()) {
263   - /** Get private key */
264   - byte[] privateS = Hex.decodeHex(this.context.getLwM2MTransportConfigServer().getServerPrivateEncoded().toCharArray());
  247 + String privateEncodedKey = serverConfig.getPrivateEncoded();
  248 + if (StringUtils.isNotEmpty(privateEncodedKey)) {
  249 + byte[] privateS = Hex.decodeHex(privateEncodedKey.toCharArray());
265 250 try {
266 251 this.privateKey = KeyFactory.getInstance("EC").generatePrivate(new PKCS8EncodedKeySpec(privateS));
267 252 } catch (InvalidKeySpecException ignore2) {
268   - log.error("Invalid Server rpk.PrivateKey.getEncoded () [{}}]. PrivateKey has no EC algorithm", this.context.getLwM2MTransportConfigServer().getServerPrivateEncoded());
  253 + log.error("Invalid Server rpk.PrivateKey.getEncoded () [{}}]. PrivateKey has no EC algorithm", privateEncodedKey);
269 254 }
270 255 }
271 256 }
... ...
... ... @@ -41,7 +41,7 @@ public class LwM2mTransportServerInitializer {
41 41
42 42 @PostConstruct
43 43 public void init() {
44   - if (this.context.getLwM2MTransportConfigServer().getEnableGenNewKeyPskRpk()) {
  44 + if (this.context.getLwM2MTransportServerConfig().getEnableGenNewKeyPskRpk()) {
45 45 new LWM2MGenerationPSkRPkECC();
46 46 }
47 47 this.startLhServer();
... ...
... ... @@ -84,29 +84,29 @@ import static org.eclipse.californium.core.coap.CoAP.ResponseCode.BAD_REQUEST;
84 84 import static org.eclipse.leshan.core.attributes.Attribute.OBJECT_VERSION;
85 85 import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_KEY;
86 86 import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_PATH;
87   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.CLIENT_NOT_AUTHORIZED;
88   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.DEVICE_ATTRIBUTES_REQUEST;
89   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.FR_PATH_RESOURCE_VER_ID;
90   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_ERROR;
91   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_INFO;
92   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LOG_LW2M_VALUE;
93   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LWM2M_STRATEGY_2;
94   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper;
95   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.DISCOVER;
96   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.EXECUTE;
97   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.OBSERVE;
98   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.OBSERVE_CANCEL;
99   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.OBSERVE_READ_ALL;
100   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.READ;
101   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.WRITE_ATTRIBUTES;
102   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.WRITE_REPLACE;
103   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper.WRITE_UPDATE;
104   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.SERVICE_CHANNEL;
105   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertJsonArrayToSet;
106   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromIdVerToObjectId;
107   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromObjectIdToIdVer;
108   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getAckCallback;
109   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validateObjectVerFromKey;
  87 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.CLIENT_NOT_AUTHORIZED;
  88 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.DEVICE_ATTRIBUTES_REQUEST;
  89 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.FR_PATH_RESOURCE_VER_ID;
  90 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_ERROR;
  91 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_INFO;
  92 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LOG_LW2M_VALUE;
  93 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LWM2M_STRATEGY_2;
  94 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper;
  95 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.DISCOVER;
  96 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.EXECUTE;
  97 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.OBSERVE;
  98 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.OBSERVE_CANCEL;
  99 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.OBSERVE_READ_ALL;
  100 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.READ;
  101 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.WRITE_ATTRIBUTES;
  102 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.WRITE_REPLACE;
  103 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper.WRITE_UPDATE;
  104 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.SERVICE_CHANNEL;
  105 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertJsonArrayToSet;
  106 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromIdVerToObjectId;
  107 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromObjectIdToIdVer;
  108 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.getAckCallback;
  109 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.validateObjectVerFromKey;
110 110
111 111 @Slf4j
112 112 @Service
... ... @@ -143,12 +143,12 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
143 143
144 144 @PostConstruct
145 145 public void init() {
146   - this.lwM2mTransportContextServer.getScheduler().scheduleAtFixedRate(this::checkInactivityAndReportActivity, new Random().nextInt((int) lwM2mTransportContextServer.getLwM2MTransportConfigServer().getSessionReportTimeout()), lwM2mTransportContextServer.getLwM2MTransportConfigServer().getSessionReportTimeout(), TimeUnit.MILLISECONDS);
147   - this.executorRegistered = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getRegisteredPoolSize(),
  146 + this.lwM2mTransportContextServer.getScheduler().scheduleAtFixedRate(this::checkInactivityAndReportActivity, new Random().nextInt((int) lwM2mTransportContextServer.getLwM2MTransportServerConfig().getSessionReportTimeout()), lwM2mTransportContextServer.getLwM2MTransportServerConfig().getSessionReportTimeout(), TimeUnit.MILLISECONDS);
  147 + this.executorRegistered = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getRegisteredPoolSize(),
148 148 new NamedThreadFactory(String.format("LwM2M %s channel registered", SERVICE_CHANNEL)));
149   - this.executorUpdateRegistered = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getUpdateRegisteredPoolSize(),
  149 + this.executorUpdateRegistered = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getUpdateRegisteredPoolSize(),
150 150 new NamedThreadFactory(String.format("LwM2M %s channel update registered", SERVICE_CHANNEL)));
151   - this.executorUnRegistered = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getUnRegisteredPoolSize(),
  151 + this.executorUnRegistered = Executors.newFixedThreadPool(this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getUnRegisteredPoolSize(),
152 152 new NamedThreadFactory(String.format("LwM2M %s channel un registered", SERVICE_CHANNEL)));
153 153 this.converter = LwM2mValueConverterImpl.getInstance();
154 154 }
... ... @@ -281,7 +281,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
281 281 Set<Observation> observations = leshanServer.getObservationService().getObservations(registration);
282 282 observations.forEach(observation -> lwM2mTransportRequest.sendAllRequest(registration,
283 283 convertPathFromObjectIdToIdVer(observation.getPath().toString(), registration), OBSERVE_CANCEL,
284   - null, null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null));
  284 + null, null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null));
285 285 }
286 286 }
287 287
... ... @@ -339,7 +339,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
339 339 this.getInfoFirmwareUpdate(lwM2MClient);
340 340 }
341 341 if (pathIdVer != null) {
342   - ResourceModel resourceModel = lwM2MClient.getResourceModel(pathIdVer, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer()
  342 + ResourceModel resourceModel = lwM2MClient.getResourceModel(pathIdVer, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig()
343 343 .getModelProvider());
344 344 if (resourceModel != null && resourceModel.operations.isWritable()) {
345 345 this.updateResourcesValueToClient(lwM2MClient, this.getResourceValueFormatKv(lwM2MClient, pathIdVer), valueNew, pathIdVer);
... ... @@ -404,7 +404,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
404 404 @Override
405 405 public void onResourceUpdate(Optional<TransportProtos.ResourceUpdateMsg> resourceUpdateMsgOpt) {
406 406 String idVer = resourceUpdateMsgOpt.get().getResourceKey();
407   - lwM2mClientContext.getLwM2mClients().values().stream().forEach(e -> e.updateResourceModel(idVer, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getModelProvider()));
  407 + lwM2mClientContext.getLwM2mClients().values().stream().forEach(e -> e.updateResourceModel(idVer, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getModelProvider()));
408 408 }
409 409
410 410 /**
... ... @@ -413,7 +413,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
413 413 @Override
414 414 public void onResourceDelete(Optional<TransportProtos.ResourceDeleteMsg> resourceDeleteMsgOpt) {
415 415 String pathIdVer = resourceDeleteMsgOpt.get().getResourceKey();
416   - lwM2mClientContext.getLwM2mClients().values().stream().forEach(e -> e.deleteResources(pathIdVer, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getModelProvider()));
  416 + lwM2mClientContext.getLwM2mClients().values().stream().forEach(e -> e.deleteResources(pathIdVer, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getModelProvider()));
417 417 }
418 418
419 419 @Override
... ... @@ -429,7 +429,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
429 429 } else {
430 430 lwM2mTransportRequest.sendAllRequest(registration, lwm2mClientRpcRequest.getTargetIdVer(), lwm2mClientRpcRequest.getTypeOper(), lwm2mClientRpcRequest.getContentFormatName(),
431 431 lwm2mClientRpcRequest.getValue() == null ? lwm2mClientRpcRequest.getParams() : lwm2mClientRpcRequest.getValue(),
432   - this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), lwm2mClientRpcRequest);
  432 + this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), lwm2mClientRpcRequest);
433 433 }
434 434 } catch (Exception e) {
435 435 if (lwm2mClientRpcRequest == null) {
... ... @@ -457,7 +457,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
457 457 lwm2mClientRpcRequest.setRequestId(toDeviceRequest.getRequestId());
458 458 lwm2mClientRpcRequest.setSessionInfo(sessionInfo);
459 459 lwm2mClientRpcRequest.setValidTypeOper(toDeviceRequest.getMethodName());
460   - JsonObject rpcRequest = LwM2mTransportHandler.validateJson(toDeviceRequest.getParams());
  460 + JsonObject rpcRequest = LwM2mTransportHandlerUtil.validateJson(toDeviceRequest.getParams());
461 461 if (rpcRequest != null) {
462 462 if (rpcRequest.has(lwm2mClientRpcRequest.keyNameKey)) {
463 463 String targetIdVer = this.getPresentPathIntoProfile(sessionInfo,
... ... @@ -546,7 +546,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
546 546 @Override
547 547 public void doTrigger(Registration registration, String path) {
548 548 lwM2mTransportRequest.sendAllRequest(registration, path, EXECUTE,
549   - ContentFormat.TLV.getName(), null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  549 + ContentFormat.TLV.getName(), null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
550 550 }
551 551
552 552 /**
... ... @@ -636,11 +636,11 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
636 636 LwM2mClientProfile lwM2MClientProfile = lwM2mClientContext.getProfile(registration);
637 637 Set<String> clientObjects = lwM2mClientContext.getSupportedIdVerInClient(registration);
638 638 if (clientObjects != null && clientObjects.size() > 0) {
639   - if (LWM2M_STRATEGY_2 == LwM2mTransportHandler.getClientOnlyObserveAfterConnect(lwM2MClientProfile)) {
  639 + if (LWM2M_STRATEGY_2 == LwM2mTransportHandlerUtil.getClientOnlyObserveAfterConnect(lwM2MClientProfile)) {
640 640 // #2
641 641 lwM2MClient.getPendingReadRequests().addAll(clientObjects);
642 642 clientObjects.forEach(path -> lwM2mTransportRequest.sendAllRequest(registration, path, READ, ContentFormat.TLV.getName(),
643   - null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null));
  643 + null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null));
644 644 }
645 645 // #1
646 646 this.initReadAttrTelemetryObserveToClient(registration, lwM2MClient, READ, clientObjects);
... ... @@ -689,7 +689,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
689 689 */
690 690 private void updateResourcesValue(Registration registration, LwM2mResource lwM2mResource, String path) {
691 691 LwM2mClient lwM2MClient = lwM2mClientContext.getLwM2mClientWithReg(registration, null);
692   - if (lwM2MClient.saveResourceValue(path, lwM2mResource, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer()
  692 + if (lwM2MClient.saveResourceValue(path, lwM2mResource, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig()
693 693 .getModelProvider())) {
694 694 if (FR_PATH_RESOURCE_VER_ID.equals(convertPathFromIdVerToObjectId(path)) &&
695 695 lwM2MClient.getFrUpdate().getCurrentFwVersion() != null
... ... @@ -780,7 +780,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
780 780 ConcurrentHashMap<String, Object> finalParams = params;
781 781 pathSend.forEach(target -> {
782 782 lwM2mTransportRequest.sendAllRequest(registration, target, typeOper, ContentFormat.TLV.getName(),
783   - finalParams != null ? finalParams.get(target) : null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  783 + finalParams != null ? finalParams.get(target) : null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
784 784 });
785 785 if (OBSERVE.equals(typeOper)) {
786 786 lwM2MClient.initReadValue(this, null);
... ... @@ -1094,10 +1094,10 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1094 1094 if (pathIds.isResource()) {
1095 1095 if (READ.equals(typeOper)) {
1096 1096 lwM2mTransportRequest.sendAllRequest(registration, target, typeOper,
1097   - ContentFormat.TLV.getName(), null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1097 + ContentFormat.TLV.getName(), null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1098 1098 } else if (OBSERVE.equals(typeOper)) {
1099 1099 lwM2mTransportRequest.sendAllRequest(registration, target, typeOper,
1100   - null, null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1100 + null, null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1101 1101 }
1102 1102 }
1103 1103 });
... ... @@ -1153,7 +1153,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1153 1153 if (!pathSend.isEmpty()) {
1154 1154 ConcurrentHashMap<String, Object> finalParams = lwm2mAttributesNew;
1155 1155 pathSend.forEach(target -> lwM2mTransportRequest.sendAllRequest(registration, target, WRITE_ATTRIBUTES, ContentFormat.TLV.getName(),
1156   - finalParams.get(target), this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null));
  1156 + finalParams.get(target), this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null));
1157 1157 }
1158 1158 });
1159 1159 }
... ... @@ -1170,7 +1170,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1170 1170 params.clear();
1171 1171 params.put(OBJECT_VERSION, "");
1172 1172 lwM2mTransportRequest.sendAllRequest(registration, target, WRITE_ATTRIBUTES, ContentFormat.TLV.getName(),
1173   - params, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1173 + params, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1174 1174 });
1175 1175 }
1176 1176 });
... ... @@ -1183,7 +1183,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1183 1183 paramAnallyzer.forEach(pathIdVer -> {
1184 1184 if (this.getResourceValueFromLwM2MClient(lwM2MClient, pathIdVer) != null) {
1185 1185 lwM2mTransportRequest.sendAllRequest(registration, pathIdVer, OBSERVE_CANCEL, null,
1186   - null, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1186 + null, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1187 1187 }
1188 1188 }
1189 1189 );
... ... @@ -1193,7 +1193,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1193 1193 if (valueNew != null && (valueOld == null || !valueNew.toString().equals(valueOld.toString()))) {
1194 1194 lwM2mTransportRequest.sendAllRequest(lwM2MClient.getRegistration(), path, WRITE_REPLACE,
1195 1195 ContentFormat.TLV.getName(), valueNew,
1196   - this.lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1196 + this.lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1197 1197 } else {
1198 1198 log.error("Failed update resource [{}] [{}]", path, valueNew);
1199 1199 String logMsg = String.format("%s: Failed update resource path - %s value - %s. Value is not changed or bad",
... ... @@ -1406,7 +1406,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1406 1406 public void readRequestToClientFirmwareVer(Registration registration) {
1407 1407 String pathIdVer = convertPathFromObjectIdToIdVer(FR_PATH_RESOURCE_VER_ID, registration);
1408 1408 lwM2mTransportRequest.sendAllRequest(registration, pathIdVer, READ, ContentFormat.TLV.getName(),
1409   - null, lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1409 + null, lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1410 1410 }
1411 1411
1412 1412 /**
... ... @@ -1422,7 +1422,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1422 1422 String verSupportedObject = lwM2MClient.getRegistration().getSupportedObject().get(objectId);
1423 1423 String targetIdVer = LWM2M_SEPARATOR_PATH + objectId + LWM2M_SEPARATOR_KEY + verSupportedObject + LWM2M_SEPARATOR_PATH + 0 + LWM2M_SEPARATOR_PATH + 0;
1424 1424 lwM2mTransportRequest.sendAllRequest(lwM2MClient.getRegistration(), targetIdVer, WRITE_REPLACE, ContentFormat.OPAQUE.getName(),
1425   - firmwareChunk, lwM2mTransportContextServer.getLwM2MTransportConfigServer().getTimeout(), null);
  1425 + firmwareChunk, lwM2mTransportContextServer.getLwM2MTransportServerConfig().getTimeout(), null);
1426 1426 log.warn("updateFirmwareClient [{}] [{}]", lwM2MClient.getFrUpdate().getCurrentFwVersion(), lwM2MClient.getFrUpdate().getClientFwVersion());
1427 1427 }
1428 1428 }
... ... @@ -1444,7 +1444,7 @@ public class LwM2mTransportServiceImpl implements LwM2mTransportService {
1444 1444 }
1445 1445
1446 1446 private boolean validateResourceInModel(LwM2mClient lwM2mClient, String pathIdVer, boolean isWritableNotOptional) {
1447   - ResourceModel resourceModel = lwM2mClient.getResourceModel(pathIdVer, this.lwM2mTransportContextServer.getLwM2MTransportConfigServer()
  1447 + ResourceModel resourceModel = lwM2mClient.getResourceModel(pathIdVer, this.lwM2mTransportContextServer.getLwM2MTransportServerConfig()
1448 1448 .getModelProvider());
1449 1449 Integer objectId = new LwM2mPath(convertPathFromIdVerToObjectId(pathIdVer)).getObjectId();
1450 1450 String objectVer = validateObjectVerFromKey(pathIdVer);
... ...
... ... @@ -42,9 +42,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
42 42 import java.util.stream.Collectors;
43 43
44 44 import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_PATH;
45   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.TRANSPORT_DEFAULT_LWM2M_VERSION;
46   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromIdVerToObjectId;
47   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.getVerFromPathIdVerOrId;
  45 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.TRANSPORT_DEFAULT_LWM2M_VERSION;
  46 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromIdVerToObjectId;
  47 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.getVerFromPathIdVerOrId;
48 48
49 49 @Slf4j
50 50 @Data
... ...
... ... @@ -25,7 +25,7 @@ import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
25 25 import org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode;
26 26 import org.thingsboard.server.transport.lwm2m.secure.LwM2mCredentialsSecurityInfoValidator;
27 27 import org.thingsboard.server.transport.lwm2m.secure.ReadResultSecurityStore;
28   -import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler;
  28 +import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil;
29 29
30 30 import java.util.Arrays;
31 31 import java.util.Map;
... ... @@ -34,7 +34,7 @@ import java.util.UUID;
34 34 import java.util.concurrent.ConcurrentHashMap;
35 35
36 36 import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.NO_SEC;
37   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.convertPathFromObjectIdToIdVer;
  37 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.convertPathFromObjectIdToIdVer;
38 38
39 39 @Service
40 40 @TbLwM2mTransportComponent
... ... @@ -118,7 +118,7 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
118 118 */
119 119 @Override
120 120 public LwM2mClient addLwM2mClientToSession(String identity) {
121   - ReadResultSecurityStore store = lwM2MCredentialsSecurityInfoValidator.createAndValidateCredentialsSecurityInfo(identity, LwM2mTransportHandler.LwM2mTypeServer.CLIENT);
  121 + ReadResultSecurityStore store = lwM2MCredentialsSecurityInfoValidator.createAndValidateCredentialsSecurityInfo(identity, LwM2mTransportHandlerUtil.LwM2mTypeServer.CLIENT);
122 122 if (store.getSecurityMode() < LwM2MSecurityMode.DEFAULT_MODE.code) {
123 123 UUID profileUuid = (store.getDeviceProfile() != null && addUpdateProfileParameters(store.getDeviceProfile())) ? store.getDeviceProfile().getUuidId() : null;
124 124 LwM2mClient client;
... ... @@ -165,7 +165,7 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
165 165
166 166 @Override
167 167 public boolean addUpdateProfileParameters(DeviceProfile deviceProfile) {
168   - LwM2mClientProfile lwM2MClientProfile = LwM2mTransportHandler.getLwM2MClientProfileFromThingsboard(deviceProfile);
  168 + LwM2mClientProfile lwM2MClientProfile = LwM2mTransportHandlerUtil.getLwM2MClientProfileFromThingsboard(deviceProfile);
169 169 if (lwM2MClientProfile != null) {
170 170 profiles.put(deviceProfile.getUuidId(), lwM2MClientProfile);
171 171 return true;
... ...
... ... @@ -21,11 +21,11 @@ import org.eclipse.leshan.core.request.ContentFormat;
21 21 import org.eclipse.leshan.server.registration.Registration;
22 22 import org.thingsboard.server.gen.transport.TransportProtos;
23 23 import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto;
24   -import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.LwM2mTypeOper;
  24 +import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.LwM2mTypeOper;
25 25
26 26 import java.util.concurrent.ConcurrentHashMap;
27 27
28   -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandler.validPathIdVer;
  28 +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportHandlerUtil.validPathIdVer;
29 29
30 30 @Data
31 31 public class Lwm2mClientRpcRequest {
... ...
common/transport/lwm2m/src/main/resources/lwm2mserver.jks renamed from common/transport/lwm2m/src/main/resources/credentials/serverKeyStore.jks
No preview for this file type
transport/lwm2m/src/main/data/lwm2mserver.jks renamed from transport/lwm2m/src/main/data/credentials/serverKeyStore.jks
No preview for this file type