diff --git a/gms/src/main/java/it/inaf/ia2/gms/GmsApplication.java b/gms/src/main/java/it/inaf/ia2/gms/GmsApplication.java index a3b2a8f4c3c586824ecaad0ed62fb075ac3a8532..f3f4a5bcab393988d1e053c5e80897e8a73632be 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/GmsApplication.java +++ b/gms/src/main/java/it/inaf/ia2/gms/GmsApplication.java @@ -1,7 +1,10 @@ package it.inaf.ia2.gms; +import it.inaf.ia2.aa.ServiceLocator; +import it.inaf.ia2.rap.client.RapClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -13,4 +16,9 @@ public class GmsApplication { public static void main(String[] args) { SpringApplication.run(GmsApplication.class, args); } + + @Bean + public RapClient rapClient() { + return ServiceLocator.getInstance().getRapClient(); + } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java b/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java index 9013c25432423528b134c3b96fc986b0910b8de3..6273aed731e85b1c44a8ed7cc4e9deb0c0fb4cb0 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java +++ b/gms/src/main/java/it/inaf/ia2/gms/authn/JWTFilter.java @@ -1,10 +1,7 @@ package it.inaf.ia2.gms.authn; -import io.jsonwebtoken.Jwt; -import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.SigningKeyResolver; -import it.inaf.ia2.aa.ServiceLocator; import it.inaf.ia2.gms.persistence.LoggingDAO; +import it.inaf.ia2.rap.client.RapClient; import java.io.IOException; import java.security.Principal; import java.util.Map; @@ -20,11 +17,11 @@ import javax.servlet.http.HttpServletResponse; public class JWTFilter implements Filter { private final LoggingDAO loggingDAO; - private final SigningKeyResolver signingKeyResolver; + private final RapClient rapClient; - public JWTFilter(LoggingDAO loggingDAO) { + public JWTFilter(LoggingDAO loggingDAO, RapClient rapClient) { this.loggingDAO = loggingDAO; - this.signingKeyResolver = ServiceLocator.getInstance().getTokenManager().getSigningKeyResolver(); + this.rapClient = rapClient; } @Override @@ -40,13 +37,10 @@ public class JWTFilter implements Filter { return; } - authHeader = authHeader.replace("Bearer", "").trim(); + String token = authHeader.replace("Bearer", "").trim(); - Jwt jwt = Jwts.parser() - .setSigningKeyResolver(signingKeyResolver) - .parse(authHeader); - - Map<String, Object> claims = (Map<String, Object>) jwt.getBody(); + rapClient.setAccessToken(token); + Map<String, Object> claims = rapClient.parseIdTokenClaims(token); if (claims.get("sub") == null) { loggingDAO.logAction("Attempt to access WS with invalid token", request); diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java b/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java index 9613dd410496fc6630c4b927135453c9b5a16ffc..57df36edd76cbcaf38fb4711bf4cc4b3f2f08c33 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java +++ b/gms/src/main/java/it/inaf/ia2/gms/authn/SecurityConfig.java @@ -1,6 +1,7 @@ package it.inaf.ia2.gms.authn; import it.inaf.ia2.gms.persistence.LoggingDAO; +import it.inaf.ia2.rap.client.RapClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; @@ -47,9 +48,9 @@ public class SecurityConfig { * Checks JWT for web services. */ @Bean - public FilterRegistrationBean serviceJWTFilter(LoggingDAO loggingDAO) { + public FilterRegistrationBean serviceJWTFilter(LoggingDAO loggingDAO, RapClient rapClient) { FilterRegistrationBean bean = new FilterRegistrationBean(); - bean.setFilter(new JWTFilter(loggingDAO)); + bean.setFilter(new JWTFilter(loggingDAO, rapClient)); bean.addUrlPatterns("/ws/jwt/*"); bean.setOrder(Ordered.HIGHEST_PRECEDENCE); return bean; diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/SessionData.java b/gms/src/main/java/it/inaf/ia2/gms/authn/SessionData.java index 0de00ba5ab5505fbcaba89a9b6d9bc206d1f9b1f..6d4194efdf445900f8dc366b037bd07fc80213fd 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/authn/SessionData.java +++ b/gms/src/main/java/it/inaf/ia2/gms/authn/SessionData.java @@ -1,6 +1,7 @@ package it.inaf.ia2.gms.authn; import it.inaf.ia2.aa.data.User; +import it.inaf.ia2.rap.client.RapClient; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @@ -14,58 +15,44 @@ public class SessionData { private static final String USER_DATA = "user_data"; + private User user; + @Autowired private HttpServletRequest request; - private String userId; - private String userName; - private String accessToken; - private String refreshToken; - private long expiration; + @Autowired + private RapClient rapClient; @PostConstruct public void init() { - HttpSession session = request.getSession(false); if (session != null && session.getAttribute(USER_DATA) != null) { - User user = (User) session.getAttribute(USER_DATA); - userId = user.getName(); - userName = user.getUserLabel(); - accessToken = user.getAccessToken(); - refreshToken = user.getRefreshToken(); - setExpiresIn(user.getExpiresIn()); + setUser((User) session.getAttribute(USER_DATA)); } } - public String getUserId() { - return userId; - } - - public String getAccessToken() { - return accessToken; + public void setUser(User user) { + this.user = user; + rapClient.setAccessToken(user.getAccessToken()); } - public void setAccessToken(String accessToken) { - this.accessToken = accessToken; - } - - public String getRefreshToken() { - return refreshToken; + public String getUserId() { + return user.getName(); } - public void setRefreshToken(String refreshToken) { - this.refreshToken = refreshToken; + public String getUserName() { + return user.getUserLabel(); } - public String getUserName() { - return userName; + public String getAccessToken() { + return user.getAccessToken(); } - public void setExpiresIn(long expiresIn) { - this.expiration = System.currentTimeMillis() + expiresIn * 1000; + public String getRefreshToken() { + return user.getRefreshToken(); } public long getExpiresIn() { - return (expiration - System.currentTimeMillis()) / 1000; + return user.getExpiresIn(); } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java index 8607c4b2e1ca838e1dc166e2fb634b8d80135e2b..930c8edea1a1de0e901c03c4e49d3bf67c730f3b 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/JWTWebServiceController.java @@ -7,7 +7,6 @@ import it.inaf.ia2.gms.manager.InvitedRegistrationManager; import it.inaf.ia2.gms.manager.MembershipManager; import it.inaf.ia2.gms.manager.PermissionsManager; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.response.UserPermission; import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO; @@ -19,6 +18,7 @@ import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.service.JoinService; import it.inaf.ia2.gms.service.PermissionUtils; import it.inaf.ia2.gms.service.SearchService; +import it.inaf.ia2.rap.data.RapUser; import java.io.IOException; import java.io.PrintWriter; import java.security.Principal; @@ -340,7 +340,7 @@ public class JWTWebServiceController { try ( PrintWriter pw = new PrintWriter(response.getOutputStream())) { for (RapUser member : membershipManager.getMembers(groupEntity)) { if (selectedUserIds == null || selectedUserIds.contains(member.getId())) { - pw.println(member.getPrimaryEmail()); + pw.println(member.getPrimaryEmailAddress()); } } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/KeepAliveController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/KeepAliveController.java index c41f012597cd6a7c5e59ce6d23db9c57049ab8b4..5e4b15fde34b823c852ad66b1523fe4d1873fda4 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/KeepAliveController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/KeepAliveController.java @@ -1,8 +1,10 @@ package it.inaf.ia2.gms.controller; +import it.inaf.ia2.aa.ServiceLocator; +import it.inaf.ia2.aa.UserManager; import it.inaf.ia2.gms.authn.SessionData; -import it.inaf.ia2.gms.rap.RapClient; import java.util.HashMap; +import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,14 +21,17 @@ public class KeepAliveController { @Autowired private SessionData sessionData; - @Autowired - private RapClient rapClient; + private final UserManager userManager; + + public KeepAliveController() { + userManager = ServiceLocator.getInstance().getUserManager(); + } @GetMapping(value = "/keepAlive", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity<?> keepAlive() { + public ResponseEntity<?> keepAlive(HttpServletRequest request) { LOG.trace("Keepalive called"); if (sessionData.getExpiresIn() < 60) { - rapClient.refreshToken(); + sessionData.setUser(userManager.refreshToken(request)); LOG.trace("RAP token refreshed"); } // empty JSON object response diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java index f31966fc7c63369f672c1a745c4c310c9eae9691..3db24db6b7298493fc9b9c4ada31e10b6316d1cb 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/MembersController.java @@ -4,12 +4,12 @@ import it.inaf.ia2.gms.manager.MembershipManager; import it.inaf.ia2.gms.manager.PermissionsManager; import it.inaf.ia2.gms.model.request.AddMemberRequest; import it.inaf.ia2.gms.model.response.PaginatedData; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.request.PaginatedModelRequest; import it.inaf.ia2.gms.model.request.RemoveMemberRequest; import it.inaf.ia2.gms.model.request.TabRequest; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.service.GroupsService; +import it.inaf.ia2.rap.data.RapUser; import java.util.Collections; import java.util.List; import javax.validation.Valid; diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/SearchController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/SearchController.java index c612e9c4baba290bcdcd75c8641cc88da7c38b30..46ec4842a75fd7d3035016dfe9ba3cfd22b57096 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/SearchController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/SearchController.java @@ -1,7 +1,6 @@ package it.inaf.ia2.gms.controller; import it.inaf.ia2.gms.authn.SessionData; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.response.PaginatedData; import it.inaf.ia2.gms.model.response.SearchResponseItem; import it.inaf.ia2.gms.model.response.UserSearchResponse; diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/UsersController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/UsersController.java index e5d908c265228008b552db7aa3efa6cfd0ee826e..5d96ed400e5379c49c8b7b45e8422c6c44fce729 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/UsersController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/UsersController.java @@ -1,7 +1,7 @@ package it.inaf.ia2.gms.controller; -import it.inaf.ia2.gms.model.RapUser; -import it.inaf.ia2.gms.rap.RapClient; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.RapUser; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -18,6 +18,6 @@ public class UsersController { @GetMapping(value = "users", produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<List<RapUser>> searchUsers(@RequestParam("search") String searchText) { - return ResponseEntity.ok(rapClient.searchUsers(searchText)); + return ResponseEntity.ok(rapClient.getUsers(searchText)); } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/GroupStatusManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/GroupStatusManager.java index 7e756500e4488c73773af36f1f2b75875738eb12..98cbccdb1acfeb858bf7e2bedd85e5d8510133be 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/manager/GroupStatusManager.java +++ b/gms/src/main/java/it/inaf/ia2/gms/manager/GroupStatusManager.java @@ -2,14 +2,14 @@ package it.inaf.ia2.gms.manager; import it.inaf.ia2.gms.exception.UnauthorizedException; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.MembershipEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.GroupNameService; import it.inaf.ia2.gms.service.GroupsService; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.RapUser; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -77,7 +77,7 @@ public class GroupStatusManager extends UserAwareComponent { Map<String, String> usersMap = new HashMap<>(); for (RapUser user : rapClient.getUsers(memberships.stream() .map(u -> u.getUserId()).collect(Collectors.toSet()))) { - usersMap.put(user.getId(), user.getPrimaryEmail()); + usersMap.put(user.getId(), user.getPrimaryEmailAddress()); } List<String[]> rows = new ArrayList<>(); diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java index dec9449f56626d78f3fdfd68f8a074f4d17a5192..82dace994e99bd7ca7a5a0bf76e717ff7575a00d 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java +++ b/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java @@ -13,8 +13,8 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.InvitedRegistration; import it.inaf.ia2.gms.persistence.model.MembershipEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.PermissionsService; +import it.inaf.ia2.rap.client.RapClient; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/MembershipManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/MembershipManager.java index 022e54205e9074e28e7782e39d800024bc57add7..83340a52446292d8dabfb169438254ade5a0cc47 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/manager/MembershipManager.java +++ b/gms/src/main/java/it/inaf/ia2/gms/manager/MembershipManager.java @@ -2,15 +2,15 @@ package it.inaf.ia2.gms.manager; import it.inaf.ia2.gms.exception.UnauthorizedException; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.MembershipEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.PermissionUtils; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.RapUser; import java.util.HashSet; import java.util.List; import java.util.Set; diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java index e6a655190684bb06718650b3ddce5c4ca99ef693..4fd1bdfef3ba6afafcbc3a97b69dd7ba4db18154 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java +++ b/gms/src/main/java/it/inaf/ia2/gms/manager/PermissionsManager.java @@ -2,14 +2,14 @@ package it.inaf.ia2.gms.manager; import it.inaf.ia2.gms.exception.UnauthorizedException; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.UserPermission; import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.PermissionUtils; import it.inaf.ia2.gms.service.PermissionsService; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.RapUser; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/UserPermission.java b/gms/src/main/java/it/inaf/ia2/gms/model/UserPermission.java index 66ab93a33f3bf02c4337ccd7b033c9ee91e94fdb..43a9e0abe60bf617736b904a8337b4c9b07f0f68 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/model/UserPermission.java +++ b/gms/src/main/java/it/inaf/ia2/gms/model/UserPermission.java @@ -1,5 +1,7 @@ package it.inaf.ia2.gms.model; +import it.inaf.ia2.rap.data.RapUser; + public class UserPermission { private RapUser user; diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/response/UserSearchResponse.java b/gms/src/main/java/it/inaf/ia2/gms/model/response/UserSearchResponse.java index 4d00c2489b6ff8f8c25f1aaf328e2b0aff2145b9..c3faa44f07338c9eddef86028af734a051dc1206 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/model/response/UserSearchResponse.java +++ b/gms/src/main/java/it/inaf/ia2/gms/model/response/UserSearchResponse.java @@ -1,6 +1,6 @@ package it.inaf.ia2.gms.model.response; -import it.inaf.ia2.gms.model.RapUser; +import it.inaf.ia2.rap.data.RapUser; import java.util.List; public class UserSearchResponse { diff --git a/gms/src/main/java/it/inaf/ia2/gms/rap/RapClient.java b/gms/src/main/java/it/inaf/ia2/gms/rap/RapClient.java index a2e1948fa3f620416baf5bdad053d29661fcefd5..189472a49d8ea269b640e20894f3f7850d199f2e 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/rap/RapClient.java +++ b/gms/src/main/java/it/inaf/ia2/gms/rap/RapClient.java @@ -3,7 +3,6 @@ package it.inaf.ia2.gms.rap; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import it.inaf.ia2.gms.authn.SessionData; -import it.inaf.ia2.gms.model.RapUser; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -51,124 +50,124 @@ public class RapClient { @Autowired(required = false) private SessionData sessionData; - private final RestTemplate rapRestTemplate; - - private final RestTemplate refreshTokenRestTemplate; +// private final RestTemplate rapRestTemplate; +// +// private final RestTemplate refreshTokenRestTemplate; private final ObjectMapper objectMapper = new ObjectMapper(); - - @Autowired - public RapClient(RestTemplate rapRestTemplate) { - this.rapRestTemplate = rapRestTemplate; - this.refreshTokenRestTemplate = new RestTemplate(); - } - - public RapUser getUser(String userId) { - - String url = rapBaseUrl + "/user/" + userId; - - return httpCall(entity -> { - return rapRestTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<RapUser>() { - }).getBody(); - }); - } - - public List<RapUser> getUsers(Set<String> identifiers) { - - if (identifiers.isEmpty()) { - return new ArrayList<>(); - } - - String url = rapBaseUrl + "/user?identifiers=" + String.join(",", identifiers); - - return httpCall(entity -> { - return rapRestTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<List<RapUser>>() { - }).getBody(); - }); - } - - public List<RapUser> searchUsers(String searchText) { - - if (searchText == null || searchText.trim().isEmpty()) { - return new ArrayList<>(); - } - - String url = rapBaseUrl + "/user?search=" + searchText; - - return httpCall(entity -> { - return rapRestTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<List<RapUser>>() { - }).getBody(); - }); - } - - private <R> R httpCall(Function<HttpEntity<?>, R> function) { - return httpCall(function, null); - } - - private <R, T> R httpCall(Function<HttpEntity<?>, R> function, T body) { - try { - try { - return function.apply(getEntity(body)); - } catch (HttpClientErrorException.Unauthorized ex) { - if (request.getSession(false) == null || sessionData.getExpiresIn() > 0) { - // we can't refresh the token without a session - throw ex; - } - refreshToken(); - return function.apply(getEntity(body)); - } - } catch (HttpStatusCodeException ex) { - try { - Map<String, String> map = objectMapper.readValue(ex.getResponseBodyAsString(), Map.class); - if (map.containsKey("error")) { - String error = map.get("error"); - if (ex instanceof HttpClientErrorException) { - throw new HttpClientErrorException(ex.getStatusCode(), error); - } else if (ex instanceof HttpServerErrorException) { - throw new HttpServerErrorException(ex.getStatusCode(), error); - } - } - } catch (JsonProcessingException ignore) { - } - throw ex; - } - } - - private <T> HttpEntity<T> getEntity(T body) { - - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); - if (request.getSession(false) != null) { - headers.add("Authorization", "Bearer " + sessionData.getAccessToken()); - } else { - // from JWT web service - headers.add("Authorization", request.getHeader("Authorization")); - } - - return new HttpEntity<>(body, headers); - } - - public void refreshToken() { - - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); - headers.setBasicAuth(clientId, clientSecret); - - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - - MultiValueMap<String, String> map = new LinkedMultiValueMap<>(); - map.add("grant_type", "refresh_token"); - map.add("refresh_token", sessionData.getRefreshToken()); - map.add("scope", scope.replace(",", " ")); - - HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers); - - ResponseEntity<Map> response = refreshTokenRestTemplate.postForEntity(accessTokenUri, request, Map.class); - - Map<String, Object> values = response.getBody(); - - sessionData.setAccessToken((String) values.get("access_token")); - sessionData.setRefreshToken((String) values.get("refresh_token")); - sessionData.setExpiresIn((int) values.get("expires_in")); - } +// +// @Autowired +// public RapClient(RestTemplate rapRestTemplate) { +// this.rapRestTemplate = rapRestTemplate; +// this.refreshTokenRestTemplate = new RestTemplate(); +// } +// +// public RapUser getUser(String userId) { +// +// String url = rapBaseUrl + "/user/" + userId; +// +// return httpCall(entity -> { +// return rapRestTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<RapUser>() { +// }).getBody(); +// }); +// } +// +// public List<RapUser> getUsers(Set<String> identifiers) { +// +// if (identifiers.isEmpty()) { +// return new ArrayList<>(); +// } +// +// String url = rapBaseUrl + "/user?identifiers=" + String.join(",", identifiers); +// +// return httpCall(entity -> { +// return rapRestTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<List<RapUser>>() { +// }).getBody(); +// }); +// } +// +// public List<RapUser> searchUsers(String searchText) { +// +// if (searchText == null || searchText.trim().isEmpty()) { +// return new ArrayList<>(); +// } +// +// String url = rapBaseUrl + "/user?search=" + searchText; +// +// return httpCall(entity -> { +// return rapRestTemplate.exchange(url, HttpMethod.GET, entity, new ParameterizedTypeReference<List<RapUser>>() { +// }).getBody(); +// }); +// } +// +// private <R> R httpCall(Function<HttpEntity<?>, R> function) { +// return httpCall(function, null); +// } +// +// private <R, T> R httpCall(Function<HttpEntity<?>, R> function, T body) { +// try { +// try { +// return function.apply(getEntity(body)); +// } catch (HttpClientErrorException.Unauthorized ex) { +// if (request.getSession(false) == null || sessionData.getExpiresIn() > 0) { +// // we can't refresh the token without a session +// throw ex; +// } +// refreshToken(); +// return function.apply(getEntity(body)); +// } +// } catch (HttpStatusCodeException ex) { +// try { +// Map<String, String> map = objectMapper.readValue(ex.getResponseBodyAsString(), Map.class); +// if (map.containsKey("error")) { +// String error = map.get("error"); +// if (ex instanceof HttpClientErrorException) { +// throw new HttpClientErrorException(ex.getStatusCode(), error); +// } else if (ex instanceof HttpServerErrorException) { +// throw new HttpServerErrorException(ex.getStatusCode(), error); +// } +// } +// } catch (JsonProcessingException ignore) { +// } +// throw ex; +// } +// } +// +// private <T> HttpEntity<T> getEntity(T body) { +// +// HttpHeaders headers = new HttpHeaders(); +// headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); +// if (request.getSession(false) != null) { +// headers.add("Authorization", "Bearer " + sessionData.getAccessToken()); +// } else { +// // from JWT web service +// headers.add("Authorization", request.getHeader("Authorization")); +// } +// +// return new HttpEntity<>(body, headers); +// } +// +// public void refreshToken() { +// +// HttpHeaders headers = new HttpHeaders(); +// headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); +// headers.setBasicAuth(clientId, clientSecret); +// +// headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); +// +// MultiValueMap<String, String> map = new LinkedMultiValueMap<>(); +// map.add("grant_type", "refresh_token"); +// map.add("refresh_token", sessionData.getRefreshToken()); +// map.add("scope", scope.replace(",", " ")); +// +// HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers); +// +// ResponseEntity<Map> response = refreshTokenRestTemplate.postForEntity(accessTokenUri, request, Map.class); +// +// Map<String, Object> values = response.getBody(); +// +// sessionData.setAccessToken((String) values.get("access_token")); +// sessionData.setRefreshToken((String) values.get("refresh_token")); +// sessionData.setExpiresIn((int) values.get("expires_in")); +// } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java b/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java index 9f59907cc51db024182baba78611e6c58b902135..89cd7c5fd6df52dc8a0bbdad142ed0ecd77b0fee 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java +++ b/gms/src/main/java/it/inaf/ia2/gms/service/SearchService.java @@ -13,7 +13,7 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; +import it.inaf.ia2.rap.client.RapClient; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.List; @@ -58,7 +58,7 @@ public class SearchService { } private List<SearchResponseItem> searchUsers(String query) { - return rapClient.searchUsers(query).stream() + return rapClient.getUsers(query).stream() .map(u -> { SearchResponseItem item = new SearchResponseItem(); item.setType(SearchResponseType.USER); diff --git a/gms/src/main/resources/application.properties b/gms/src/main/resources/application.properties index 1091bbab7df23d083b6836d52dbc42db209311f1..3428af258478003b6ab781cd554b23699634b93b 100644 --- a/gms/src/main/resources/application.properties +++ b/gms/src/main/resources/application.properties @@ -4,14 +4,6 @@ server.servlet.context-path=/gms spring.main.allow-bean-definition-overriding=true server.error.whitelabel.enabled=false -security.oauth2.client.client-id=gms -security.oauth2.client.client-secret=gms-secret -security.oauth2.client.access-token-uri=http://localhost/rap-ia2/auth/oauth2/token -security.oauth2.client.user-authorization-uri=http://localhost/rap-ia2/auth/oauth2/authorize -security.oauth2.resource.token-info-uri=http://localhost/rap-ia2/auth/oauth2/check_token -security.oauth2.client.scope=openid,email,profile,read:rap -security.oauth2.resource.jwk.key-set-uri=http://localhost/rap-ia2/auth/oidc/jwks - logging.level.it.inaf=TRACE logging.level.org.springframework.security=DEBUG logging.level.org.springframework.jdbc=TRACE diff --git a/gms/src/main/resources/auth.properties b/gms/src/main/resources/auth.properties index 7bd1b03a1fa98b51489556599bb2898e8ebf3297..19880c5b62856cb9a79ab8f73ff23cb447aa7135 100644 --- a/gms/src/main/resources/auth.properties +++ b/gms/src/main/resources/auth.properties @@ -1,10 +1,5 @@ client_id=gms client_secret=gms-secret -access_token_uri=http://localhost/rap-ia2/auth/oauth2/token -user_authorization_uri=http://localhost/rap-ia2/auth/oauth2/authorize -check_token_uri=http://localhost/rap-ia2/auth/oauth2/token -jwks_uri=http://localhost/rap-ia2/auth/oidc/jwks -gms_uri=http://localhost:8082/gms/ws/jwt -groups_autoload=false +rap_uri=http://localhost/rap-ia2 store_state_on_login_endpoint=true scope=openid email profile read:rap diff --git a/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java b/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java index 625e72c14dc3f3feb6113d24a72e2a309fe791c4..89453288494407d08101c36f322287d73aae4017 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/controller/JWTWebServiceControllerTest.java @@ -4,7 +4,6 @@ import it.inaf.ia2.gms.manager.GroupsManager; import it.inaf.ia2.gms.manager.MembershipManager; import it.inaf.ia2.gms.manager.PermissionsManager; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.UserPermission; import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO; @@ -13,6 +12,7 @@ import it.inaf.ia2.gms.persistence.model.MembershipEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.service.JoinService; +import it.inaf.ia2.rap.data.RapUser; import java.security.Principal; import java.util.ArrayList; import java.util.Arrays; diff --git a/gms/src/test/java/it/inaf/ia2/gms/manager/InvitedRegistrationManagerTest.java b/gms/src/test/java/it/inaf/ia2/gms/manager/InvitedRegistrationManagerTest.java index 13cf87d37e771480d2d06898e3cbcf7e356f08fa..192c62e1a42b1750b4849c44660cc7d5e238745c 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/manager/InvitedRegistrationManagerTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/manager/InvitedRegistrationManagerTest.java @@ -1,18 +1,18 @@ package it.inaf.ia2.gms.manager; import it.inaf.ia2.gms.authn.SessionData; -import it.inaf.ia2.gms.model.Identity; -import it.inaf.ia2.gms.model.IdentityType; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.InvitedRegistrationDAO; import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.InvitedRegistration; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.PermissionsService; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.Identity; +import it.inaf.ia2.rap.data.IdentityType; +import it.inaf.ia2.rap.data.RapUser; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -102,7 +102,7 @@ public class InvitedRegistrationManagerTest { Identity identity = new Identity(); identity.setType(IdentityType.EDU_GAIN); identity.setEmail(EMAIL); - user.setIdentities(Collections.singletonList(identity)); + user.getIdentities().addAll(Collections.singletonList(identity)); when(rapClient.getUser(eq(USER_ID))).thenReturn(user); diff --git a/gms/src/test/java/it/inaf/ia2/gms/manager/PermissionsManagerIntegrationTest.java b/gms/src/test/java/it/inaf/ia2/gms/manager/PermissionsManagerIntegrationTest.java index 9a25bc6eaf540ce6f9465fdfe44374f014eb56cd..5eec6c7d48b9dcb3ee02e115f3e7c9ba873fb002 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/manager/PermissionsManagerIntegrationTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/manager/PermissionsManagerIntegrationTest.java @@ -2,17 +2,18 @@ package it.inaf.ia2.gms.manager; import it.inaf.ia2.gms.DataSourceConfig; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.UserPermission; import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.PermissionsService; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.RapUser; import java.util.Collections; import java.util.List; +import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.sql.DataSource; import static org.junit.Assert.assertEquals; @@ -52,7 +53,7 @@ public class PermissionsManagerIntegrationTest { // Mock RAP client RapUser rapUser = new RapUser(); rapUser.setId(USER_ID); - when(rapClient.getUsers(any())).thenReturn(Collections.singletonList(rapUser)); + when(rapClient.getUsers(any(Set.class))).thenReturn(Collections.singletonList(rapUser)); PermissionsService permissionsService = new PermissionsService(permissionsDAO, loggingDAO); PermissionsManager permissionsManager = new PermissionsManager(permissionsService, rapClient, loggingDAO); diff --git a/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java b/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java index baa08c183dd0e426f696857d3d8320d28c79a5fe..73d7d9985bb3dc0541b0c7aecc51d4e96c13b304 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/persistence/NestedGroupsIntegrationTest.java @@ -10,9 +10,9 @@ import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.model.request.GroupsRequest; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.service.GroupsTreeBuilder; import it.inaf.ia2.gms.service.PermissionsService; +import it.inaf.ia2.rap.client.RapClient; import java.util.List; import javax.sql.DataSource; import static org.junit.Assert.assertEquals; diff --git a/gms/src/test/java/it/inaf/ia2/gms/rap/RapClientTest.java b/gms/src/test/java/it/inaf/ia2/gms/rap/RapClientTest.java index bd317c09d73c7def90f287ede0cf2c05ab08c584..09becbfc53457dea0335e75665a11b0003ac6cb0 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/rap/RapClientTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/rap/RapClientTest.java @@ -1,7 +1,6 @@ package it.inaf.ia2.gms.rap; import it.inaf.ia2.gms.authn.SessionData; -import it.inaf.ia2.gms.model.RapUser; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @@ -34,120 +33,120 @@ import org.springframework.web.client.HttpServerErrorException; import org.springframework.web.client.HttpServerErrorException.InternalServerError; import org.springframework.web.client.RestTemplate; -@RunWith(MockitoJUnitRunner.class) +//@RunWith(MockitoJUnitRunner.class) public class RapClientTest { - @Mock - private HttpServletRequest request; - - @Mock - private SessionData sessionData; - - @Mock - private RestTemplate restTemplate; - - @Mock - private RestTemplate refreshTokenRestTemplate; - - private RapClient rapClient; - - @Before - public void init() { - rapClient = new RapClient(restTemplate); - ReflectionTestUtils.setField(rapClient, "request", request); - ReflectionTestUtils.setField(rapClient, "refreshTokenRestTemplate", refreshTokenRestTemplate); - ReflectionTestUtils.setField(rapClient, "scope", "openid"); - } - - @Test - public void testUnauthorizedNoRefreshJsonMsg() { - - String jsonError = "{\"error\":\"Unauthorized: foo\"}"; - - HttpClientErrorException exception = Unauthorized - .create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); - - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { - }))).thenThrow(exception); - - try { - rapClient.getUser("123"); - } catch (HttpClientErrorException ex) { - assertEquals("401 Unauthorized: foo", ex.getMessage()); - } - } - - @Test - public void testUnauthorizedNoRefreshNotJsonMsg() { - - String errorMessage = "THIS IS NOT A JSON"; - - HttpClientErrorException exception = Unauthorized - .create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, errorMessage.getBytes(), StandardCharsets.UTF_8); - - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { - }))).thenThrow(exception); - - try { - rapClient.getUser("123"); - } catch (HttpClientErrorException ex) { - assertNotNull(ex.getMessage()); - } - } - - @Test - public void testServerErrorJsonMsg() { - - String jsonError = "{\"error\":\"Fatal error\"}"; - - HttpServerErrorException exception = InternalServerError - .create(HttpStatus.INTERNAL_SERVER_ERROR, "500", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); - - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { - }))).thenThrow(exception); - - try { - rapClient.getUser("123"); - } catch (HttpServerErrorException ex) { - assertEquals("500 Fatal error", ex.getMessage()); - } - } - - @Test - public void testRefreshToken() { - - when(request.getSession(eq(false))).thenReturn(mock(HttpSession.class)); - when(sessionData.getExpiresIn()).thenReturn(-100l); - - ReflectionTestUtils.setField(rapClient, "sessionData", sessionData); - ReflectionTestUtils.setField(rapClient, "clientId", "clientId"); - ReflectionTestUtils.setField(rapClient, "clientSecret", "clientSecret"); - ReflectionTestUtils.setField(rapClient, "accessTokenUri", "https://sso.ia2.inaf.it"); - - String jsonError = "{\"error\":\"Unauthorized: token expired\"}"; - - HttpClientErrorException exception = Unauthorized - .create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); - - when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { - }))).thenThrow(exception) - .thenReturn(ResponseEntity.ok(new RapUser())); - - ResponseEntity refreshTokenResponse = mock(ResponseEntity.class); - Map<String, Object> mockedBody = new HashMap<>(); - mockedBody.put("access_token", "<access_token>"); - mockedBody.put("refresh_token", "<refresh_token>"); - mockedBody.put("expires_in", 3600); - when(refreshTokenResponse.getBody()).thenReturn(mockedBody); - - when(refreshTokenRestTemplate.postForEntity(anyString(), any(HttpEntity.class), any())) - .thenReturn(refreshTokenResponse); - - RapUser user = rapClient.getUser("123"); - assertNotNull(user); - - // verifies that token is refreshed - verify(sessionData, times(1)).setAccessToken(eq("<access_token>")); - verify(sessionData, times(1)).setExpiresIn(eq(3600l)); - } +// @Mock +// private HttpServletRequest request; +// +// @Mock +// private SessionData sessionData; +// +// @Mock +// private RestTemplate restTemplate; +// +// @Mock +// private RestTemplate refreshTokenRestTemplate; +// +// private RapClient rapClient; +// +// @Before +// public void init() { +// rapClient = new RapClient(restTemplate); +// ReflectionTestUtils.setField(rapClient, "request", request); +// ReflectionTestUtils.setField(rapClient, "refreshTokenRestTemplate", refreshTokenRestTemplate); +// ReflectionTestUtils.setField(rapClient, "scope", "openid"); +// } +// +// @Test +// public void testUnauthorizedNoRefreshJsonMsg() { +// +// String jsonError = "{\"error\":\"Unauthorized: foo\"}"; +// +// HttpClientErrorException exception = Unauthorized +// .create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); +// +// when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { +// }))).thenThrow(exception); +// +// try { +// rapClient.getUser("123"); +// } catch (HttpClientErrorException ex) { +// assertEquals("401 Unauthorized: foo", ex.getMessage()); +// } +// } +// +// @Test +// public void testUnauthorizedNoRefreshNotJsonMsg() { +// +// String errorMessage = "THIS IS NOT A JSON"; +// +// HttpClientErrorException exception = Unauthorized +// .create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, errorMessage.getBytes(), StandardCharsets.UTF_8); +// +// when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { +// }))).thenThrow(exception); +// +// try { +// rapClient.getUser("123"); +// } catch (HttpClientErrorException ex) { +// assertNotNull(ex.getMessage()); +// } +// } +// +// @Test +// public void testServerErrorJsonMsg() { +// +// String jsonError = "{\"error\":\"Fatal error\"}"; +// +// HttpServerErrorException exception = InternalServerError +// .create(HttpStatus.INTERNAL_SERVER_ERROR, "500", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); +// +// when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { +// }))).thenThrow(exception); +// +// try { +// rapClient.getUser("123"); +// } catch (HttpServerErrorException ex) { +// assertEquals("500 Fatal error", ex.getMessage()); +// } +// } +// +// @Test +// public void testRefreshToken() { +// +// when(request.getSession(eq(false))).thenReturn(mock(HttpSession.class)); +// when(sessionData.getExpiresIn()).thenReturn(-100l); +// +// ReflectionTestUtils.setField(rapClient, "sessionData", sessionData); +// ReflectionTestUtils.setField(rapClient, "clientId", "clientId"); +// ReflectionTestUtils.setField(rapClient, "clientSecret", "clientSecret"); +// ReflectionTestUtils.setField(rapClient, "accessTokenUri", "https://sso.ia2.inaf.it"); +// +// String jsonError = "{\"error\":\"Unauthorized: token expired\"}"; +// +// HttpClientErrorException exception = Unauthorized +// .create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); +// +// when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() { +// }))).thenThrow(exception) +// .thenReturn(ResponseEntity.ok(new RapUser())); +// +// ResponseEntity refreshTokenResponse = mock(ResponseEntity.class); +// Map<String, Object> mockedBody = new HashMap<>(); +// mockedBody.put("access_token", "<access_token>"); +// mockedBody.put("refresh_token", "<refresh_token>"); +// mockedBody.put("expires_in", 3600); +// when(refreshTokenResponse.getBody()).thenReturn(mockedBody); +// +// when(refreshTokenRestTemplate.postForEntity(anyString(), any(HttpEntity.class), any())) +// .thenReturn(refreshTokenResponse); +// +// RapUser user = rapClient.getUser("123"); +// assertNotNull(user); +// +// // verifies that token is refreshed +// verify(sessionData, times(1)).setAccessToken(eq("<access_token>")); +// verify(sessionData, times(1)).setExpiresIn(eq(3600l)); +// } } diff --git a/gms/src/test/java/it/inaf/ia2/gms/service/SearchServiceTest.java b/gms/src/test/java/it/inaf/ia2/gms/service/SearchServiceTest.java index 098d24c62d959296f238b88c12626b38b5c93930..bb44208ef9f8a15c0a99a6e231e869a1f442831d 100644 --- a/gms/src/test/java/it/inaf/ia2/gms/service/SearchServiceTest.java +++ b/gms/src/test/java/it/inaf/ia2/gms/service/SearchServiceTest.java @@ -1,10 +1,7 @@ package it.inaf.ia2.gms.service; import it.inaf.ia2.gms.manager.GroupsManager; -import it.inaf.ia2.gms.model.Identity; -import it.inaf.ia2.gms.model.IdentityType; import it.inaf.ia2.gms.model.Permission; -import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.response.PaginatedData; import it.inaf.ia2.gms.model.response.SearchResponseItem; import it.inaf.ia2.gms.model.response.SearchResponseType; @@ -14,7 +11,10 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity; -import it.inaf.ia2.gms.rap.RapClient; +import it.inaf.ia2.rap.client.RapClient; +import it.inaf.ia2.rap.data.Identity; +import it.inaf.ia2.rap.data.IdentityType; +import it.inaf.ia2.rap.data.RapUser; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -93,7 +93,7 @@ public class SearchServiceTest { identity.setTypedId("user@inaf.it"); user.setIdentities(Collections.singletonList(identity)); - when(rapClient.searchUsers(any())).thenReturn(Collections.singletonList(user)); + when(rapClient.getUsers(any(String.class))).thenReturn(Collections.singletonList(user)); GroupEntity group1 = new GroupEntity(); group1.setId("group1_id");