Commit dda06bd0a18288b23a53c13616763f8cab428cd5

Authored by YevhenBondarenko
1 parent d2736610

process update credentials event for lwm2m transport

... ... @@ -719,7 +719,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
719 719 void processCredentialsUpdate(TbActorMsg msg) {
720 720 if (((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials().getCredentialsType() == DeviceCredentialsType.LWM2M_CREDENTIALS) {
721 721 sessions.forEach((k, v) -> {
722   - notifyTransportAboutProfileUpdate(k, v, ((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials());
  722 + notifyTransportAboutDeviceCredentialsUpdate(k, v, ((DeviceCredentialsUpdateNotificationMsg) msg).getDeviceCredentials());
723 723 });
724 724 } else {
725 725 sessions.forEach((sessionId, sessionMd) -> notifyTransportAboutClosedSession(sessionId, sessionMd, "device credentials updated!"));
... ... @@ -747,7 +747,7 @@ class DeviceActorMessageProcessor extends AbstractContextAwareMsgProcessor {
747 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 751 ToTransportUpdateCredentialsProto.Builder notification = ToTransportUpdateCredentialsProto.newBuilder();
752 752 notification.addCredentialsId(deviceCredentials.getCredentialsId());
753 753 notification.addCredentialsValue(deviceCredentials.getCredentialsValue());
... ...
... ... @@ -28,7 +28,7 @@ import org.thingsboard.server.queue.util.TbLwM2mTransportComponent;
28 28 import org.thingsboard.server.transport.lwm2m.server.client.LwM2MAuthException;
29 29 import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext;
30 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 33 @Component
34 34 @RequiredArgsConstructor
... ... @@ -37,7 +37,7 @@ import org.thingsboard.server.transport.lwm2m.server.store.TbSecurityStore;
37 37 public class TbLwM2MAuthorizer implements Authorizer {
38 38
39 39 private final TbLwM2MDtlsSessionStore sessionStorage;
40   - private final TbSecurityStore securityStore;
  40 + private final TbMainSecurityStore securityStore;
41 41 private final SecurityChecker securityChecker = new SecurityChecker();
42 42 private final LwM2mClientContext clientContext;
43 43
... ... @@ -58,17 +58,16 @@ public class TbLwM2MAuthorizer implements Authorizer {
58 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 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 67 if (securityChecker.checkSecurityInfo(registration.getEndpoint(), senderIdentity, expectedSecurityInfo)) {
70 68 return registration;
71 69 } else {
  70 + securityStore.remove(registration.getEndpoint(), registration.getId());
72 71 return null;
73 72 }
74 73 }
... ...
... ... @@ -57,8 +57,6 @@ public interface LwM2mClientContext {
57 57
58 58 void update(LwM2mClient lwM2MClient);
59 59
60   - void removeCredentials(TransportProtos.SessionInfoProto sessionInfo);
61   -
62 60 void sendMsgsAfterSleeping(LwM2mClient lwM2MClient);
63 61
64 62 boolean isComposite(LwM2mClient client);
... ...
... ... @@ -329,11 +329,6 @@ public class LwM2mClientContextImpl implements LwM2mClientContext {
329 329 }
330 330
331 331 @Override
332   - public void removeCredentials(TransportProtos.SessionInfoProto sessionInfo) {
333   - //TODO: implement
334   - }
335   -
336   - @Override
337 332 public void sendMsgsAfterSleeping(LwM2mClient lwM2MClient) {
338 333 if (LwM2MClientState.REGISTERED.equals(lwM2MClient.getState())) {
339 334 PowerMode powerMode = getPowerMode(lwM2MClient);
... ...
... ... @@ -28,12 +28,10 @@ import org.eclipse.leshan.core.node.LwM2mObjectInstance;
28 28 import org.eclipse.leshan.core.node.LwM2mPath;
29 29 import org.eclipse.leshan.core.node.LwM2mResource;
30 30 import org.eclipse.leshan.core.observation.Observation;
31   -import org.eclipse.leshan.core.request.ExecuteRequest;
32 31 import org.eclipse.leshan.core.request.ObserveRequest;
33 32 import org.eclipse.leshan.core.request.ReadRequest;
34 33 import org.eclipse.leshan.core.request.WriteCompositeRequest;
35 34 import org.eclipse.leshan.core.request.WriteRequest;
36   -import org.eclipse.leshan.core.response.ExecuteResponse;
37 35 import org.eclipse.leshan.core.response.ObserveResponse;
38 36 import org.eclipse.leshan.core.response.ReadCompositeResponse;
39 37 import org.eclipse.leshan.core.response.ReadResponse;
... ... @@ -77,7 +75,6 @@ import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObser
77 75 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MCancelObserveRequest;
78 76 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverCallback;
79 77 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MDiscoverRequest;
80   -import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MExecuteRequest;
81 78 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MLatchCallback;
82 79 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveCallback;
83 80 import org.thingsboard.server.transport.lwm2m.server.downlink.TbLwM2MObserveRequest;
... ... @@ -89,6 +86,7 @@ import org.thingsboard.server.transport.lwm2m.server.log.LwM2MTelemetryLogServic
89 86 import org.thingsboard.server.transport.lwm2m.server.ota.LwM2MOtaUpdateService;
90 87 import org.thingsboard.server.transport.lwm2m.server.session.LwM2MSessionManager;
91 88 import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2MDtlsSessionStore;
  89 +import org.thingsboard.server.transport.lwm2m.server.store.TbLwM2mSecurityStore;
92 90 import org.thingsboard.server.transport.lwm2m.utils.LwM2mValueConverterImpl;
93 91
94 92 import javax.annotation.PostConstruct;
... ... @@ -135,8 +133,6 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
135 133
136 134 public LwM2mValueConverterImpl converter;
137 135
138   - private static final String REBOOT_ID = "/3/0/4";
139   -
140 136 private final TransportService transportService;
141 137 private final LwM2mTransportContext context;
142 138 private final LwM2MAttributesService attributesService;
... ... @@ -150,6 +146,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
150 146 private final LwM2mDownlinkMsgHandler defaultLwM2MDownlinkMsgHandler;
151 147 private final LwM2mVersionedModelProvider modelProvider;
152 148 private final RegistrationStore registrationStore;
  149 + private final TbLwM2mSecurityStore securityStore;
153 150
154 151 public DefaultLwM2MUplinkMsgHandler(TransportService transportService,
155 152 LwM2MTransportServerConfig config,
... ... @@ -163,7 +160,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
163 160 LwM2mTransportContext context,
164 161 TbLwM2MDtlsSessionStore sessionStore,
165 162 LwM2mVersionedModelProvider modelProvider,
166   - RegistrationStore registrationStore) {
  163 + RegistrationStore registrationStore, TbLwM2mSecurityStore securityStore) {
167 164 this.transportService = transportService;
168 165 this.sessionManager = sessionManager;
169 166 this.attributesService = attributesService;
... ... @@ -177,6 +174,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
177 174 this.sessionStore = sessionStore;
178 175 this.modelProvider = modelProvider;
179 176 this.registrationStore = registrationStore;
  177 + this.securityStore = securityStore;
180 178 }
181 179
182 180 @PostConstruct
... ... @@ -282,15 +280,12 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
282 280 * @param observations - !!! Warn: if have not finishing unReg, then this operation will be finished on next Client`s connect
283 281 */
284 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 286 private void doUnReg(Registration registration, LwM2mClient client) {
293 287 try {
  288 + logService.log(client, LOG_LWM2M_INFO + ": Client unRegistration");
294 289 clientContext.unregister(client, registration);
295 290 SessionInfoProto sessionInfo = client.getSession();
296 291 if (sessionInfo != null) {
... ... @@ -405,23 +400,7 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
405 400
406 401 @Override
407 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 406 @Override
... ... @@ -920,8 +899,8 @@ public class DefaultLwM2MUplinkMsgHandler extends LwM2MExecutorAwareService impl
920 899 */
921 900 @Override
922 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 977 .setLastActivityTime(System.currentTimeMillis())
999 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 }
... ...