diff --git a/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java b/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java index 5904d266b..5fcc49172 100644 --- a/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java +++ b/history/taskana-simplehistory-spring-test/src/test/java/pro/taskana/TaskHistoryEventControllerIntTest.java @@ -83,7 +83,7 @@ public class TaskHistoryEventControllerIntTest { server + port + "/api/v1/task-history-event", HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertEquals(50, response.getBody().getContent().size()); } @@ -97,7 +97,7 @@ public class TaskHistoryEventControllerIntTest { server + port + parameters, HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertEquals(3, response.getBody().getContent().size()); assertTrue(response.getBody().getLink(Link.REL_SELF).getHref().endsWith(parameters)); @@ -113,7 +113,7 @@ public class TaskHistoryEventControllerIntTest { + "&sort-by=business-process-id&order=asc&page-size=6&page=1", HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertNotNull(response.getBody().getLinks()); @@ -128,7 +128,7 @@ public class TaskHistoryEventControllerIntTest { server + port + "/api/v1/task-history-event?invalid=BPI:01", HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); fail(); } catch (HttpClientErrorException e) { assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode()); @@ -145,7 +145,7 @@ public class TaskHistoryEventControllerIntTest { server + port + "/api/v1/task-history-event?created=" + currentTime, HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); fail(); } catch (HttpClientErrorException e) { assertEquals(HttpStatus.BAD_REQUEST, e.getStatusCode()); @@ -159,7 +159,7 @@ public class TaskHistoryEventControllerIntTest { server + port + "/api/v1/task-history-event?created=" + currentTime, HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); assertNotNull(response.getBody().getLink(Link.REL_SELF)); assertEquals(25, response.getBody().getContent().size()); } @@ -173,7 +173,7 @@ public class TaskHistoryEventControllerIntTest { server + port + parameters, HttpMethod.GET, request, - new ParameterizedTypeReference() {}); + ParameterizedTypeReference.forType(TaskHistoryEventListResource.class)); assertEquals(2, response.getBody().getContent().size()); assertEquals( diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java b/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java index 9518b516b..2b3f3e602 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/report/structure/Report.java @@ -11,7 +11,7 @@ import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.impl.report.row.SingleRow; /** - * A Report represents a an abstract table that consists of {@link Row}s and a list of + * A Report represents an abstract table that consists of {@link Row}s and a list of * <ColumnHeader>s. Since a report does not specify <Item> and <ColumnHeader> it * does not contain functional logic. Due to readability implicit definition of functional logic is * prevented and thus prevent initialization of an abstract Report. In order to create a specific diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java index 2f3d6b347..bec12e342 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/report/structure/ReportTest.java @@ -26,8 +26,7 @@ class ReportTest { @BeforeEach void before() { this.report = - new Report( - HEADERS, new String[] {"rowDesc"}) {}; + new MonitorQueryItemTimeIntervalColumnHeaderReport(HEADERS, new String[] {"rowDesc"}); item = new MonitorQueryItem(); item.setKey("key"); @@ -109,9 +108,9 @@ class ReportTest { @Test void testInsertItemWithNoColumnHeaders() { // given + List headerList = Collections.emptyList(); report = - new Report( - Collections.emptyList(), new String[] {"rowDesc"}) {}; + new MonitorQueryItemTimeIntervalColumnHeaderReport(headerList, new String[] {"rowDesc"}); // when report.addItem(item); @@ -141,9 +140,7 @@ class ReportTest { // given List headers = new ArrayList<>(HEADERS); headers.add(new TimeIntervalColumnHeader(0, 3)); - report = - new Report( - headers, new String[] {"rowDesc"}) {}; + report = new MonitorQueryItemTimeIntervalColumnHeaderReport(headers, new String[] {"rowDesc"}); item.setAgeInDays(2); @@ -187,4 +184,13 @@ class ReportTest { assertArrayEquals(new int[] {0, overrideValue, 0, 0}, sumRow.getCells()); assertEquals(overrideValue, sumRow.getTotalValue()); } + + private static class MonitorQueryItemTimeIntervalColumnHeaderReport + extends Report { + + public MonitorQueryItemTimeIntervalColumnHeaderReport( + List headerList, String[] rowDesc) { + super(headerList, rowDesc); + } + } } diff --git a/rest/taskana-rest-spring-example-common/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java b/rest/taskana-rest-spring-example-common/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java index 9a1623d43..5c16b1421 100644 --- a/rest/taskana-rest-spring-example-common/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java +++ b/rest/taskana-rest-spring-example-common/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java @@ -45,13 +45,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public WebMvcConfigurer corsConfigurer() { - return new WebMvcConfigurer() { - - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**").allowedOrigins("*"); - } - }; + return new CorsWebMvcConfigurer(); } @Bean @@ -119,4 +113,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .deleteCookies("JSESSIONID") .permitAll(); } + + private static class CorsWebMvcConfigurer implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedOrigins("*"); + } + } } diff --git a/rest/taskana-rest-spring-example-common/src/test/java/pro/taskana/rest/AccessIdValidationControllerIntTest.java b/rest/taskana-rest-spring-example-common/src/test/java/pro/taskana/rest/AccessIdValidationControllerIntTest.java index eb161b683..abffcac8a 100644 --- a/rest/taskana-rest-spring-example-common/src/test/java/pro/taskana/rest/AccessIdValidationControllerIntTest.java +++ b/rest/taskana-rest-spring-example-common/src/test/java/pro/taskana/rest/AccessIdValidationControllerIntTest.java @@ -51,11 +51,11 @@ class AccessIdValidationControllerIntTest { restHelper.toUrl(Mapping.URL_ACCESSID) + "?search-for=ali", HttpMethod.GET, request, - new ParameterizedTypeReference>() {}); + ParameterizedTypeReference.forType(AccessIdListResource.class)); List body = response.getBody(); assertNotNull(body); - assertTrue(3 == body.size()); + assertEquals(3, body.size()); List expectedIds = new ArrayList<>(Arrays.asList("Tralisch, Thea", "Bert, Ali", "Mente, Ali")); for (AccessIdResource accessId : body) { @@ -78,4 +78,9 @@ class AccessIdValidationControllerIntTest { assertTrue(e.getResponseBodyAsString().contains("Minimum searchFor length =")); } } + + static class AccessIdListResource extends ArrayList { + + private static final long serialVersionUID = 1L; + } } diff --git a/rest/taskana-rest-spring-example-wildfly/src/main/java/pro/taskana/wildfly/security/WildflyWebSecurityConfig.java b/rest/taskana-rest-spring-example-wildfly/src/main/java/pro/taskana/wildfly/security/WildflyWebSecurityConfig.java index 2b9a8ccc5..0656f5aeb 100644 --- a/rest/taskana-rest-spring-example-wildfly/src/main/java/pro/taskana/wildfly/security/WildflyWebSecurityConfig.java +++ b/rest/taskana-rest-spring-example-wildfly/src/main/java/pro/taskana/wildfly/security/WildflyWebSecurityConfig.java @@ -71,66 +71,7 @@ public class WildflyWebSecurityConfig extends WebSecurityConfig { @Bean public AuthenticationUserDetailsService authenticationUserDetailsService() { - return new AuthenticationUserDetailsService() { - - @Override - public UserDetails loadUserDetails(PreAuthenticatedAuthenticationToken token) - throws UsernameNotFoundException { - return new UserDetails() { - - private static final long serialVersionUID = 1L; - - @Override - public Collection getAuthorities() { - List authorities = new ArrayList<>(); - SecurityIdentity securityIdentity = getSecurityIdentity(); - if (securityIdentity != null) { - Roles roles = securityIdentity.getRoles(); - roles.forEach(role -> authorities.add(new SimpleGrantedAuthority(role))); - } - return authorities; - } - - @Override - public String getPassword() { - return (String) token.getCredentials(); - } - - @Override - public String getUsername() { - return token.getName(); - } - - @Override - public boolean isAccountNonExpired() { - return true; - } - - @Override - public boolean isAccountNonLocked() { - return true; - } - - @Override - public boolean isCredentialsNonExpired() { - return true; - } - - @Override - public boolean isEnabled() { - return true; - } - - private SecurityIdentity getSecurityIdentity() { - SecurityDomain current = SecurityDomain.getCurrent(); - if (current != null) { - return current.getCurrentSecurityIdentity(); - } - return null; - } - }; - } - }; + return new PreAuthenticatedAuthenticationTokenAuthenticationUserDetailsService(); } @Override @@ -190,4 +131,73 @@ public class WildflyWebSecurityConfig extends WebSecurityConfig { .deleteCookies("JSESSIONID") .permitAll(); } + + private static class PreAuthenticatedAuthenticationTokenAuthenticationUserDetailsService + implements AuthenticationUserDetailsService { + + @Override + public UserDetails loadUserDetails(PreAuthenticatedAuthenticationToken token) + throws UsernameNotFoundException { + return new MyUserDetails(token); + } + + private static class MyUserDetails implements UserDetails { + + private static final long serialVersionUID = 1L; + private final PreAuthenticatedAuthenticationToken token; + + public MyUserDetails(PreAuthenticatedAuthenticationToken token) { + this.token = token; + } + + @Override + public Collection getAuthorities() { + List authorities = new ArrayList<>(); + SecurityIdentity securityIdentity = getSecurityIdentity(); + if (securityIdentity != null) { + Roles roles = securityIdentity.getRoles(); + roles.forEach(role -> authorities.add(new SimpleGrantedAuthority(role))); + } + return authorities; + } + + @Override + public String getPassword() { + return (String) token.getCredentials(); + } + + @Override + public String getUsername() { + return token.getName(); + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } + + private SecurityIdentity getSecurityIdentity() { + SecurityDomain current = SecurityDomain.getCurrent(); + if (current != null) { + return current.getCurrentSecurityIdentity(); + } + return null; + } + } + } } diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketDefinitionControllerIntTest.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketDefinitionControllerIntTest.java index b3c3034b2..e2a4eb36e 100644 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketDefinitionControllerIntTest.java +++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/WorkbasketDefinitionControllerIntTest.java @@ -72,7 +72,7 @@ class WorkbasketDefinitionControllerIntTest { restHelper.toUrl(Mapping.URL_WORKBASKETDEFIITIONS) + "?domain=DOMAIN_A", HttpMethod.GET, restHelper.defaultRequest(), - new ParameterizedTypeReference>() {}); + ParameterizedTypeReference.forType(WorkbasketDefinitionListResource.class)); assertNotNull(response.getBody()); assertEquals(HttpStatus.OK, response.getStatusCode()); @@ -130,7 +130,7 @@ class WorkbasketDefinitionControllerIntTest { restHelper.toUrl(Mapping.URL_WORKBASKETDEFIITIONS) + "?domain=DOMAIN_A", HttpMethod.GET, restHelper.defaultRequest(), - new ParameterizedTypeReference>() {}); + ParameterizedTypeReference.forType(WorkbasketDefinitionListResource.class)); List list = new ArrayList<>(); ObjectMapper objMapper = new ObjectMapper(); @@ -151,7 +151,7 @@ class WorkbasketDefinitionControllerIntTest { restHelper.toUrl(Mapping.URL_WORKBASKETDEFIITIONS) + "?domain=DOMAIN_A", HttpMethod.GET, restHelper.defaultRequest(), - new ParameterizedTypeReference>() {}); + ParameterizedTypeReference.forType(WorkbasketDefinitionListResource.class)); List list = new ArrayList<>(); ObjectMapper objMapper = new ObjectMapper(); @@ -201,4 +201,9 @@ class WorkbasketDefinitionControllerIntTest { return template.postForEntity(serverUrl, requestEntity, Void.class); } + + static class WorkbasketDefinitionListResource extends ArrayList { + + private static final long serialVersionUID = 1L; + } } diff --git a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/security/WebSecurityConfig.java b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/security/WebSecurityConfig.java index 2a4a5f037..1c64ccb34 100644 --- a/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/security/WebSecurityConfig.java +++ b/rest/taskana-rest-spring/src/test/java/pro/taskana/rest/security/WebSecurityConfig.java @@ -41,13 +41,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public WebMvcConfigurer corsConfigurer() { - return new WebMvcConfigurer() { - - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**").allowedOrigins("*"); - } - }; + return new CorsWebMvcConfigurer(); } @Bean @@ -82,4 +76,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .anyRequest() .fullyAuthenticated(); } + + private static class CorsWebMvcConfigurer implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedOrigins("*"); + } + } }