Commit 5d64a27079861d4fd0389e2ae682392fa95886fe

Authored by Andrew Shvayka
2 parents 5fe40b70 71744d48

Merge branch 'master' of github.com:thingsboard/thingsboard

@@ -16,6 +16,8 @@ @@ -16,6 +16,8 @@
16 package org.thingsboard.client.tools; 16 package org.thingsboard.client.tools;
17 17
18 import com.fasterxml.jackson.databind.JsonNode; 18 import com.fasterxml.jackson.databind.JsonNode;
  19 +import com.fasterxml.jackson.databind.ObjectMapper;
  20 +import com.fasterxml.jackson.databind.node.ObjectNode;
19 import lombok.RequiredArgsConstructor; 21 import lombok.RequiredArgsConstructor;
20 import org.springframework.core.ParameterizedTypeReference; 22 import org.springframework.core.ParameterizedTypeReference;
21 import org.springframework.http.HttpEntity; 23 import org.springframework.http.HttpEntity;
@@ -27,6 +29,7 @@ import org.springframework.http.client.ClientHttpRequestExecution; @@ -27,6 +29,7 @@ import org.springframework.http.client.ClientHttpRequestExecution;
27 import org.springframework.http.client.ClientHttpRequestInterceptor; 29 import org.springframework.http.client.ClientHttpRequestInterceptor;
28 import org.springframework.http.client.ClientHttpResponse; 30 import org.springframework.http.client.ClientHttpResponse;
29 import org.springframework.http.client.support.HttpRequestWrapper; 31 import org.springframework.http.client.support.HttpRequestWrapper;
  32 +import org.springframework.util.StringUtils;
