Commit a787ca9d5d933277760dd86d63defed0c8520be8
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