@ -16,6 +16,8 @@
package org.thingsboard.client.tools ;
import com.fasterxml.jackson.databind.JsonNode ;
import com.fasterxml.jackson.databind.ObjectMapper ;
import com.fasterxml.jackson.databind.node.ObjectNode ;
import lombok.RequiredArgsConstructor ;
import org.springframework.core.ParameterizedTypeReference ;
import org.springframework.http.HttpEntity ;
@ -27,6 +29,7 @@ import org.springframework.http.client.ClientHttpRequestExecution;
import org.springframework.http.client.ClientHttpRequestInterceptor ;
import org.springframework.http.client.ClientHttpResponse ;
import org.springframework.http.client.support.HttpRequestWrapper ;
import org.springframework.util.StringUtils ;
import org.springframework.web.client.HttpClientErrorException ;
import org.springframework.web.client.RestTemplate ;
import org.springframework.web.context.request.async.DeferredResult ;
@ -90,9 +93,11 @@ public class RestClient implements ClientHttpRequestInterceptor {
protected final String baseURL ;
private String token ;
private String refreshToken ;
private final ObjectMapper objectMapper = new ObjectMapper ( ) ;
private final static String TIME_PAGE_LINK_URL_PARAMS = "limit={limit}&startTime={startTime}&endTime={endTime}&ascOrder={ascOrder}&offset={offset}" ;
private final static String TEXT_PAGE_LINK_URL_PARAMS = "limit={limit}&textSearch{textSearch}&idOffset={idOffset}&textOffset{textOffset}" ;
protected static final String ACTIVATE_TOKEN_REGEX = "/api/noauth/activate?activateToken=" ;
@Override
public ClientHttpResponse intercept ( HttpRequest request , byte [ ] bytes , ClientHttpRequestExecution execution ) throws IOException {
@ -110,6 +115,14 @@ public class RestClient implements ClientHttpRequestInterceptor {
return response ;
}
public String getToken ( ) {
return token ;
}
public String getRefreshToken ( ) {
return refreshToken ;
}
public void refreshToken ( ) {
Map < String , String > refreshTokenRequest = new HashMap < > ( ) ;
refreshTokenRequest . put ( "refreshToken" , refreshToken ) ;
@ -297,10 +310,6 @@ public class RestClient implements ClientHttpRequestInterceptor {
return restTemplate ;
}
public String getToken ( ) {
return token ;
}
public Optional < AdminSettings > getAdminSettings ( String key ) {
try {
ResponseEntity < AdminSettings > adminSettings = restTemplate . getForEntity ( baseURL + "/api/admin/settings/{key}" , AdminSettings . class , key ) ;
@ -629,6 +638,11 @@ public class RestClient implements ClientHttpRequestInterceptor {
return auditLog . getBody ( ) ;
}
public String getActivateToken ( String userId ) {
String activationLink = getActivationLink ( userId ) ;
return StringUtils . delete ( activationLink , baseURL + ACTIVATE_TOKEN_REGEX ) ;
}
public Optional < User > getUser ( ) {
ResponseEntity < User > user = restTemplate . getForEntity ( baseURL + "/api/auth/user" , User . class ) ;
return Optional . ofNullable ( user . getBody ( ) ) ;
@ -638,7 +652,10 @@ public class RestClient implements ClientHttpRequestInterceptor {
restTemplate . exchange ( URI . create ( baseURL + "/api/auth/logout" ) , HttpMethod . POST , HttpEntity . EMPTY , Object . class ) ;
}
public void changePassword ( JsonNode changePasswordRequest ) {
public void changePassword ( String currentPassword , String newPassword ) {
ObjectNode changePasswordRequest = objectMapper . createObjectNode ( ) ;
changePasswordRequest . put ( "currentPassword" , currentPassword ) ;
changePasswordRequest . put ( "newPassword" , newPassword ) ;
restTemplate . exchange ( URI . create ( baseURL + "/api/auth/changePassword" ) , HttpMethod . POST , new HttpEntity < > ( changePasswordRequest ) , Object . class ) ;
}
@ -655,12 +672,13 @@ public class RestClient implements ClientHttpRequestInterceptor {
}
}
public ResponseEntity < String > checkActivateToken ( String activateToken ) {
return restTemplate . getForEntity ( baseURL + "/api/noauth/activate?activateToken={activateToken}" , String . class , activateToken ) ;
}
public void requestResetPasswordByEmail ( JsonNode resetPasswordByEmailRequest ) {
public void requestResetPasswordByEmail ( String email ) {
ObjectNode resetPasswordByEmailRequest = objectMapper . createObjectNode ( ) ;
resetPasswordByEmailRequest . put ( "email" , email ) ;
restTemplate . exchange ( URI . create ( baseURL + "/api/noauth/resetPasswordByEmail" ) , HttpMethod . POST , new HttpEntity < > ( resetPasswordByEmailRequest ) , Object . class ) ;
}
@ -668,7 +686,10 @@ public class RestClient implements ClientHttpRequestInterceptor {
return restTemplate . getForEntity ( baseURL + "/api/noauth/resetPassword?resetToken={resetToken}" , String . class , resetToken ) ;
}
public Optional < JsonNode > activateUser ( JsonNode activateRequest ) {
public Optional < JsonNode > activateUser ( String userId , String password ) {
ObjectNode activateRequest = objectMapper . createObjectNode ( ) ;
activateRequest . put ( "activateToken" , getActivateToken ( userId ) ) ;
activateRequest . put ( "password" , password ) ;
try {
ResponseEntity < JsonNode > jsonNode = restTemplate . postForEntity ( baseURL + "/api/noauth/activate" , activateRequest , JsonNode . class ) ;
return Optional . ofNullable ( jsonNode . getBody ( ) ) ;
@ -681,7 +702,10 @@ public class RestClient implements ClientHttpRequestInterceptor {
}
}
public Optional < JsonNode > resetPassword ( JsonNode resetPasswordRequest ) {
public Optional < JsonNode > resetPassword ( String resetToken , String resetPassword ) {
ObjectNode resetPasswordRequest = objectMapper . createObjectNode ( ) ;
resetPasswordRequest . put ( "resetToken" , resetToken ) ;
resetPasswordRequest . put ( "resetPassword" , resetPassword ) ;
try {
ResponseEntity < JsonNode > jsonNode = restTemplate . postForEntity ( baseURL + "/api/noauth/resetPassword" , resetPasswordRequest , JsonNode . class ) ;
return Optional . ofNullable ( jsonNode . getBody ( ) ) ;
@ -696,7 +720,7 @@ public class RestClient implements ClientHttpRequestInterceptor {
public Optional < ComponentDescriptor > getComponentDescriptorByClazz ( String componentDescriptorClazz ) {
try {
ResponseEntity < ComponentDescriptor > componentDescriptor = restTemplate . getForEntity ( baseURL + "/api/component/{componentDescriptorClazz}" , ComponentDescriptor . class ) ;
ResponseEntity < ComponentDescriptor > componentDescriptor = restTemplate . getForEntity ( baseURL + "/api/component/{componentDescriptorClazz}" , ComponentDescriptor . class , componentDescriptorClazz ) ;
return Optional . ofNullable ( componentDescriptor . getBody ( ) ) ;
} catch ( HttpClientErrorException exception ) {
if ( exception . getStatusCode ( ) = = HttpStatus . NOT_FOUND ) {
@ -1807,31 +1831,21 @@ public class RestClient implements ClientHttpRequestInterceptor {
restTemplate . postForEntity ( baseURL + "/api/user/sendActivationMail?email={email}" , null , Object . class , email ) ;
}
public Optional < String > getActivationLink ( String userId ) {
try {
ResponseEntity < String > activationLink = restTemplate . getForEntity ( baseURL + "/api/user/{userId}/activationLink" , String . class , userId ) ;
return Optional . ofNullable ( activationLink . getBody ( ) ) ;
} catch ( HttpClientErrorException exception ) {
if ( exception . getStatusCode ( ) = = HttpStatus . NOT_FOUND ) {
return Optional . empty ( ) ;
} else {
throw exception ;
}
}
public String getActivationLink ( String userId ) {
return restTemplate . getForEntity ( baseURL + "/api/user/{userId}/activationLink" , String . class , userId ) . getBody ( ) ;
}
public void deleteUser ( String userId ) {
restTemplate . delete ( baseURL + "/api/user/{userId}" , userId ) ;
}
// @RequestMapping(value = "/tenant/{tenantId}/users", params = {"limit"}, method = RequestMethod.GET)
public TextPageData < User > getTenantAdmins ( String tenantId , TextPageLink pageLink ) {
Map < String , String > params = new HashMap < > ( ) ;
params . put ( "tenantId" , tenantId ) ;
addPageLinkToParam ( params , pageLink ) ;
return restTemplate . exchange (
baseURL + "/tenant/{tenantId}/users?" + TEXT_PAGE_LINK_URL_PARAMS ,
baseURL + "/api/ tenant/{tenantId}/users?" + TEXT_PAGE_LINK_URL_PARAMS ,
HttpMethod . GET ,
HttpEntity . EMPTY ,
new ParameterizedTypeReference < TextPageData < User > > ( ) {