diff --git a/application/pom.xml b/application/pom.xml
index c7d3240ef4..e5a4a4e614 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -125,10 +125,6 @@
io.jsonwebtoken
jjwt
-
- joda-time
- joda-time
-
org.apache.velocity
velocity
diff --git a/application/src/main/java/org/thingsboard/server/controller/CustomerController.java b/application/src/main/java/org/thingsboard/server/controller/CustomerController.java
index c54973f0bc..d87ea5cfe0 100644
--- a/application/src/main/java/org/thingsboard/server/controller/CustomerController.java
+++ b/application/src/main/java/org/thingsboard/server/controller/CustomerController.java
@@ -82,7 +82,7 @@ public class CustomerController extends BaseController {
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/customer", method = RequestMethod.POST)
- @ResponseBody
+ @ResponseBody
public Customer saveCustomer(@RequestBody Customer customer) throws ThingsboardException {
try {
customer.setTenantId(getCurrentUser().getTenantId());
@@ -107,7 +107,7 @@ public class CustomerController extends BaseController {
}
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
- @RequestMapping(value = "/customers", params = { "limit" }, method = RequestMethod.GET)
+ @RequestMapping(value = "/customers", params = {"limit"}, method = RequestMethod.GET)
@ResponseBody
public TextPageData getCustomers(@RequestParam int limit,
@RequestParam(required = false) String textSearch,
@@ -122,4 +122,16 @@ public class CustomerController extends BaseController {
}
}
+ @PreAuthorize("hasAuthority('TENANT_ADMIN')")
+ @RequestMapping(value = "/tenant/customers", params = {"customerTitle"}, method = RequestMethod.GET)
+ @ResponseBody
+ public Customer getTenantCustomer(
+ @RequestParam String customerTitle) throws ThingsboardException {
+ try {
+ TenantId tenantId = getCurrentUser().getTenantId();
+ return checkNotNull(customerService.findCustomerByTenantIdAndTitle(tenantId, customerTitle));
+ } catch (Exception e) {
+ throw handleException(e);
+ }
+ }
}
diff --git a/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java b/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java
index 20de6d8e73..7e5fba5477 100644
--- a/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java
+++ b/application/src/main/java/org/thingsboard/server/service/security/model/token/JwtTokenFactory.java
@@ -20,7 +20,6 @@ import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.id.CustomerId;
@@ -31,7 +30,9 @@ import org.thingsboard.server.config.JwtSettings;
import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.model.UserPrincipal;
-import java.util.Arrays;
+import java.time.ZonedDateTime;
+import java.util.Collections;
+import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
@@ -81,13 +82,13 @@ public class JwtTokenFactory {
claims.put(CUSTOMER_ID, securityUser.getCustomerId().getId().toString());
}
- DateTime currentTime = new DateTime();
+ ZonedDateTime currentTime = ZonedDateTime.now();
String token = Jwts.builder()
.setClaims(claims)
.setIssuer(settings.getTokenIssuer())
- .setIssuedAt(currentTime.toDate())
- .setExpiration(currentTime.plusSeconds(settings.getTokenExpirationTime()).toDate())
+ .setIssuedAt(Date.from(currentTime.toInstant()))
+ .setExpiration(Date.from(currentTime.plusSeconds(settings.getTokenExpirationTime()).toInstant()))
.signWith(SignatureAlgorithm.HS512, settings.getTokenSigningKey())
.compact();
@@ -129,11 +130,11 @@ public class JwtTokenFactory {
throw new IllegalArgumentException("Cannot create JWT Token without username/email");
}
- DateTime currentTime = new DateTime();
+ ZonedDateTime currentTime = ZonedDateTime.now();
UserPrincipal principal = securityUser.getUserPrincipal();
Claims claims = Jwts.claims().setSubject(principal.getValue());
- claims.put(SCOPES, Arrays.asList(Authority.REFRESH_TOKEN.name()));
+ claims.put(SCOPES, Collections.singletonList(Authority.REFRESH_TOKEN.name()));
claims.put(USER_ID, securityUser.getId().getId().toString());
claims.put(IS_PUBLIC, principal.getType() == UserPrincipal.Type.PUBLIC_ID);
@@ -141,8 +142,8 @@ public class JwtTokenFactory {
.setClaims(claims)
.setIssuer(settings.getTokenIssuer())
.setId(UUID.randomUUID().toString())
- .setIssuedAt(currentTime.toDate())
- .setExpiration(currentTime.plusSeconds(settings.getRefreshTokenExpTime()).toDate())
+ .setIssuedAt(Date.from(currentTime.toInstant()))
+ .setExpiration(Date.from(currentTime.plusSeconds(settings.getRefreshTokenExpTime()).toInstant()))
.signWith(SignatureAlgorithm.HS512, settings.getTokenSigningKey())
.compact();
diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java
index 4600d9f048..1d1abda11f 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerService.java
@@ -22,20 +22,24 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.page.TextPageData;
import org.thingsboard.server.common.data.page.TextPageLink;
+import java.util.Optional;
+
public interface CustomerService {
Customer findCustomerById(CustomerId customerId);
+ Optional findCustomerByTenantIdAndTitle(TenantId tenantId, String title);
+
ListenableFuture findCustomerByIdAsync(CustomerId customerId);
Customer saveCustomer(Customer customer);
-
+
void deleteCustomer(CustomerId customerId);
Customer findOrCreatePublicCustomer(TenantId tenantId);
TextPageData findCustomersByTenantId(TenantId tenantId, TextPageLink pageLink);
-
+
void deleteCustomersByTenantId(TenantId tenantId);
}
diff --git a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java
index e8ec21f3c0..f76d654bf9 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/customer/CustomerServiceImpl.java
@@ -52,6 +52,7 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom
private static final String PUBLIC_CUSTOMER_TITLE = "Public";
public static final String INCORRECT_CUSTOMER_ID = "Incorrect customerId ";
+ public static final String INCORRECT_TENANT_ID = "Incorrect tenantId ";
@Autowired
private CustomerDao customerDao;
@@ -78,6 +79,13 @@ public class CustomerServiceImpl extends AbstractEntityService implements Custom
return customerDao.findById(customerId.getId());
}
+ @Override
+ public Optional findCustomerByTenantIdAndTitle(TenantId tenantId, String title) {
+ log.trace("Executing findCustomerByTenantIdAndTitle [{}] [{}]", tenantId, title);
+ validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
+ return customerDao.findCustomersByTenantIdAndTitle(tenantId.getId(), title);
+ }
+
@Override
public ListenableFuture findCustomerByIdAsync(CustomerId customerId) {
log.trace("Executing findCustomerByIdAsync [{}]", customerId);
diff --git a/pom.xml b/pom.xml
index e45fc3ea28..4b77abbd98 100755
--- a/pom.xml
+++ b/pom.xml
@@ -33,8 +33,7 @@
4.3.4.RELEASE
4.2.0.RELEASE
0.7.0
- 2.4
- 2.2.0
+ 2.2.0
4.12
1.7.7
1.2.3
@@ -483,11 +482,6 @@
jjwt
${jjwt.version}
-
- joda-time
- joda-time
- ${joda-time.version}
-
org.apache.velocity
velocity
diff --git a/tools/src/main/java/org/thingsboard/client/tools/RestClient.java b/tools/src/main/java/org/thingsboard/client/tools/RestClient.java
index 8ef51258ed..0baf1db508 100644
--- a/tools/src/main/java/org/thingsboard/client/tools/RestClient.java
+++ b/tools/src/main/java/org/thingsboard/client/tools/RestClient.java
@@ -77,6 +77,36 @@ public class RestClient implements ClientHttpRequestInterceptor {
}
}
+ public Optional findCustomer(String title) {
+ Map params = new HashMap();
+ params.put("customerTitle", title);
+ try {
+ ResponseEntity customerEntity = restTemplate.getForEntity(baseURL + "/api/tenant/customers?customerTitle={customerTitle}", Customer.class, params);
+ return Optional.of(customerEntity.getBody());
+ } catch (HttpClientErrorException exception) {
+ if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
+ return Optional.empty();
+ } else {
+ throw exception;
+ }
+ }
+ }
+
+ public Optional findAsset(String name) {
+ Map params = new HashMap();
+ params.put("assetName", name);
+ try {
+ ResponseEntity assetEntity = restTemplate.getForEntity(baseURL + "/api/tenant/assets?assetName={assetName}", Asset.class, params);
+ return Optional.of(assetEntity.getBody());
+ } catch (HttpClientErrorException exception) {
+ if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
+ return Optional.empty();
+ } else {
+ throw exception;
+ }
+ }
+ }
+
public Customer createCustomer(String title) {
Customer customer = new Customer();
customer.setTitle(title);