diff --git a/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java b/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java index 9b45d30a3b73b3008b28693537f3d1b1eda5d2f9..4fd68b5fab327aed3e21955187bd6d26f6eed3d3 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java +++ b/gms/src/main/java/it/inaf/ia2/gms/authn/OAuth2Config.java @@ -3,7 +3,6 @@ package it.inaf.ia2.gms.authn; import java.util.List; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso; import org.springframework.boot.autoconfigure.security.oauth2.resource.DefaultUserInfoRestTemplateFactory; import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateCustomizer; import org.springframework.boot.autoconfigure.security.oauth2.resource.UserInfoRestTemplateFactory; @@ -22,7 +21,6 @@ import org.springframework.security.oauth2.provider.token.RemoteTokenServices; * Boot ResourceServerTokenServicesConfiguration. */ @Configuration -@EnableOAuth2Sso public class OAuth2Config extends AuthorizationServerEndpointsConfiguration { @Value("${security.oauth2.resource.jwk.key-set-uri}") 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 130505eda977da570488e320b1d32dcf8530abaf..ea8e3175bfd73846ba8b275c654894879ed80424 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,16 +1,17 @@ package it.inaf.ia2.gms.authn; +import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso; import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; @Configuration -@Order(1000) +@EnableOAuth2Sso public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override - protected void configure(HttpSecurity http) throws Exception { + public void configure(HttpSecurity http) throws Exception { + super.configure(http); http.csrf().disable(); } } diff --git a/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java b/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java index 7586fd84e5d04aabc3cd9bd2950f9c6f0c476e4b..c1fb66276be3c6347c745c46acf31eecef1cccfd 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java +++ b/gms/src/main/java/it/inaf/ia2/gms/controller/GroupsController.java @@ -25,6 +25,7 @@ public class GroupsController { @Autowired private SessionData session; + @Autowired private UsersService usersService; @Autowired diff --git a/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java b/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java index 5ea07f7451ed5aab368ee84ad5e162add7778e20..0e61eb13b1760dc562a6b9ae18913dc1ef0ce5f3 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java +++ b/gms/src/main/java/it/inaf/ia2/gms/model/PaginatedData.java @@ -30,7 +30,7 @@ public class PaginatedData<T> { } else { int firstElementIndex = (currentPage - 1) * pageSize; int lastElementIndex = Math.min(currentPage * pageSize - 1, totalItems - 1); - items = new ArrayList<>(allItems.subList(firstElementIndex, lastElementIndex)); + items = new ArrayList<>(allItems.subList(firstElementIndex, lastElementIndex + 1)); } links = new ArrayList<>(); diff --git a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java index 9a258178876c3da9a0c464dc970aab5e3d90f1ff..4be39d1f5dd4e8ebbd28aee5361cfc6b968684b3 100644 --- a/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java +++ b/gms/src/main/java/it/inaf/ia2/gms/service/GroupsService.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.UUID; +import org.springframework.transaction.annotation.Transactional; @Service public class GroupsService { @@ -47,6 +48,7 @@ public class GroupsService { } } + @Transactional public Group addGroup(String parentId, String groupName, User user) { Group parent = getGroupById(parentId); @@ -70,6 +72,7 @@ public class GroupsService { return group; } + @Transactional public List<GroupNode> getSubgroups(Group parent, User user) { List<UserGroupPermission> permissions = getAllPermissions(user); @@ -97,7 +100,7 @@ public class GroupsService { GroupNode groupNode = nodesMap.get(group.getId()); if (groupNode == null) { - return null; + return new ArrayList<>(); } return groupNode.getPermissions(); } diff --git a/gms/src/main/resources/application.properties b/gms/src/main/resources/application.properties index 46854617fed06dfd5de53595b4435cfb3daee721..0893bb1b3af8130c37c64193bf4a8fa1316664e8 100644 --- a/gms/src/main/resources/application.properties +++ b/gms/src/main/resources/application.properties @@ -15,3 +15,4 @@ spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect spring.datasource.url=jdbc:mysql://localhost:3306/gms?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC spring.datasource.username=gms spring.datasource.password=gms +#spring.jpa.open-in-view=false diff --git a/gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java b/gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java new file mode 100644 index 0000000000000000000000000000000000000000..79f2d9b0d5e6288a38b5521ef84f8667eab43446 --- /dev/null +++ b/gms/src/test/java/it/inaf/ia2/gms/model/PaginatedDataTest.java @@ -0,0 +1,58 @@ +package it.inaf.ia2.gms.model; + +import java.util.ArrayList; +import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +public class PaginatedDataTest { + + @Test + public void testPagination() { + + List<Integer> allItems = new ArrayList<>(); + for (int i = 1; i <= 30; i++) { + allItems.add(i); + } + + PaginatedData<Integer> paginatedData = new PaginatedData<>(allItems, 2, 10); + + assertEquals(10, paginatedData.getItems().size()); + assertEquals(11, (int) paginatedData.getItems().get(0)); + assertEquals(20, (int) paginatedData.getItems().get(9)); + assertEquals(30, paginatedData.getTotalItems()); + assertEquals(3, paginatedData.getTotalPages()); + assertFalse(paginatedData.isHasPreviousPages()); + assertFalse(paginatedData.isHasFollowingPages()); + assertEquals(10, paginatedData.getPageSize()); + assertEquals(3, paginatedData.getLinks().size()); + assertEquals(1, (int) paginatedData.getLinks().get(0)); + assertEquals(2, (int) paginatedData.getLinks().get(1)); + assertEquals(3, (int) paginatedData.getLinks().get(2)); + } + + @Test + public void testLotOfPages() { + + List<Integer> allItems = new ArrayList<>(); + for (int i = 1; i <= 200; i++) { + allItems.add(i); + } + + PaginatedData<Integer> paginatedData = new PaginatedData<>(allItems, 8, 10); + + assertEquals(10, paginatedData.getItems().size()); + assertEquals(71, (int) paginatedData.getItems().get(0)); + assertEquals(80, (int) paginatedData.getItems().get(9)); + assertEquals(200, paginatedData.getTotalItems()); + assertEquals(20, paginatedData.getTotalPages()); + assertTrue(paginatedData.isHasPreviousPages()); + assertTrue(paginatedData.isHasFollowingPages()); + assertEquals(10, paginatedData.getPageSize()); + assertEquals(5, paginatedData.getLinks().size()); + assertEquals(6, (int) paginatedData.getLinks().get(0)); + assertEquals(10, (int) paginatedData.getLinks().get(4)); + } +}