Commit dda06bd0a18288b23a53c13616763f8cab428cd5

Authored by YevhenBondarenko
1 parent d2736610

process update credentials event for lwm2m transport

@@ -719,7 +719,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { @@ -719,7 +719,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
719 void processCredentialsUpdate(TbActorMsg msg) { 719 void processCredentialsUpdate(TbActorMsg msg) {
720 if (((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials().getCredentialsType() == DeviceCredentialsType.LWM2M_CREDENTIALS) { 720 if (((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials().getCredentialsType() == DeviceCredentialsType.LWM2M_CREDENTIALS) {
721 sessions.forEach((k, v) -> { 721 sessions.forEach((k, v) -> {
722 - notifyTransportAboutProfileUpdate(k, v, ((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials()); 722 + notifyTransportAboutDeviceCredentialsUpdate(k, v, ((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials());
723 }); 723 });
724 } else { 724 } else {
725 sessions.forEach((sessionId, sessionMd) -> notifyTransportAboutClosedSession(sessionId, sessionMd, "device credentials updated!")); 725 sessions.forEach((sessionId, sessionMd) -> notifyTransportAboutClosedSession(sessionId, sessionMd, "device credentials updated!"));
@@ -747,7 +747,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor { @@ -747,7 +747,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
747 systemContext.getTbCoreToTransportService().process(sessionMd.getSessionInfo().getNodeId(), msg); 747 systemContext.getTbCoreToTransportService().process(sessionMd.getSessionInfo().getNodeId(), msg);
748 } 748 }
749 749
750 - void notifyTransportAboutProfileUpdate(UUID sessionId, SessionInfoMetaData sessionMd, DeviceCredentials deviceCredentials) { 750 + void notifyTransportAboutDeviceCredentialsUpdate(UUID sessionId, SessionInfoMetaData sessionMd, DeviceCredentials deviceCredentials) {
751 ToTransportUpdateCredentialsProto.Builder notification = ToTransportUpdateCredentialsProto.newBuilder(); 751 ToTransportUpdateCredentialsProto.Builder notification = ToTransportUpdateCredentialsProto.newBuilder();
752 notification.addCredentialsId(deviceCredentials.getCredentialsId()); 752 notification.addCredentialsId(deviceCredentials.getCredentialsId());
753 notification.addCredentialsValue(deviceCredentials.getCredentialsValue()); 753 notification.addCredentialsValue(deviceCredentials.getCredentialsValue());
@@ -28,7 +28,7 @@ import org.thingsboard.server.queue.util.TbLwM2mTransportComponent; @@ -28,7 +28,7 @@ import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
28 import org.thingsboard.server.transport.lwm2m.server.client.LwM2MAuthException; 28 import org.thingsboard.server.transport.lwm2m.server.client.LwM2MAuthException;
29 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext; 29 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext;
30 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore; 30 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore;
31 -import org.thingsboard.server.transport.lwm2m.server.store.TbSecurityStore; 31 +import org.thingsboard.server.transport.lwm2m.server.store.TbMainSecurityStore;
32 32
33 @Component 33 @Component
34 @RequiredArgsConstructor 34 @RequiredArgsConstructor
@@ -37,7 +37,7 @@ import org.thingsboard.server.transport.lwm2m.server.store.TbSecurityStore; @@ -37,7 +37,7 @@ import org.thingsboard.server.transport.lwm2m.server.store.TbSecurityStore;
37 public class TbLwM2MAuthorizer implements Authorizer { 37 public class TbLwM2MAuthorizer implements Authorizer {
38 38
39 private final TbLwM2MDtlsSessionStore sessionStorage; 39 private final TbLwM2MDtlsSessionStore sessionStorage;
40 - private final TbSecurityStore securityStore; 40 + private final TbMainSecurityStore securityStore;
41 private final SecurityChecker securityChecker = new SecurityChecker(); 41 private final SecurityChecker securityChecker = new SecurityChecker();
42 private final LwM2mClientContext clientContext; 42 private final LwM2mClientContext clientContext;
43 43
@@ -58,17 +58,16 @@ public class TbLwM2MAuthorizer implements Authorizer { @@ -58,17 +58,16 @@ public class TbLwM2MAuthorizer implements Authorizer {
58 // If session info is not found, this may be the trusted certificate, so we still need to check all other options below. 58 // If session info is not found, this may be the trusted certificate, so we still need to check all other options below.
59 } 59 }
60 SecurityInfo expectedSecurityInfo = null; 60 SecurityInfo expectedSecurityInfo = null;
61 - if (securityStore != null) {  
62 - try {  
63 - expectedSecurityInfo = securityStore.getByEndpoint(registration.getEndpoint());  
64 - } catch (LwM2MAuthException e) {  
65 - log.info("Registration failed: FORBIDDEN, endpointId: [{}]", registration.getEndpoint());  
66 - return null;  
67 - } 61 + try {
  62 + expectedSecurityInfo = securityStore.getByEndpoint(registration.getEndpoint());
  63 + } catch (LwM2MAuthException e) {
  64 + log.info("Registration failed: FORBIDDEN, endpointId: [{}]", registration.getEndpoint());
  65 + return null;
68 } 66 }
69 if (securityChecker.checkSecurityInfo(registration.getEndpoint(), senderIdentity, expectedSecurityInfo)) { 67 if (securityChecker.checkSecurityInfo(registration.getEndpoint(), senderIdentity, expectedSecurityInfo)) {
70 return registration; 68 return registration;
71 } else { 69 } else {
  70 + securityStore.remove(registration.getEndpoint(), registration.getId());
72 return null; 71 return null;
73 } 72 }
74 } 73 }
@@ -57,8 +57,6 @@ public interface LwM2mClientContext { @@ -57,8 +57,6 @@ public interface LwM2mClientContext {
57 57
58 void update(LwM2mClient lwM2MClient); 58 void update(LwM2mClient lwM2MClient);
59 59
60 - void removeCredentials(TransportProtos.SessionInfoProto sessionInfo);  
61 -  
62 void sendMsgsAfterSleeping(LwM2mClient lwM2MClient); 60 void sendMsgsAfterSleeping(LwM2mClient lwM2MClient);
63 61
64 boolean isComposite(LwM2mClient client); 62 boolean isComposite(LwM2mClient client);
@@ -329,11 +329,6 @@ public class LwM2mClientContextImpl implements LwM2mClientContext { @@ -329,11 +329,6 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
329 } 329 }
330 330
331 @Override 331 @Override
332 - public void removeCredentials(TransportProtos.SessionInfoProto sessionInfo) {  
333 - //TODO: implement  
334 - }  
335 -  
336 - @Override  
337 public void sendMsgsAfterSleeping(LwM2mClient lwM2MClient) { 332 public void sendMsgsAfterSleeping(LwM2mClient lwM2MClient) {
338 if (LwM2MClientState.REGISTERED.equals(lwM2MClient.getState())) { 333 if (LwM2MClientState.REGISTERED.equals(lwM2MClient.getState())) {
339 PowerMode powerMode = getPowerMode(lwM2MClient); 334 PowerMode powerMode = getPowerMode(lwM2MClient);
@@ -28,12 +28,10 @@ import org.eclipse.leshan.core.node.LwM2mObjectInstance; @@ -28,12 +28,10 @@ import org.eclipse.leshan.core.node.LwM2mObjectInstance;
28 import org.eclipse.leshan.core.node.LwM2mPath; 28 import org.eclipse.leshan.core.node.LwM2mPath;
29 import org.eclipse.leshan.core.node.LwM2mResource; 29 import org.eclipse.leshan.core.node.LwM2mResource;
30 import org.eclipse.leshan.core.observation.Observation; 30 import org.eclipse.leshan.core.observation.Observation;
31 -import org.eclipse.leshan.core.request.ExecuteRequest;  
32 import org.eclipse.leshan.core.request.ObserveRequest; 31 import org.eclipse.leshan.core.request.ObserveRequest;
33 import org.eclipse.leshan.core.request.ReadRequest; 32 import org.eclipse.leshan.core.request.ReadRequest;
34 import org.eclipse.leshan.core.request.WriteCompositeRequest; 33 import org.eclipse.leshan.core.request.WriteCompositeRequest;
35 import org.eclipse.leshan.core.request.WriteRequest; 34 import org.eclipse.leshan.core.request.WriteRequest;
36 -import org.eclipse.leshan.core.response.ExecuteResponse;  
37 import org.eclipse.leshan.core.response.ObserveResponse; 35 import org.eclipse.leshan.core.response.ObserveResponse;
38 import org.eclipse.leshan.core.response.ReadCompositeResponse; 36 import org.eclipse.leshan.core.response.ReadCompositeResponse;
39 import org.eclipse.leshan.core.response.ReadResponse; 37 import org.eclipse.leshan.core.response.ReadResponse;
@@ -77,7 +75,6 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObser @@ -77,7 +75,6 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObser
77 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest; 75 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest;
78 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback; 76 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback;
79 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverRequest; 77 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverRequest;
80 -import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MExecuteRequest;  
81 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MLatchCallback; 78 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MLatchCallback;
82 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveCallback; 79 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveCallback;
83 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveRequest; 80 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveRequest;
@@ -89,6 +86,7 @@ import org.thingsboard.server.transport.lwm2m.server.log.LwM2MTelemetryLogServic @@ -89,6 +86,7 @@ import org.thingsboard.server.transport.lwm2m.server.log.LwM2MTelemetryLogServic
89 import org.thingsboard.server.transport.lwm2m.server.ota.LwM2MOtaUpdateService; 86 import org.thingsboard.server.transport.lwm2m.server.ota.LwM2MOtaUpdateService;
90 import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager; 87 import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager;
91 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore; 88 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore;
  89 +import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2mSecurityStore;
92 import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl; 90 import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl;
93 91
94 import javax.annotation.PostConstruct; 92 import javax.annotation.PostConstruct;
@@ -135,8 +133,6 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -135,8 +133,6 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
135 133
136 public LwM2mValueConverterImpl converter; 134 public LwM2mValueConverterImpl converter;
137 135
138 - private static final String REBOOT_ID = "/3/0/4";  
139 -  
140 private final TransportService transportService; 136 private final TransportService transportService;
141 private final LwM2mTransportContext context; 137 private final LwM2mTransportContext context;
142 private final LwM2MAttributesService attributesService; 138 private final LwM2MAttributesService attributesService;
@@ -150,6 +146,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -150,6 +146,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
150 private final LwM2mDownlinkMsgHandler defaultLwM2MDownlinkMsgHandler; 146 private final LwM2mDownlinkMsgHandler defaultLwM2MDownlinkMsgHandler;
151 private final LwM2mVersionedModelProvider modelProvider; 147 private final LwM2mVersionedModelProvider modelProvider;
152 private final RegistrationStore registrationStore; 148 private final RegistrationStore registrationStore;
  149 + private final TbLwM2mSecurityStore securityStore;
153 150
154 public DefaultLwM2MUplinkMsgHandler(TransportService transportService, 151 public DefaultLwM2MUplinkMsgHandler(TransportService transportService,
155 LwM2MTransportServerConfig config, 152 LwM2MTransportServerConfig config,
@@ -163,7 +160,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -163,7 +160,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
163 LwM2mTransportContext context, 160 LwM2mTransportContext context,
164 TbLwM2MDtlsSessionStore sessionStore, 161 TbLwM2MDtlsSessionStore sessionStore,
165 LwM2mVersionedModelProvider modelProvider, 162 LwM2mVersionedModelProvider modelProvider,
166 - RegistrationStore registrationStore) { 163 + RegistrationStore registrationStore, TbLwM2mSecurityStore securityStore) {
167 this.transportService = transportService; 164 this.transportService = transportService;
168 this.sessionManager = sessionManager; 165 this.sessionManager = sessionManager;
169 this.attributesService = attributesService; 166 this.attributesService = attributesService;
@@ -177,6 +174,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -177,6 +174,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
177 this.sessionStore = sessionStore; 174 this.sessionStore = sessionStore;
178 this.modelProvider = modelProvider; 175 this.modelProvider = modelProvider;
179 this.registrationStore = registrationStore; 176 this.registrationStore = registrationStore;
  177 + this.securityStore = securityStore;
180 } 178 }
181 179
182 @PostConstruct 180 @PostConstruct
@@ -282,15 +280,12 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -282,15 +280,12 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
282 * @param observations - !!! Warn: if have not finishing unReg, then this operation will be finished on next Client`s connect 280 * @param observations - !!! Warn: if have not finishing unReg, then this operation will be finished on next Client`s connect
283 */ 281 */
284 public void unReg(Registration registration, Collection<Observation> observations) { 282 public void unReg(Registration registration, Collection<Observation> observations) {
285 - executor.submit(() -> {  
286 - LwM2mClient client = clientContext.getClientByEndpoint(registration.getEndpoint());  
287 - logService.log(client, LOG_LWM2M_INFO + ": Client unRegistration");  
288 - doUnReg(registration, client);  
289 - }); 283 + executor.submit(() -> doUnReg(registration, clientContext.getClientByEndpoint(registration.getEndpoint())));
290 } 284 }
291 285
292 private void doUnReg(Registration registration, LwM2mClient client) { 286 private void doUnReg(Registration registration, LwM2mClient client) {
293 try { 287 try {
  288 + logService.log(client, LOG_LWM2M_INFO + ": Client unRegistration");
294 clientContext.unregister(client, registration); 289 clientContext.unregister(client, registration);
295 SessionInfoProto sessionInfo = client.getSession(); 290 SessionInfoProto sessionInfo = client.getSession();
296 if (sessionInfo != null) { 291 if (sessionInfo != null) {
@@ -405,23 +400,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -405,23 +400,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
405 400
406 @Override 401 @Override
407 public void onDeviceDelete(DeviceId deviceId) { 402 public void onDeviceDelete(DeviceId deviceId) {
408 - LwM2mClient client = clientContext.getClientByDeviceId(deviceId.getId());  
409 - TbLwM2MExecuteRequest request = TbLwM2MExecuteRequest.builder().versionedId(REBOOT_ID).timeout(clientContext.getRequestTimeout(client)).build();  
410 - defaultLwM2MDownlinkMsgHandler.sendExecuteRequest(client, request, new DownlinkRequestCallback<>() {  
411 - @Override  
412 - public void onSuccess(ExecuteRequest request, ExecuteResponse response) {  
413 - }  
414 -  
415 - @Override  
416 - public void onValidationError(String params, String msg) {  
417 - }  
418 -  
419 - @Override  
420 - public void onError(String params, Exception e) {  
421 - }  
422 - });  
423 - registrationStore.removeRegistration(client.getRegistration().getId());  
424 - doUnReg(client.getRegistration(), client); 403 + clearAndUnregister(clientContext.getClientByDeviceId(deviceId.getId()));
425 } 404 }
426 405
427 @Override 406 @Override
@@ -920,8 +899,8 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -920,8 +899,8 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
920 */ 899 */
921 @Override 900 @Override
922 public void onToTransportUpdateCredentials(SessionInfoProto sessionInfo, TransportProtos.ToTransportUpdateCredentialsProto updateCredentials) { 901 public void onToTransportUpdateCredentials(SessionInfoProto sessionInfo, TransportProtos.ToTransportUpdateCredentialsProto updateCredentials) {
923 - log.info("[{}] idList [{}] valueList updateCredentials", updateCredentials.getCredentialsIdList(), updateCredentials.getCredentialsValueList());  
924 - this.clientContext.removeCredentials(sessionInfo); 902 + log.info("[{}] updateCredentials", sessionInfo);
  903 + clearAndUnregister(clientContext.getClientBySessionInfo(sessionInfo));
925 } 904 }
926 905
927 /** 906 /**
@@ -998,4 +977,16 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl @@ -998,4 +977,16 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
998 .setLastActivityTime(System.currentTimeMillis()) 977 .setLastActivityTime(System.currentTimeMillis())
999 .build(), TransportServiceCallback.EMPTY); 978 .build(), TransportServiceCallback.EMPTY);
1000 } 979 }
  980 +
  981 + private void clearAndUnregister(LwM2mClient client) {
  982 + client.lock();
  983 + try {
  984 + Registration registration = client.getRegistration();
  985 + doUnReg(registration, client);
  986 + securityStore.remove(registration.getEndpoint(), registration.getId());
  987 + registrationStore.removeRegistration(registration.getId());
  988 + } finally {
  989 + client.unlock();
  990 + }
  991 + }
1001 } 992 }