30 import org.springframework.web.client.HttpClientErrorException; 33 import org.springframework.web.client.HttpClientErrorException;
31 import org.springframework.web.client.RestTemplate; 34 import org.springframework.web.client.RestTemplate;
32 import org.springframework.web.context.request.async.DeferredResult; 35 import org.springframework.web.context.request.async.DeferredResult;
@@ -90,9 +93,11 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -90,9 +93,11 @@ public class RestClient implements ClientHttpRequestInterceptor {
90 protected final String baseURL; 93 protected final String baseURL;
91 private String token; 94 private String token;
92 private String refreshToken; 95 private String refreshToken;
  96 + private final ObjectMapper objectMapper = new ObjectMapper();
93 97
94 private final static String TIME_PAGE_LINK_URL_PARAMS = "limit={limit}&startTime={startTime}&endTime={endTime}&ascOrder={ascOrder}&offset={offset}"; 98 private final static String TIME_PAGE_LINK_URL_PARAMS = "limit={limit}&startTime={startTime}&endTime={endTime}&ascOrder={ascOrder}&offset={offset}";
95 private final static String TEXT_PAGE_LINK_URL_PARAMS = "limit={limit}&textSearch{textSearch}&idOffset={idOffset}&textOffset{textOffset}"; 99 private final static String TEXT_PAGE_LINK_URL_PARAMS = "limit={limit}&textSearch{textSearch}&idOffset={idOffset}&textOffset{textOffset}";
  100 + protected static final String ACTIVATE_TOKEN_REGEX = "/api/noauth/activate?activateToken=";
96 101
97 @Override 102 @Override
98 public ClientHttpResponse intercept(HttpRequest request, byte[] bytes, ClientHttpRequestExecution execution) throws IOException { 103 public ClientHttpResponse intercept(HttpRequest request, byte[] bytes, ClientHttpRequestExecution execution) throws IOException {
@@ -110,6 +115,14 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -110,6 +115,14 @@ public class RestClient implements ClientHttpRequestInterceptor {
110 return response; 115 return response;
111 } 116 }
112 117
  118 + public String getToken() {
  119 + return token;
  120 + }
  121 +
  122 + public String getRefreshToken() {
  123 + return refreshToken;
  124 + }
  125 +
113 public void refreshToken() { 126 public void refreshToken() {
114 Map<String, String> refreshTokenRequest = new HashMap<>(); 127 Map<String, String> refreshTokenRequest = new HashMap<>();
115 refreshTokenRequest.put("refreshToken", refreshToken); 128 refreshTokenRequest.put("refreshToken", refreshToken);
@@ -297,10 +310,6 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -297,10 +310,6 @@ public class RestClient implements ClientHttpRequestInterceptor {
297 return restTemplate; 310 return restTemplate;
298 } 311 }
299 312
300 - public String getToken() {  
301 - return token;  
302 - }  
303 -  
304 public Optional<AdminSettings> getAdminSettings(String key) { 313 public Optional<AdminSettings> getAdminSettings(String key) {
305 try { 314 try {
306 ResponseEntity<AdminSettings> adminSettings = restTemplate.getForEntity(baseURL + "/api/admin/settings/{key}", AdminSettings.class, key); 315 ResponseEntity<AdminSettings> adminSettings = restTemplate.getForEntity(baseURL + "/api/admin/settings/{key}", AdminSettings.class, key);
@@ -629,6 +638,11 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -629,6 +638,11 @@ public class RestClient implements ClientHttpRequestInterceptor {
629 return auditLog.getBody(); 638 return auditLog.getBody();
630 } 639 }
631 640
  641 + public String getActivateToken(String userId) {
  642 + String activationLink = getActivationLink(userId);
  643 + return StringUtils.delete(activationLink, baseURL + ACTIVATE_TOKEN_REGEX);
  644 + }
  645 +
632 public Optional<User> getUser() { 646 public Optional<User> getUser() {
633 ResponseEntity<User> user = restTemplate.getForEntity(baseURL + "/api/auth/user", User.class); 647 ResponseEntity<User> user = restTemplate.getForEntity(baseURL + "/api/auth/user", User.class);
634 return Optional.ofNullable(user.getBody()); 648 return Optional.ofNullable(user.getBody());
@@ -638,7 +652,10 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -638,7 +652,10 @@ public class RestClient implements ClientHttpRequestInterceptor {
638 restTemplate.exchange(URI.create(baseURL + "/api/auth/logout"), HttpMethod.POST, HttpEntity.EMPTY, Object.class); 652 restTemplate.exchange(URI.create(baseURL + "/api/auth/logout"), HttpMethod.POST, HttpEntity.EMPTY, Object.class);
639 } 653 }
640 654
641 - public void changePassword(JsonNode changePasswordRequest) { 655 + public void changePassword(String currentPassword, String newPassword) {
  656 + ObjectNode changePasswordRequest = objectMapper.createObjectNode();
  657 + changePasswordRequest.put("currentPassword", currentPassword);
  658 + changePasswordRequest.put("newPassword", newPassword);
642 restTemplate.exchange(URI.create(baseURL + "/api/auth/changePassword"), HttpMethod.POST, new HttpEntity<>(changePasswordRequest), Object.class); 659 restTemplate.exchange(URI.create(baseURL + "/api/auth/changePassword"), HttpMethod.POST, new HttpEntity<>(changePasswordRequest), Object.class);
643 } 660 }
644 661
@@ -655,12 +672,13 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -655,12 +672,13 @@ public class RestClient implements ClientHttpRequestInterceptor {
655 } 672 }
656 } 673 }
657 674
658 -  
659 public ResponseEntity<String> checkActivateToken(String activateToken) { 675 public ResponseEntity<String> checkActivateToken(String activateToken) {
660 return restTemplate.getForEntity(baseURL + "/api/noauth/activate?activateToken={activateToken}", String.class, activateToken); 676 return restTemplate.getForEntity(baseURL + "/api/noauth/activate?activateToken={activateToken}", String.class, activateToken);
661 } 677 }
662 678
663 - public void requestResetPasswordByEmail(JsonNode resetPasswordByEmailRequest) { 679 + public void requestResetPasswordByEmail(String email) {
  680 + ObjectNode resetPasswordByEmailRequest = objectMapper.createObjectNode();
  681 + resetPasswordByEmailRequest.put("email", email);
664 restTemplate.exchange(URI.create(baseURL + "/api/noauth/resetPasswordByEmail"), HttpMethod.POST, new HttpEntity<>(resetPasswordByEmailRequest), Object.class); 682 restTemplate.exchange(URI.create(baseURL + "/api/noauth/resetPasswordByEmail"), HttpMethod.POST, new HttpEntity<>(resetPasswordByEmailRequest), Object.class);
665 } 683 }
666 684
@@ -668,7 +686,10 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -668,7 +686,10 @@ public class RestClient implements ClientHttpRequestInterceptor {
668 return restTemplate.getForEntity(baseURL + "/api/noauth/resetPassword?resetToken={resetToken}", String.class, resetToken); 686 return restTemplate.getForEntity(baseURL + "/api/noauth/resetPassword?resetToken={resetToken}", String.class, resetToken);
669 } 687 }
670 688
671 - public Optional<JsonNode> activateUser(JsonNode activateRequest) { 689 + public Optional<JsonNode> activateUser(String userId, String password) {
  690 + ObjectNode activateRequest = objectMapper.createObjectNode();
  691 + activateRequest.put("activateToken", getActivateToken(userId));
  692 + activateRequest.put("password", password);
672 try { 693 try {
673 ResponseEntity<JsonNode> jsonNode = restTemplate.postForEntity(baseURL + "/api/noauth/activate", activateRequest, JsonNode.class); 694 ResponseEntity<JsonNode> jsonNode = restTemplate.postForEntity(baseURL + "/api/noauth/activate", activateRequest, JsonNode.class);
674 return Optional.ofNullable(jsonNode.getBody()); 695 return Optional.ofNullable(jsonNode.getBody());
@@ -681,7 +702,10 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -681,7 +702,10 @@ public class RestClient implements ClientHttpRequestInterceptor {
681 } 702 }
682 } 703 }
683 704
684 - public Optional<JsonNode> resetPassword(JsonNode resetPasswordRequest) { 705 + public Optional<JsonNode> resetPassword(String resetToken, String resetPassword) {
  706 + ObjectNode resetPasswordRequest = objectMapper.createObjectNode();
  707 + resetPasswordRequest.put("resetToken", resetToken);
  708 + resetPasswordRequest.put("resetPassword", resetPassword);
685 try { 709 try {
686 ResponseEntity<JsonNode> jsonNode = restTemplate.postForEntity(baseURL + "/api/noauth/resetPassword", resetPasswordRequest, JsonNode.class); 710 ResponseEntity<JsonNode> jsonNode = restTemplate.postForEntity(baseURL + "/api/noauth/resetPassword", resetPasswordRequest, JsonNode.class);
687 return Optional.ofNullable(jsonNode.getBody()); 711 return Optional.ofNullable(jsonNode.getBody());
@@ -696,7 +720,7 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -696,7 +720,7 @@ public class RestClient implements ClientHttpRequestInterceptor {
696 720
697 public Optional<ComponentDescriptor> getComponentDescriptorByClazz(String componentDescriptorClazz) { 721 public Optional<ComponentDescriptor> getComponentDescriptorByClazz(String componentDescriptorClazz) {
698 try { 722 try {
699 - ResponseEntity<ComponentDescriptor> componentDescriptor = restTemplate.getForEntity(baseURL + "/api/component/{componentDescriptorClazz}", ComponentDescriptor.class); 723 + ResponseEntity<ComponentDescriptor> componentDescriptor = restTemplate.getForEntity(baseURL + "/api/component/{componentDescriptorClazz}", ComponentDescriptor.class, componentDescriptorClazz);
700 return Optional.ofNullable(componentDescriptor.getBody()); 724 return Optional.ofNullable(componentDescriptor.getBody());
701 } catch (HttpClientErrorException exception) { 725 } catch (HttpClientErrorException exception) {
702 if (exception.getStatusCode() == HttpStatus.NOT_FOUND) { 726 if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {
@@ -1807,31 +1831,21 @@ public class RestClient implements ClientHttpRequestInterceptor { @@ -1807,31 +1831,21 @@ public class RestClient implements ClientHttpRequestInterceptor {
1807 restTemplate.postForEntity(baseURL + "/api/user/sendActivationMail?email={email}", null, Object.class, email); 1831 restTemplate.postForEntity(baseURL + "/api/user/sendActivationMail?email={email}", null, Object.class, email);
1808 } 1832 }
1809 1833
1810 - public Optional<String> getActivationLink(String userId) {  
1811 - try {  
1812 - ResponseEntity<String> activationLink = restTemplate.getForEntity(baseURL + "/api/user/{userId}/activationLink", String.class, userId);  
1813 - return Optional.ofNullable(activationLink.getBody());  
1814 - } catch (HttpClientErrorException exception) {  
1815 - if (exception.getStatusCode() == HttpStatus.NOT_FOUND) {  
1816 - return Optional.empty();  
1817 - } else {  
1818 - throw exception;  
1819 - }  
1820 - } 1834 + public String getActivationLink(String userId) {
  1835 + return restTemplate.getForEntity(baseURL + "/api/user/{userId}/activationLink", String.class, userId).getBody();
1821 } 1836 }
1822 1837
1823 public void deleteUser(String userId) { 1838 public void deleteUser(String userId) {
1824 restTemplate.delete(baseURL + "/api/user/{userId}", userId); 1839 restTemplate.delete(baseURL + "/api/user/{userId}", userId);
1825 } 1840 }
1826 1841
1827 - // @RequestMapping(value = "/tenant/{tenantId}/users", params = {"limit"}, method = RequestMethod.GET)  
1828 public TextPageData<User> getTenantAdmins(String tenantId, TextPageLink pageLink) { 1842 public TextPageData<User> getTenantAdmins(String tenantId, TextPageLink pageLink) {
1829 Map<String, String> params = new HashMap<>(); 1843 Map<String, String> params = new HashMap<>();
1830 params.put("tenantId", tenantId); 1844 params.put("tenantId", tenantId);
1831 addPageLinkToParam(params, pageLink); 1845 addPageLinkToParam(params, pageLink);
1832 1846
1833 return restTemplate.exchange( 1847 return restTemplate.exchange(
1834 - baseURL + "/tenant/{tenantId}/users?" + TEXT_PAGE_LINK_URL_PARAMS, 1848 + baseURL + "/api/tenant/{tenantId}/users?" + TEXT_PAGE_LINK_URL_PARAMS,
1835 HttpMethod.GET, 1849 HttpMethod.GET,
1836 HttpEntity.EMPTY, 1850 HttpEntity.EMPTY,
1837 new ParameterizedTypeReference<TextPageData<User>>() { 1851 new ParameterizedTypeReference<TextPageData<User>>() {