Skip to content
...@@ -13,11 +13,11 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO; ...@@ -13,11 +13,11 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO;
import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.authn.RapClient;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -58,7 +58,7 @@ public class SearchService { ...@@ -58,7 +58,7 @@ public class SearchService {
} }
private List<SearchResponseItem> searchUsers(String query) { private List<SearchResponseItem> searchUsers(String query) {
return rapClient.searchUsers(query).stream() return rapClient.getUsers(query).stream()
.map(u -> { .map(u -> {
SearchResponseItem item = new SearchResponseItem(); SearchResponseItem item = new SearchResponseItem();
item.setType(SearchResponseType.USER); item.setType(SearchResponseType.USER);
...@@ -75,22 +75,16 @@ public class SearchService { ...@@ -75,22 +75,16 @@ public class SearchService {
// Select only the groups visible to the user // Select only the groups visible to the user
List<PermissionEntity> permissions = permissionsDAO.findUserPermissions(userId); List<PermissionEntity> permissions = permissionsDAO.findUserPermissions(userId);
Set<GroupEntity> visibleGroups = getVisibleGroups(allGroups, permissions);
List<Map.Entry<String, String>> groupsIdPath = new ArrayList<>();
for (GroupEntity group : allGroups) {
PermissionUtils.getGroupPermission(group, permissions).ifPresent(permission -> {
groupsIdPath.add(new SimpleEntry<>(group.getId(), group.getPath()));
});
}
List<SearchResponseItem> items = new ArrayList<>(); List<SearchResponseItem> items = new ArrayList<>();
Map<String, List<String>> groupNames = groupNameService.getNames(groupsIdPath); Map<String, List<String>> groupNames = groupNameService.getNames(visibleGroups);
for (Map.Entry<String, String> entry : groupsIdPath) {
String groupId = entry.getKey(); for (GroupEntity group : visibleGroups) {
SearchResponseItem item = new SearchResponseItem(); SearchResponseItem item = new SearchResponseItem();
item.setType(SearchResponseType.GROUP); item.setType(SearchResponseType.GROUP);
item.setId(groupId); item.setId(group.getId());
List<String> names = groupNames.get(groupId); List<String> names = groupNames.get(group.getId());
item.setLabel(String.join(" / ", names)); item.setLabel(String.join(" / ", names));
items.add(item); items.add(item);
} }
...@@ -115,7 +109,7 @@ public class SearchService { ...@@ -115,7 +109,7 @@ public class SearchService {
sortByGroupCompleteName(groups); sortByGroupCompleteName(groups);
response.setGroups(groups); response.setGroups(groups);
List<UserPermission> permissions = getUserPermission(targetUserId, actorPermissions); List<UserPermission> permissions = getUserPermission(groupsManager.getRoot(), targetUserId, actorPermissions);
sortByGroupCompleteName(permissions); sortByGroupCompleteName(permissions);
response.setPermissions(permissions); response.setPermissions(permissions);
...@@ -129,15 +123,9 @@ public class SearchService { ...@@ -129,15 +123,9 @@ public class SearchService {
List<GroupEntity> allGroups = membershipsDAO.getUserMemberships(targetUserId); List<GroupEntity> allGroups = membershipsDAO.getUserMemberships(targetUserId);
// Select only groups visible to the actor user // Select only groups visible to the actor user
List<Map.Entry<String, String>> visibleGroupsIdPath = new ArrayList<>(); Set<GroupEntity> visibleGroups = getVisibleGroups(allGroups, actorPermissions);
for (GroupEntity group : allGroups) {
PermissionUtils.getGroupPermission(group, actorPermissions).ifPresent(permission -> {
visibleGroupsIdPath.add(new SimpleEntry<>(group.getId(), group.getPath()));
});
}
return groupNameService.getNames(visibleGroupsIdPath).entrySet().stream() return groupNameService.getNames(visibleGroups).entrySet().stream()
.map(entry -> { .map(entry -> {
UserGroup ug = new UserGroup(); UserGroup ug = new UserGroup();
ug.setGroupId(entry.getKey()); ug.setGroupId(entry.getKey());
...@@ -147,24 +135,28 @@ public class SearchService { ...@@ -147,24 +135,28 @@ public class SearchService {
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public List<UserPermission> getUserPermission(String targetUserId, List<PermissionEntity> actorPermissions) { private Set<GroupEntity> getVisibleGroups(List<GroupEntity> allGroups, List<PermissionEntity> permissions) {
return allGroups.stream()
.filter(g -> PermissionUtils.getGroupPermission(g, permissions).isPresent())
.collect(Collectors.toSet());
}
public List<UserPermission> getUserPermission(GroupEntity group, String targetUserId, List<PermissionEntity> actorPermissions) {
List<UserPermission> permissions = new ArrayList<>(); List<UserPermission> permissions = new ArrayList<>();
// Super-admin user is able to see also other user permissions // Super-admin user is able to see also other user permissions
PermissionUtils.getGroupPermission(groupsManager.getRoot(), actorPermissions).ifPresent(permission -> { PermissionUtils.getGroupPermission(group, actorPermissions).ifPresent(permission -> {
if (permission.equals(Permission.ADMIN)) { if (permission.equals(Permission.ADMIN)) {
Map<String, PermissionEntity> targetUserPermissions Map<String, PermissionEntity> targetUserPermissions
= permissionsDAO.findUserPermissions(targetUserId).stream() = permissionsDAO.findUserPermissions(targetUserId).stream()
.collect(Collectors.toMap(PermissionEntity::getGroupId, p -> p)); .collect(Collectors.toMap(PermissionEntity::getGroupId, p -> p));
List<Map.Entry<String, String>> groupsIdPath = new ArrayList<>(); Set<String> groupIds = targetUserPermissions.values().stream()
for (PermissionEntity p : targetUserPermissions.values()) { .map(p -> p.getGroupId()).collect(Collectors.toSet());
groupsIdPath.add(new SimpleEntry<>(p.getGroupId(), p.getGroupPath()));
}
for (Map.Entry<String, List<String>> entry : groupNameService.getNames(groupsIdPath).entrySet()) { for (Map.Entry<String, List<String>> entry : groupNameService.getNamesFromIds(groupIds).entrySet()) {
UserPermission up = new UserPermission(); UserPermission up = new UserPermission();
up.setGroupId(entry.getKey()); up.setGroupId(entry.getKey());
up.setGroupCompleteName(entry.getValue()); up.setGroupCompleteName(entry.getValue());
......
...@@ -4,14 +4,6 @@ server.servlet.context-path=/gms ...@@ -4,14 +4,6 @@ server.servlet.context-path=/gms
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
server.error.whitelabel.enabled=false 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/franco/fake-rap/token.php
security.oauth2.client.user-authorization-uri=http://localhost/franco/fake-rap/index.php
security.oauth2.resource.token-info-uri=http://localhost/franco/fake-rap/check-token.php
security.oauth2.client.scope=openid,email,profile
security.oauth2.resource.jwk.key-set-uri=http://localhost/franco/fake-rap/jwks.php
logging.level.it.inaf=TRACE logging.level.it.inaf=TRACE
logging.level.org.springframework.security=DEBUG logging.level.org.springframework.security=DEBUG
logging.level.org.springframework.jdbc=TRACE logging.level.org.springframework.jdbc=TRACE
...@@ -21,8 +13,6 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/postgres ...@@ -21,8 +13,6 @@ spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=gms spring.datasource.username=gms
spring.datasource.password=gms spring.datasource.password=gms
rap.ws-url=http://localhost/franco/fake-rap/get-users.php
rap.ws.basic-auth=true
support.contact.label=IA2 team support.contact.label=IA2 team
support.contact.email=ia2@inaf.it support.contact.email=ia2@inaf.it
......
client_id=gms client_id=
client_secret=gms-secret client_secret=
access_token_uri=http://localhost/rap-ia2/auth/oauth2/token
user_authorization_uri=http://localhost/rap-ia2/auth/oauth2/authorize rap_uri=https://auth.inaf.it/auth/prod/
check_token_uri=http://localhost/rap-ia2/auth/oauth2/token
jwks_uri=http://localhost/rap-ia2/auth/oidc/jwks access_token_endpoint=accessToken/
gms_uri=http://localhost:8082/gms/ws/jwt user_authorization_endpoint=authorization/
check_token_endpoint=userInfo/
jwks_endpoint=jwks?client_name=ia2gms
rap_ws_user_endpoint=portal/SendUsers.php/user
rap_client_class=it.inaf.ia2.gms.authn.ClientDbRapClient
gms_uri=https://sso-devel.ia2.inaf.it/gms
groups_autoload=false groups_autoload=false
store_state_on_login_endpoint=true store_state_on_login_endpoint=true
scope=openid email profile read:rap scope=openid email profile read:rap
...@@ -63,3 +63,18 @@ CREATE TABLE invited_registration_request_group ( ...@@ -63,3 +63,18 @@ CREATE TABLE invited_registration_request_group (
FOREIGN KEY (request_id) REFERENCES invited_registration_request(id), FOREIGN KEY (request_id) REFERENCES invited_registration_request(id),
FOREIGN KEY (group_id) REFERENCES gms_group(id) FOREIGN KEY (group_id) REFERENCES gms_group(id)
); );
CREATE VIEW group_complete_name AS
SELECT id, string_agg(name, '.') AS complete_name
FROM (
SELECT replace(name, '.', '\.') AS name, p.id
FROM gms_group g
JOIN (
SELECT UNNEST(string_to_array(path::varchar, '.')) AS rel_id, id
FROM gms_group
) AS p ON g.id = p.rel_id
ORDER BY p.id, nlevel(g.path)
) AS j GROUP BY id
UNION
SELECT id, name AS complete_name FROM gms_group WHERE id = 'ROOT'
ORDER BY complete_name;
package it.inaf.ia2.gms;
import java.security.Principal;
import javax.servlet.http.HttpServletRequest;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class GmsTestUtils {
public static void mockPrincipal(HttpServletRequest mockedServletRequest) {
mockPrincipal(mockedServletRequest, "admin_id");
}
public static void mockPrincipal(HttpServletRequest mockedServletRequest, String userId) {
Principal principal = mock(Principal.class);
when(principal.getName()).thenReturn(userId);
when(mockedServletRequest.getUserPrincipal()).thenReturn(principal);
}
}
package it.inaf.ia2.gms.authn;
import it.inaf.ia2.aa.AuthConfig;
import it.inaf.ia2.aa.UserManager;
import java.net.URI;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.eq;
import org.mockito.Mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class ClientDbFilterTest {
@Mock
private HttpServletRequest request;
@Mock
private AuthConfig authConfig;
@Mock
private UserManager userManager;
private ClientDbFilter filter;
@Test
public void testJwksUriOverride() throws Exception {
when(authConfig.getRapBaseUri()).thenReturn("http://ia2.inaf.it");
when(authConfig.getJwksEndpoint()).thenReturn("/jwks?client_name=db0");
when(request.getSession()).thenReturn(mock(HttpSession.class));
when(request.getParameter(eq("client_db"))).thenReturn("other_db");
filter = new ClientDbFilter(authConfig, userManager);
filter.doFilter(request, mock(HttpServletResponse.class), mock(FilterChain.class));
verify(userManager).addJwksUri(eq(URI.create("http://ia2.inaf.it/jwks?client_name=other_db")));
}
}
package it.inaf.ia2.gms.authn; package it.inaf.ia2.gms.authn;
import it.inaf.ia2.aa.data.User; import it.inaf.ia2.aa.data.User;
import it.inaf.ia2.gms.authn.RapClient;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
...@@ -19,6 +20,9 @@ public class SessionDataTest { ...@@ -19,6 +20,9 @@ public class SessionDataTest {
@Mock @Mock
private HttpServletRequest request; private HttpServletRequest request;
@Mock
private RapClient rapClient;
@InjectMocks @InjectMocks
private SessionData sessionData; private SessionData sessionData;
...@@ -28,12 +32,12 @@ public class SessionDataTest { ...@@ -28,12 +32,12 @@ public class SessionDataTest {
HttpSession session = mock(HttpSession.class); HttpSession session = mock(HttpSession.class);
when(request.getSession(eq(false))).thenReturn(session); when(request.getSession(eq(false))).thenReturn(session);
User user = new User() User user = new User();
.setUserId("123") user.setUserId("123");
.setUserLabel("Name Surname") user.setUserLabel("Name Surname");
.setAccessToken("<access_token>") user.setAccessToken("<access_token>");
.setRefreshToken("<refresh_token>") user.setRefreshToken("<refresh_token>");
.setExpiresIn(3600); user.setExpiresIn(3600);
when(session.getAttribute(eq("user_data"))).thenReturn(user); when(session.getAttribute(eq("user_data"))).thenReturn(user);
......
package it.inaf.ia2.gms.controller; package it.inaf.ia2.gms.controller;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import it.inaf.ia2.gms.authn.SessionData; import it.inaf.ia2.gms.GmsTestUtils;
import it.inaf.ia2.gms.manager.GroupsManager; import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.PermissionsManager; import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.GroupNode; import it.inaf.ia2.gms.model.GroupNode;
...@@ -14,6 +14,7 @@ import it.inaf.ia2.gms.service.GroupsService; ...@@ -14,6 +14,7 @@ import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.GroupsTreeBuilder; import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletRequest;
import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.notNullValue;
import org.junit.Before; import org.junit.Before;
...@@ -50,7 +51,7 @@ public class GroupsControllerTest { ...@@ -50,7 +51,7 @@ public class GroupsControllerTest {
private GroupsService groupsService; private GroupsService groupsService;
@Mock @Mock
private SessionData session; private HttpServletRequest servletRequest;
@Mock @Mock
private PermissionsManager permissionsManager; private PermissionsManager permissionsManager;
...@@ -71,6 +72,7 @@ public class GroupsControllerTest { ...@@ -71,6 +72,7 @@ public class GroupsControllerTest {
@Before @Before
public void init() { public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
GmsTestUtils.mockPrincipal(servletRequest);
} }
@Test @Test
...@@ -104,8 +106,6 @@ public class GroupsControllerTest { ...@@ -104,8 +106,6 @@ public class GroupsControllerTest {
PaginatedData<GroupNode> paginatedData = new PaginatedData<>(nodes, 1, 10); PaginatedData<GroupNode> paginatedData = new PaginatedData<>(nodes, 1, 10);
when(groupsTreeBuilder.listSubGroups(any(), any(), any())).thenReturn(paginatedData); when(groupsTreeBuilder.listSubGroups(any(), any(), any())).thenReturn(paginatedData);
when(session.getUserId()).thenReturn("admin_id");
mockMvc.perform(post("/group") mockMvc.perform(post("/group")
.content(mapper.writeValueAsString(request)) .content(mapper.writeValueAsString(request))
.contentType(MediaType.APPLICATION_JSON)) .contentType(MediaType.APPLICATION_JSON))
......
package it.inaf.ia2.gms.controller; package it.inaf.ia2.gms.controller;
import it.inaf.ia2.gms.authn.SessionData; import it.inaf.ia2.gms.GmsTestUtils;
import it.inaf.ia2.gms.manager.GroupsManager; import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.InvitedRegistrationManager; import it.inaf.ia2.gms.manager.InvitedRegistrationManager;
import it.inaf.ia2.gms.manager.PermissionsManager; import it.inaf.ia2.gms.manager.PermissionsManager;
...@@ -13,6 +13,7 @@ import it.inaf.ia2.gms.persistence.model.GroupEntity; ...@@ -13,6 +13,7 @@ import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.GroupsTreeBuilder; import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import java.util.ArrayList; import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import org.junit.Test; import org.junit.Test;
...@@ -28,7 +29,7 @@ import org.mockito.junit.MockitoJUnitRunner; ...@@ -28,7 +29,7 @@ import org.mockito.junit.MockitoJUnitRunner;
public class GroupsTabResponseBuilderTest { public class GroupsTabResponseBuilderTest {
@Mock @Mock
private SessionData session; private HttpServletRequest servletRequest;
@Mock @Mock
private GroupsManager groupsManager; private GroupsManager groupsManager;
...@@ -51,7 +52,7 @@ public class GroupsTabResponseBuilderTest { ...@@ -51,7 +52,7 @@ public class GroupsTabResponseBuilderTest {
@Test @Test
public void testGetGroupsTab() { public void testGetGroupsTab() {
when(session.getUserId()).thenReturn("admin_id"); GmsTestUtils.mockPrincipal(servletRequest);
GroupEntity root = new GroupEntity(); GroupEntity root = new GroupEntity();
root.setId("ROOT"); root.setId("ROOT");
......
...@@ -4,15 +4,16 @@ import it.inaf.ia2.gms.manager.GroupsManager; ...@@ -4,15 +4,16 @@ import it.inaf.ia2.gms.manager.GroupsManager;
import it.inaf.ia2.gms.manager.MembershipManager; import it.inaf.ia2.gms.manager.MembershipManager;
import it.inaf.ia2.gms.manager.PermissionsManager; import it.inaf.ia2.gms.manager.PermissionsManager;
import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.RapUserPermission;
import it.inaf.ia2.gms.model.UserPermission;
import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.MembershipEntity; import it.inaf.ia2.gms.persistence.model.MembershipEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.service.GroupNameService;
import it.inaf.ia2.gms.service.GroupsService; import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.service.JoinService; import it.inaf.ia2.gms.service.JoinService;
import it.inaf.ia2.rap.data.RapUser;
import java.security.Principal; import java.security.Principal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
...@@ -81,6 +82,7 @@ public class JWTWebServiceControllerTest { ...@@ -81,6 +82,7 @@ public class JWTWebServiceControllerTest {
@Before @Before
public void init() { public void init() {
controller.groupNameService = new GroupNameService(groupsDAO);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
root = getRoot(); root = getRoot();
lbt = getLbtGroup(); lbt = getLbtGroup();
...@@ -193,8 +195,8 @@ public class JWTWebServiceControllerTest { ...@@ -193,8 +195,8 @@ public class JWTWebServiceControllerTest {
when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(lbt)); when(groupsDAO.findGroupByParentAndName("", "LBT")).thenReturn(Optional.of(lbt));
when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inaf)); when(groupsDAO.findGroupByParentAndName("lbt_id", "INAF")).thenReturn(Optional.of(inaf));
List<UserPermission> permissions = new ArrayList<>(); List<RapUserPermission> permissions = new ArrayList<>();
UserPermission up = new UserPermission(); RapUserPermission up = new RapUserPermission();
up.setUser(getRapUser()); up.setUser(getRapUser());
up.setPermission(Permission.ADMIN); up.setPermission(Permission.ADMIN);
permissions.add(up); permissions.add(up);
......
package it.inaf.ia2.gms.controller; package it.inaf.ia2.gms.controller;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import it.inaf.ia2.gms.authn.SessionData; import it.inaf.ia2.gms.GmsTestUtils;
import it.inaf.ia2.gms.model.response.PaginatedData; import it.inaf.ia2.gms.model.response.PaginatedData;
import it.inaf.ia2.gms.model.response.SearchResponseItem; import it.inaf.ia2.gms.model.response.SearchResponseItem;
import it.inaf.ia2.gms.model.response.UserSearchResponse; import it.inaf.ia2.gms.model.response.UserSearchResponse;
import it.inaf.ia2.gms.service.SearchService; import it.inaf.ia2.gms.service.SearchService;
import java.util.ArrayList; import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
...@@ -29,7 +30,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; ...@@ -29,7 +30,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
public class SearchControllerTest { public class SearchControllerTest {
@Mock @Mock
private SessionData session; private HttpServletRequest servletRequest;
@Mock @Mock
private SearchService searchService; private SearchService searchService;
...@@ -44,8 +45,7 @@ public class SearchControllerTest { ...@@ -44,8 +45,7 @@ public class SearchControllerTest {
@Before @Before
public void init() { public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(controller).build(); mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
GmsTestUtils.mockPrincipal(servletRequest);
when(session.getUserId()).thenReturn("admin_id");
} }
@Test @Test
...@@ -56,7 +56,7 @@ public class SearchControllerTest { ...@@ -56,7 +56,7 @@ public class SearchControllerTest {
when(searchService.search(any(), any(), anyInt(), anyInt())).thenReturn(response); when(searchService.search(any(), any(), anyInt(), anyInt())).thenReturn(response);
mockMvc.perform(get("/search?query=searchText&page=1&pageSize=10") mockMvc.perform(get("/search?query=searchText&page=1&pageSize=10")
.contentType(MediaType.APPLICATION_JSON_UTF8)) .contentType(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk()); .andExpect(status().isOk());
verify(searchService, times(1)).search(eq("searchText"), eq("admin_id"), eq(1), eq(10)); verify(searchService, times(1)).search(eq("searchText"), eq("admin_id"), eq(1), eq(10));
...@@ -68,7 +68,7 @@ public class SearchControllerTest { ...@@ -68,7 +68,7 @@ public class SearchControllerTest {
when(searchService.getUserSearchResult(any(), any())).thenReturn(new UserSearchResponse()); when(searchService.getUserSearchResult(any(), any())).thenReturn(new UserSearchResponse());
mockMvc.perform(get("/search/user/user_id") mockMvc.perform(get("/search/user/user_id")
.contentType(MediaType.APPLICATION_JSON_UTF8)) .contentType(MediaType.APPLICATION_JSON_VALUE))
.andExpect(status().isOk()); .andExpect(status().isOk());
verify(searchService, times(1)).getUserSearchResult(eq("admin_id"), eq("user_id")); verify(searchService, times(1)).getUserSearchResult(eq("admin_id"), eq("user_id"));
......
package it.inaf.ia2.gms.manager; package it.inaf.ia2.gms.manager;
import it.inaf.ia2.gms.authn.SessionData; import it.inaf.ia2.gms.GmsTestUtils;
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.Permission;
import it.inaf.ia2.gms.model.RapUser;
import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.InvitedRegistrationDAO; import it.inaf.ia2.gms.persistence.InvitedRegistrationDAO;
import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.MembershipsDAO; import it.inaf.ia2.gms.persistence.MembershipsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.InvitedRegistration; 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.gms.service.PermissionsService;
import it.inaf.ia2.gms.authn.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.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
...@@ -51,7 +52,7 @@ public class InvitedRegistrationManagerTest { ...@@ -51,7 +52,7 @@ public class InvitedRegistrationManagerTest {
@Mock @Mock
private RapClient rapClient; private RapClient rapClient;
@Mock @Mock
private SessionData sessionData; private HttpServletRequest servletRequest;
@Mock @Mock
private LoggingDAO loggingDAO; private LoggingDAO loggingDAO;
@Mock @Mock
...@@ -95,14 +96,14 @@ public class InvitedRegistrationManagerTest { ...@@ -95,14 +96,14 @@ public class InvitedRegistrationManagerTest {
when(httpSession.getAttribute(eq("invited-registration"))).thenReturn(regFromToken); when(httpSession.getAttribute(eq("invited-registration"))).thenReturn(regFromToken);
when(sessionData.getUserId()).thenReturn(USER_ID); GmsTestUtils.mockPrincipal(servletRequest, USER_ID);
RapUser user = new RapUser(); RapUser user = new RapUser();
user.setId(USER_ID); user.setId(USER_ID);
Identity identity = new Identity(); Identity identity = new Identity();
identity.setType(IdentityType.EDU_GAIN); identity.setType(IdentityType.EDU_GAIN);
identity.setEmail(EMAIL); identity.setEmail(EMAIL);
user.setIdentities(Collections.singletonList(identity)); user.getIdentities().addAll(Collections.singletonList(identity));
when(rapClient.getUser(eq(USER_ID))).thenReturn(user); when(rapClient.getUser(eq(USER_ID))).thenReturn(user);
...@@ -145,7 +146,7 @@ public class InvitedRegistrationManagerTest { ...@@ -145,7 +146,7 @@ public class InvitedRegistrationManagerTest {
when(httpSession.getAttribute(eq("invited-registration"))).thenReturn(regFromToken); when(httpSession.getAttribute(eq("invited-registration"))).thenReturn(regFromToken);
when(sessionData.getUserId()).thenReturn(USER_ID); GmsTestUtils.mockPrincipal(servletRequest, USER_ID);
RapUser user = new RapUser(); RapUser user = new RapUser();
user.setId(USER_ID); user.setId(USER_ID);
......
...@@ -2,17 +2,18 @@ package it.inaf.ia2.gms.manager; ...@@ -2,17 +2,18 @@ package it.inaf.ia2.gms.manager;
import it.inaf.ia2.gms.DataSourceConfig; import it.inaf.ia2.gms.DataSourceConfig;
import it.inaf.ia2.gms.model.Permission; import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.RapUser; import it.inaf.ia2.gms.model.RapUserPermission;
import it.inaf.ia2.gms.model.UserPermission;
import it.inaf.ia2.gms.persistence.GroupsDAO; import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.LoggingDAO; import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity; 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.gms.service.PermissionsService;
import it.inaf.ia2.gms.authn.RapClient;
import it.inaf.ia2.rap.data.RapUser;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.sql.DataSource; import javax.sql.DataSource;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
...@@ -52,7 +53,7 @@ public class PermissionsManagerIntegrationTest { ...@@ -52,7 +53,7 @@ public class PermissionsManagerIntegrationTest {
// Mock RAP client // Mock RAP client
RapUser rapUser = new RapUser(); RapUser rapUser = new RapUser();
rapUser.setId(USER_ID); 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); PermissionsService permissionsService = new PermissionsService(permissionsDAO, loggingDAO);
PermissionsManager permissionsManager = new PermissionsManager(permissionsService, rapClient, loggingDAO); PermissionsManager permissionsManager = new PermissionsManager(permissionsService, rapClient, loggingDAO);
...@@ -61,7 +62,7 @@ public class PermissionsManagerIntegrationTest { ...@@ -61,7 +62,7 @@ public class PermissionsManagerIntegrationTest {
// Create root // Create root
GroupEntity root = new GroupEntity(); GroupEntity root = new GroupEntity();
root.setId("ROOT"); root.setId("ROOT");
root.setName("Root"); root.setName("ROOT");
root.setPath(""); root.setPath("");
root = groupsDAO.createGroup(root); root = groupsDAO.createGroup(root);
...@@ -72,7 +73,7 @@ public class PermissionsManagerIntegrationTest { ...@@ -72,7 +73,7 @@ public class PermissionsManagerIntegrationTest {
superAdminPermission.setGroupPath(root.getPath()); superAdminPermission.setGroupPath(root.getPath());
permissionsDAO.createOrUpdatePermission(superAdminPermission); permissionsDAO.createOrUpdatePermission(superAdminPermission);
List<UserPermission> permissions = permissionsManager.getAllPermissions(root); List<RapUserPermission> permissions = permissionsManager.getAllPermissions(root);
assertEquals(1, permissions.size()); assertEquals(1, permissions.size());
assertEquals(Permission.ADMIN, permissions.get(0).getPermission()); assertEquals(Permission.ADMIN, permissions.get(0).getPermission());
......
...@@ -13,7 +13,7 @@ public class UserAwareComponentTestUtil { ...@@ -13,7 +13,7 @@ public class UserAwareComponentTestUtil {
public static void setUser(UserAwareComponent component, String userId) { public static void setUser(UserAwareComponent component, String userId) {
Map<String, Object> jwtClaims = new HashMap<>(); Map<String, Object> jwtClaims = new HashMap<>();
jwtClaims.put("sub", userId); jwtClaims.put("sub", userId);
RapPrincipal principal = new RapPrincipal(jwtClaims); RapPrincipal principal = new RapPrincipal("token", jwtClaims);
HttpServletRequest request = mock(HttpServletRequest.class); HttpServletRequest request = mock(HttpServletRequest.class);
when(request.getUserPrincipal()).thenReturn(principal); when(request.getUserPrincipal()).thenReturn(principal);
ReflectionTestUtils.setField(component, "request", request); ReflectionTestUtils.setField(component, "request", request);
......
...@@ -5,9 +5,11 @@ import it.inaf.ia2.gms.HooksConfig; ...@@ -5,9 +5,11 @@ import it.inaf.ia2.gms.HooksConfig;
import it.inaf.ia2.gms.model.GroupBreadcrumb; import it.inaf.ia2.gms.model.GroupBreadcrumb;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.service.hook.GroupsHook; import it.inaf.ia2.gms.service.hook.GroupsHook;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.UUID; import java.util.UUID;
import javax.sql.DataSource; import javax.sql.DataSource;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
...@@ -114,6 +116,15 @@ public class GroupsDAOTest { ...@@ -114,6 +116,15 @@ public class GroupsDAOTest {
assertTrue(optGroup.isPresent()); assertTrue(optGroup.isPresent());
assertEquals(lbtInaf.getId(), optGroup.get().getId()); assertEquals(lbtInaf.getId(), optGroup.get().getId());
// Complete names
Set<String> groupIds = new HashSet<>();
groupIds.add(groups.get(0).getId());
groupIds.add(lbt.getId());
Map<String, String> completeGroupNames = dao.getGroupCompleteNamesFromId(groupIds);
assertEquals(2, completeGroupNames.size());
assertEquals("LBT", completeGroupNames.get(lbt.getId()));
assertEquals("LBT.INAF", completeGroupNames.get(groups.get(0).getId()));
// Children map // Children map
Map<String, Boolean> childrenMap = dao.getHasChildrenMap(Sets.newSet(root.getId())); Map<String, Boolean> childrenMap = dao.getHasChildrenMap(Sets.newSet(root.getId()));
assertEquals(1, childrenMap.size()); assertEquals(1, childrenMap.size());
...@@ -151,4 +162,9 @@ public class GroupsDAOTest { ...@@ -151,4 +162,9 @@ public class GroupsDAOTest {
private String getNewGroupId() { private String getNewGroupId() {
return UUID.randomUUID().toString().replaceAll("-", ""); return UUID.randomUUID().toString().replaceAll("-", "");
} }
@Test
public void testGroupCompleteNamesEmptyInput() {
assertTrue(dao.getGroupCompleteNamesFromId(new HashSet<>()).isEmpty());
}
} }
...@@ -10,9 +10,9 @@ import it.inaf.ia2.gms.model.Permission; ...@@ -10,9 +10,9 @@ import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.request.GroupsRequest; import it.inaf.ia2.gms.model.request.GroupsRequest;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity; 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.GroupsTreeBuilder;
import it.inaf.ia2.gms.service.PermissionsService; import it.inaf.ia2.gms.service.PermissionsService;
import it.inaf.ia2.gms.authn.RapClient;
import java.util.List; import java.util.List;
import javax.sql.DataSource; import javax.sql.DataSource;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
......
package it.inaf.ia2.gms.rap; package it.inaf.ia2.gms.rap;
import it.inaf.ia2.gms.authn.SessionData; import it.inaf.ia2.gms.authn.SessionData;
import it.inaf.ia2.gms.model.RapUser;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -34,120 +33,120 @@ import org.springframework.web.client.HttpServerErrorException; ...@@ -34,120 +33,120 @@ import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.HttpServerErrorException.InternalServerError; import org.springframework.web.client.HttpServerErrorException.InternalServerError;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
@RunWith(MockitoJUnitRunner.class) //@RunWith(MockitoJUnitRunner.class)
public class RapClientTest { public class RapClientTest {
@Mock // @Mock
private HttpServletRequest request; // private HttpServletRequest request;
//
@Mock // @Mock
private SessionData sessionData; // private SessionData sessionData;
//
@Mock // @Mock
private RestTemplate restTemplate; // private RestTemplate restTemplate;
//
@Mock // @Mock
private RestTemplate refreshTokenRestTemplate; // private RestTemplate refreshTokenRestTemplate;
//
private RapClient rapClient; // private RapClient rapClient;
//
@Before // @Before
public void init() { // public void init() {
rapClient = new RapClient(restTemplate); // rapClient = new RapClient(restTemplate);
ReflectionTestUtils.setField(rapClient, "request", request); // ReflectionTestUtils.setField(rapClient, "request", request);
ReflectionTestUtils.setField(rapClient, "refreshTokenRestTemplate", refreshTokenRestTemplate); // ReflectionTestUtils.setField(rapClient, "refreshTokenRestTemplate", refreshTokenRestTemplate);
ReflectionTestUtils.setField(rapClient, "scope", "openid"); // ReflectionTestUtils.setField(rapClient, "scope", "openid");
} // }
//
@Test // @Test
public void testUnauthorizedNoRefreshJsonMsg() { // public void testUnauthorizedNoRefreshJsonMsg() {
//
String jsonError = "{\"error\":\"Unauthorized: foo\"}"; // String jsonError = "{\"error\":\"Unauthorized: foo\"}";
//
HttpClientErrorException exception = Unauthorized // HttpClientErrorException exception = Unauthorized
.create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); // .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>() { // when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() {
}))).thenThrow(exception); // }))).thenThrow(exception);
//
try { // try {
rapClient.getUser("123"); // rapClient.getUser("123");
} catch (HttpClientErrorException ex) { // } catch (HttpClientErrorException ex) {
assertEquals("401 Unauthorized: foo", ex.getMessage()); // assertEquals("401 Unauthorized: foo", ex.getMessage());
} // }
} // }
//
@Test // @Test
public void testUnauthorizedNoRefreshNotJsonMsg() { // public void testUnauthorizedNoRefreshNotJsonMsg() {
//
String errorMessage = "THIS IS NOT A JSON"; // String errorMessage = "THIS IS NOT A JSON";
//
HttpClientErrorException exception = Unauthorized // HttpClientErrorException exception = Unauthorized
.create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, errorMessage.getBytes(), StandardCharsets.UTF_8); // .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>() { // when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() {
}))).thenThrow(exception); // }))).thenThrow(exception);
//
try { // try {
rapClient.getUser("123"); // rapClient.getUser("123");
} catch (HttpClientErrorException ex) { // } catch (HttpClientErrorException ex) {
assertNotNull(ex.getMessage()); // assertNotNull(ex.getMessage());
} // }
} // }
//
@Test // @Test
public void testServerErrorJsonMsg() { // public void testServerErrorJsonMsg() {
//
String jsonError = "{\"error\":\"Fatal error\"}"; // String jsonError = "{\"error\":\"Fatal error\"}";
//
HttpServerErrorException exception = InternalServerError // HttpServerErrorException exception = InternalServerError
.create(HttpStatus.INTERNAL_SERVER_ERROR, "500", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); // .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>() { // when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() {
}))).thenThrow(exception); // }))).thenThrow(exception);
//
try { // try {
rapClient.getUser("123"); // rapClient.getUser("123");
} catch (HttpServerErrorException ex) { // } catch (HttpServerErrorException ex) {
assertEquals("500 Fatal error", ex.getMessage()); // assertEquals("500 Fatal error", ex.getMessage());
} // }
} // }
//
@Test // @Test
public void testRefreshToken() { // public void testRefreshToken() {
//
when(request.getSession(eq(false))).thenReturn(mock(HttpSession.class)); // when(request.getSession(eq(false))).thenReturn(mock(HttpSession.class));
when(sessionData.getExpiresIn()).thenReturn(-100l); // when(sessionData.getExpiresIn()).thenReturn(-100l);
//
ReflectionTestUtils.setField(rapClient, "sessionData", sessionData); // ReflectionTestUtils.setField(rapClient, "sessionData", sessionData);
ReflectionTestUtils.setField(rapClient, "clientId", "clientId"); // ReflectionTestUtils.setField(rapClient, "clientId", "clientId");
ReflectionTestUtils.setField(rapClient, "clientSecret", "clientSecret"); // ReflectionTestUtils.setField(rapClient, "clientSecret", "clientSecret");
ReflectionTestUtils.setField(rapClient, "accessTokenUri", "https://sso.ia2.inaf.it"); // ReflectionTestUtils.setField(rapClient, "accessTokenUri", "https://sso.ia2.inaf.it");
//
String jsonError = "{\"error\":\"Unauthorized: token expired\"}"; // String jsonError = "{\"error\":\"Unauthorized: token expired\"}";
//
HttpClientErrorException exception = Unauthorized // HttpClientErrorException exception = Unauthorized
.create(HttpStatus.UNAUTHORIZED, "401", HttpHeaders.EMPTY, jsonError.getBytes(), StandardCharsets.UTF_8); // .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>() { // when(restTemplate.exchange(anyString(), eq(HttpMethod.GET), any(HttpEntity.class), eq(new ParameterizedTypeReference<RapUser>() {
}))).thenThrow(exception) // }))).thenThrow(exception)
.thenReturn(ResponseEntity.ok(new RapUser())); // .thenReturn(ResponseEntity.ok(new RapUser()));
//
ResponseEntity refreshTokenResponse = mock(ResponseEntity.class); // ResponseEntity refreshTokenResponse = mock(ResponseEntity.class);
Map<String, Object> mockedBody = new HashMap<>(); // Map<String, Object> mockedBody = new HashMap<>();
mockedBody.put("access_token", "<access_token>"); // mockedBody.put("access_token", "<access_token>");
mockedBody.put("refresh_token", "<refresh_token>"); // mockedBody.put("refresh_token", "<refresh_token>");
mockedBody.put("expires_in", 3600); // mockedBody.put("expires_in", 3600);
when(refreshTokenResponse.getBody()).thenReturn(mockedBody); // when(refreshTokenResponse.getBody()).thenReturn(mockedBody);
//
when(refreshTokenRestTemplate.postForEntity(anyString(), any(HttpEntity.class), any())) // when(refreshTokenRestTemplate.postForEntity(anyString(), any(HttpEntity.class), any()))
.thenReturn(refreshTokenResponse); // .thenReturn(refreshTokenResponse);
//
RapUser user = rapClient.getUser("123"); // RapUser user = rapClient.getUser("123");
assertNotNull(user); // assertNotNull(user);
//
// verifies that token is refreshed // // verifies that token is refreshed
verify(sessionData, times(1)).setAccessToken(eq("<access_token>")); // verify(sessionData, times(1)).setAccessToken(eq("<access_token>"));
verify(sessionData, times(1)).setExpiresIn(eq(3600l)); // verify(sessionData, times(1)).setExpiresIn(eq(3600l));
} // }
} }
...@@ -4,12 +4,17 @@ import it.inaf.ia2.gms.persistence.GroupsDAO; ...@@ -4,12 +4,17 @@ import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import java.util.AbstractMap; import java.util.AbstractMap;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.Set;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
...@@ -27,56 +32,48 @@ public class GroupNameServiceTest { ...@@ -27,56 +32,48 @@ public class GroupNameServiceTest {
@Test @Test
public void getNamesTest() { public void getNamesTest() {
mockGroupsDAO(); GroupEntity group = new GroupEntity();
group.setName("Child\\.withDot");
group.setId("def");
group.setPath("abc.def");
List<Map.Entry<String, String>> groupsIdPath = new ArrayList<>(); Set<GroupEntity> groups = new HashSet<>();
groupsIdPath.add(new AbstractMap.SimpleEntry<>("def", "abc.def")); groups.add(group);
Map<String, List<String>> names = groupNameService.getNames(groupsIdPath);
assertEquals(1, names.size());
assertEquals(2, names.get("def").size());
assertEquals("Group 1", names.get("def").get(0));
assertEquals("Group 2", names.get("def").get(1));
}
public void mockGroupsDAO() { Map<String, String> daoResponse = new HashMap<>();
daoResponse.put("def", "Parent_group.Child\\.withDot");
List<GroupEntity> groups = new ArrayList<>(); when(groupsDAO.getGroupCompleteNamesFromId(any())).thenReturn(daoResponse);
GroupEntity group1 = new GroupEntity(); Map<String, List<String>> names = groupNameService.getNames(groups);
group1.setId("abc"); assertEquals(1, names.size());
group1.setName("Group 1"); assertEquals(2, names.get("def").size());
group1.setPath("abc"); assertEquals("Parent_group", names.get("def").get(0));
groups.add(group1); assertEquals("Child\\.withDot", names.get("def").get(1));
GroupEntity group2 = new GroupEntity();
group2.setId("def");
group2.setName("Group 2");
group2.setPath("abc.def");
groups.add(group2);
when(groupsDAO.findGroupsByIds(any())).thenReturn(groups);
} }
@Test @Test
public void getRootTest() { public void getRootTest() {
List<GroupEntity> groups = new ArrayList<>(); Set<String> groupIds = new HashSet<>();
groupIds.add("ROOT");
when(groupsDAO.getGroupCompleteNamesFromId(any())).thenReturn(new HashMap<>());
GroupEntity root = new GroupEntity(); GroupEntity root = new GroupEntity();
root.setId("ROOT"); root.setId("ROOT");
root.setName("Root"); root.setName("ROOT");
root.setPath(""); root.setPath("");
groups.add(root);
when(groupsDAO.findGroupsByIds(any())).thenReturn(groups); when(groupsDAO.findGroupById(eq("ROOT")))
.thenReturn(Optional.of(root));
List<Map.Entry<String, String>> groupsIdPath = new ArrayList<>(); List<Map.Entry<String, String>> groupsIdPath = new ArrayList<>();
groupsIdPath.add(new AbstractMap.SimpleEntry<>("ROOT", "")); groupsIdPath.add(new AbstractMap.SimpleEntry<>("ROOT", ""));
Map<String, List<String>> names = groupNameService.getNames(groupsIdPath); Map<String, List<String>> names = groupNameService.getNamesFromIds(groupIds);
assertEquals(1, names.size()); assertEquals(1, names.size());
assertEquals(1, names.get("ROOT").size()); assertEquals(1, names.get("ROOT").size());
assertEquals("Root", names.get("ROOT").get(0)); assertEquals("ROOT", names.get("ROOT").get(0));
} }
} }
package it.inaf.ia2.gms.service; package it.inaf.ia2.gms.service;
import it.inaf.ia2.gms.manager.GroupsManager; 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.Permission;
import it.inaf.ia2.gms.model.RapUser;
import it.inaf.ia2.gms.model.response.PaginatedData; import it.inaf.ia2.gms.model.response.PaginatedData;
import it.inaf.ia2.gms.model.response.SearchResponseItem; import it.inaf.ia2.gms.model.response.SearchResponseItem;
import it.inaf.ia2.gms.model.response.SearchResponseType; import it.inaf.ia2.gms.model.response.SearchResponseType;
...@@ -14,13 +11,16 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO; ...@@ -14,13 +11,16 @@ import it.inaf.ia2.gms.persistence.MembershipsDAO;
import it.inaf.ia2.gms.persistence.PermissionsDAO; import it.inaf.ia2.gms.persistence.PermissionsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity; import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity; import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.rap.RapClient; import it.inaf.ia2.gms.authn.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.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Set;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
...@@ -64,18 +64,18 @@ public class SearchServiceTest { ...@@ -64,18 +64,18 @@ public class SearchServiceTest {
when(groupNameService.getNames(any())).then(invocation -> { when(groupNameService.getNames(any())).then(invocation -> {
Map<String, List<String>> result = new HashMap<>(); Map<String, List<String>> result = new HashMap<>();
List<Map.Entry<String, String>> arg = invocation.getArgument(0); Set<GroupEntity> arg = invocation.getArgument(0);
for (Entry<String, String> entry : arg) { for (GroupEntity group : arg) {
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
switch (entry.getKey()) { switch (group.getId()) {
case "ROOT": case "ROOT":
names.add("Root"); names.add("ROOT");
break; break;
case "group1_id": case "group1_id":
names.add("Group 1"); names.add("Group 1");
break; break;
} }
result.put(entry.getKey(), names); result.put(group.getId(), names);
} }
return result; return result;
}); });
...@@ -93,7 +93,7 @@ public class SearchServiceTest { ...@@ -93,7 +93,7 @@ public class SearchServiceTest {
identity.setTypedId("user@inaf.it"); identity.setTypedId("user@inaf.it");
user.setIdentities(Collections.singletonList(identity)); 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(); GroupEntity group1 = new GroupEntity();
group1.setId("group1_id"); group1.setId("group1_id");
...@@ -136,6 +136,11 @@ public class SearchServiceTest { ...@@ -136,6 +136,11 @@ public class SearchServiceTest {
@Test @Test
public void testGetUserSearchResult() { public void testGetUserSearchResult() {
Map<String, List<String>> nameResult = new HashMap<>();
nameResult.put("group1_id", Collections.singletonList("Group 1"));
when(groupNameService.getNamesFromIds(any())).thenReturn(nameResult);
GroupEntity group1 = new GroupEntity(); GroupEntity group1 = new GroupEntity();
group1.setId("group1_id"); group1.setId("group1_id");
group1.setName("Group 1"); group1.setName("Group 1");
...@@ -164,7 +169,7 @@ public class SearchServiceTest { ...@@ -164,7 +169,7 @@ public class SearchServiceTest {
GroupEntity root = new GroupEntity(); GroupEntity root = new GroupEntity();
root.setId("ROOT"); root.setId("ROOT");
root.setName("Root"); root.setName("ROOT");
root.setPath(""); root.setPath("");
when(groupsManager.getRoot()).thenReturn(root); when(groupsManager.getRoot()).thenReturn(root);
......