Added device creation with token (#2272)

* Added device creation with token

* Fixes after code review

* Added device creation with token
This commit is contained in:
VoBa 2019-12-16 16:06:51 +02:00 committed by Igor Kulikov
parent a2cc974865
commit f23cfc9880
4 changed files with 38 additions and 12 deletions

View File

@ -82,7 +82,8 @@ public class DeviceController extends BaseController {
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/device", method = RequestMethod.POST) @RequestMapping(value = "/device", method = RequestMethod.POST)
@ResponseBody @ResponseBody
public Device saveDevice(@RequestBody Device device) throws ThingsboardException { public Device saveDevice(@RequestBody Device device,
@RequestParam(name = "accessToken", required = false) String accessToken) throws ThingsboardException {
try { try {
device.setTenantId(getCurrentUser().getTenantId()); device.setTenantId(getCurrentUser().getTenantId());
@ -91,7 +92,7 @@ public class DeviceController extends BaseController {
accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation, accessControlService.checkPermission(getCurrentUser(), Resource.DEVICE, operation,
device.getId(), device); device.getId(), device);
Device savedDevice = checkNotNull(deviceService.saveDevice(device)); Device savedDevice = checkNotNull(deviceService.saveDeviceWithAccessToken(device, accessToken));
actorService actorService
.onDeviceNameOrTypeUpdate( .onDeviceNameOrTypeUpdate(

View File

@ -37,6 +37,8 @@ public interface DeviceService {
Device saveDevice(Device device); Device saveDevice(Device device);
Device saveDeviceWithAccessToken(Device device, String accessToken);
Device assignDeviceToCustomer(TenantId tenantId, DeviceId deviceId, CustomerId customerId); Device assignDeviceToCustomer(TenantId tenantId, DeviceId deviceId, CustomerId customerId);
Device unassignDeviceFromCustomer(TenantId tenantId, DeviceId deviceId); Device unassignDeviceFromCustomer(TenantId tenantId, DeviceId deviceId);

View File

@ -119,9 +119,19 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
return deviceOpt.orElse(null); return deviceOpt.orElse(null);
} }
@CacheEvict(cacheNames = DEVICE_CACHE, key = "{#device.tenantId, #device.name}")
@Override
public Device saveDeviceWithAccessToken(Device device, String accessToken) {
return doSaveDevice(device, accessToken);
}
@CacheEvict(cacheNames = DEVICE_CACHE, key = "{#device.tenantId, #device.name}") @CacheEvict(cacheNames = DEVICE_CACHE, key = "{#device.tenantId, #device.name}")
@Override @Override
public Device saveDevice(Device device) { public Device saveDevice(Device device) {
return doSaveDevice(device, null);
}
private Device doSaveDevice(Device device, String accessToken) {
log.trace("Executing saveDevice [{}]", device); log.trace("Executing saveDevice [{}]", device);
deviceValidator.validate(device, Device::getTenantId); deviceValidator.validate(device, Device::getTenantId);
Device savedDevice; Device savedDevice;
@ -143,7 +153,7 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
DeviceCredentials deviceCredentials = new DeviceCredentials(); DeviceCredentials deviceCredentials = new DeviceCredentials();
deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId())); deviceCredentials.setDeviceId(new DeviceId(savedDevice.getUuidId()));
deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN); deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
deviceCredentials.setCredentialsId(RandomStringUtils.randomAlphanumeric(20)); deviceCredentials.setCredentialsId(!StringUtils.isEmpty(accessToken) ? accessToken : RandomStringUtils.randomAlphanumeric(20));
deviceCredentialsService.createDeviceCredentials(device.getTenantId(), deviceCredentials); deviceCredentialsService.createDeviceCredentials(device.getTenantId(), deviceCredentials);
} }
return savedDevice; return savedDevice;

View File

@ -225,13 +225,6 @@ public class RestClient implements ClientHttpRequestInterceptor {
return restTemplate.postForEntity(baseURL + "/api/customer", customer, Customer.class).getBody(); return restTemplate.postForEntity(baseURL + "/api/customer", customer, Customer.class).getBody();
} }
public Device createDevice(String name, String type) {
Device device = new Device();
device.setName(name);
device.setType(type);
return restTemplate.postForEntity(baseURL + "/api/device", device, Device.class).getBody();
}
public DeviceCredentials updateDeviceCredentials(DeviceId deviceId, String token) { public DeviceCredentials updateDeviceCredentials(DeviceId deviceId, String token) {
DeviceCredentials deviceCredentials = getCredentials(deviceId); DeviceCredentials deviceCredentials = getCredentials(deviceId);
deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN); deviceCredentials.setCredentialsType(DeviceCredentialsType.ACCESS_TOKEN);
@ -239,10 +232,30 @@ public class RestClient implements ClientHttpRequestInterceptor {
return saveDeviceCredentials(deviceCredentials); return saveDeviceCredentials(deviceCredentials);
} }
public Device createDevice(Device device) { public Device createDevice(String name, String type) {
return restTemplate.postForEntity(baseURL + "/api/device", device, Device.class).getBody(); Device device = new Device();
device.setName(name);
device.setType(type);
return doCreateDevice(device, null);
} }
public Device createDevice(Device device) {
return doCreateDevice(device, null);
}
public Device createDevice(Device device, String accessToken) {
return doCreateDevice(device, accessToken);
}
private Device doCreateDevice(Device device, String accessToken) {
Map<String, String> params = new HashMap<>();
String deviceCreationUrl = "/api/device";
if (!StringUtils.isEmpty(accessToken)) {
deviceCreationUrl = deviceCreationUrl + "?accessToken={accessToken}";
params.put("accessToken", accessToken);
}
return restTemplate.postForEntity(baseURL + deviceCreationUrl, device, Device.class, params).getBody();
}
public Asset createAsset(Asset asset) { public Asset createAsset(Asset asset) {
return restTemplate.postForEntity(baseURL + "/api/asset", asset, Asset.class).getBody(); return restTemplate.postForEntity(baseURL + "/api/asset", asset, Asset.class).getBody();
} }