diff --git a/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java b/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java index d8ff86da4ecf385df4be32a08c1849600056d916..6a3c79bc2ce622697eaf11da6ee6efcb4b933644 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/AntragsRaumApplication.java @@ -40,6 +40,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; @EnableScheduling @EnableAspectJAutoProxy(proxyTargetClass = true) public class AntragsRaumApplication { + public static void main(String[] args) { SpringApplication.run(AntragsRaumApplication.class, args); } @@ -54,4 +55,5 @@ public class AntragsRaumApplication { return customizer -> customizer.setTaskDecorator(DelegatingSecurityContextRunnable::new); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java index db6792078563c84453afc413d8bc05be8dafb53d..5d680cd7700bca22cee22b6f97bc98117f21777e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/OpenApiConfiguration.java @@ -22,15 +22,17 @@ package de.ozgcloud.antragsraum; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; + import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.enums.SecuritySchemeType; import io.swagger.v3.oas.annotations.info.Info; import io.swagger.v3.oas.annotations.security.SecurityScheme; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @OpenAPIDefinition(info = @Info(title = "Antragsraum", - description = "Backend for loading messages from the OZG-Cloud backend, sending replies and uploading files", version = "v1")) + description = "Backend for loading messages from the OZG-Cloud backend, sending replies and uploading files", version = "v1")) @SecurityScheme(name = "security_auth", type = SecuritySchemeType.HTTP, bearerFormat = "JWT", scheme = "bearer") @ConditionalOnProperty(name = "ozgcloud.mock.auth") public class OpenApiConfiguration { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/Root.java b/server/src/main/java/de/ozgcloud/antragsraum/Root.java index 0ccab0061e9408b70ef24aef63e4e2c716c74f85..181bc6aedbab9245aa91ae8df4cf319b9818b900 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/Root.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/Root.java @@ -20,12 +20,20 @@ package de.ozgcloud.antragsraum; +import java.time.Instant; + import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Builder; -import java.time.Instant; +import lombok.Builder; @Builder @JsonInclude(JsonInclude.Include.NON_NULL) -public record Root(String version, Instant buildTime, String javaVersion, String name, boolean isProduction) { +public record Root( + String version, + Instant buildTime, + String javaVersion, + String name, + boolean isProduction +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/RootController.java b/server/src/main/java/de/ozgcloud/antragsraum/RootController.java index 0b0ddff8e6512b46f8ce8142d886d925efafe3ff..92742853f72a2927f908d8b21d29c13d2b39317e 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/RootController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/RootController.java @@ -33,7 +33,9 @@ import lombok.RequiredArgsConstructor; @RestController(RootController.PATH) @RequiredArgsConstructor public class RootController { - static final String PATH = "/"; + + static final String PATH = "/"; // NOSONAR + private static final String JAVA_VERSION_PROPERTY_NAME = "java.version"; private final BuildProperties buildProperties; @Value("${ozgcloud.stage.production:#{true}}") @@ -45,10 +47,11 @@ public class RootController { .version(isNull(buildProperties) ? null : buildProperties.getVersion()) .buildTime(isNull(buildProperties) ? null : buildProperties.getTime()) .name(isNull(buildProperties) ? null : buildProperties.getName()) - .javaVersion(System.getProperty("java.version")) + .javaVersion(System.getProperty(JAVA_VERSION_PROPERTY_NAME)) .isProduction(production) .build(); return ResponseEntity.ok(root); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java index 77cf8627f99d762fed6a68edd572fd767a0efc83..3a504feba31e708d0fb22ee6227f5b066ad37b1a 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/SecurityConfiguration.java @@ -53,6 +53,7 @@ import lombok.RequiredArgsConstructor; @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfiguration { + private static final String OPTIONS = "OPTIONS"; private static final String GET = "GET"; private static final String POLICY_DIRECTIVES = "object-src 'none'; child-src 'self'; frame-ancestors 'none'; base-uri 'none'; upgrade-insecure-requests; require-trusted-types-for 'script'"; @@ -137,4 +138,5 @@ public class SecurityConfiguration { } }; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java index 46501cbc10a5e242d516eb5c23529d2feb0bac4f..facdf245e341ca04f73c39322c7a6afb5518aca2 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/SwaggerCorsConfiguration.java @@ -28,20 +28,21 @@ import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; - @Configuration public class SwaggerCorsConfiguration { - @Bean - public CorsConfigurationSource corsFilter() { - // Allow anyone and anything access. Probably ok for Swagger spec - var config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.addAllowedOrigin("*"); - config.addAllowedHeader("*"); - config.addAllowedMethod("*"); - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", config); - return source; - } + @Bean + public CorsConfigurationSource corsFilter() { + // Allow anyone and anything access. Probably ok for Swagger spec + var config = new CorsConfiguration(); + config.setAllowCredentials(true); + config.addAllowedOrigin("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + return source; + } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java b/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java index e34e7bf78e42aeb5d1976dd7513916cf52c72615..848c43d2d5cd9a7d3ee0849e613627da617dbc91 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/WebConfiguration.java @@ -34,6 +34,7 @@ import org.springframework.web.client.RestTemplate; @Configuration public class WebConfiguration { + public static final String INFO_MANAGER_REST_CLIENT = "infomanagerRestClient"; public static final String NACHRICHT_REST_CLIENT = "nachrichtRestClient"; public static final String X_OZG_CLIENT = "X-OZG-CLIENT"; @@ -70,4 +71,5 @@ public class WebConfiguration { .defaultHeader(X_OZG_CLIENT, ANTRAGSRAUM) .build(); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java index d325c2f78edc7c1b6787af994bd89f801cb89b56..247b36bdabafc355c6927906172857bbfd895953 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEvent.java @@ -25,5 +25,10 @@ package de.ozgcloud.antragsraum.events; import lombok.Builder; @Builder -public record NachrichtEvent(String id, String postfachId, String address) { +public record NachrichtEvent( + String id, + String postfachId, + String address +) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java index a64e190a789629c4d91611db79d84e129542bb5c..c1b013a79074b4e1c0da05f69379e636fb2921e7 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventMapper.java @@ -32,4 +32,5 @@ interface NachrichtEventMapper { @Mapping(target = "address", source = "ozgCloudAddress") NachrichtEvent fromRest(InfoGrpcInformationNachricht nachricht); + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java index a21c383991d39b6e92e74e8d431f84cb826e9275..3d303df62378a24f15901e2e2cf14fade8cf589f 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteService.java @@ -30,6 +30,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Service class NachrichtEventRemoteService { + private final NachrichtEventRestClient restClient; private final NachrichtEventMapper mapper; @@ -48,4 +49,5 @@ class NachrichtEventRemoteService { return response.getNachrichten().stream().map(mapper::fromRest).toList(); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java index 31903a7b6a622a524d1687b5a1159a09d422e6bf..190e7cffe94049e3a4f5b95b77483bfec46b0fa7 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClient.java @@ -11,6 +11,7 @@ import de.ozgcloud.common.errorhandling.TechnicalException; @Component class NachrichtEventRestClient { + static final String INFORMATION_LIST_ENDPOINT = "api/v1/informations/{postfachId}"; static final String INFORMATION_ENDPOINT = "api/v1/information/{id}"; @@ -39,4 +40,5 @@ class NachrichtEventRestClient { throw new TechnicalException("Error retrieving data from grpc using restclient.", e); } } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java index 76381359342b253c907249f5c0b7a68fcaae86ce..e6fb6b676e6aa5d73657c29bbbe49a7a019e4b97 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/events/NachrichtEventService.java @@ -32,6 +32,7 @@ import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class NachrichtEventService { + private final @NonNull NachrichtEventRemoteService remoteService; public NachrichtEvent getNachrichtEventById(String id) { @@ -41,4 +42,5 @@ public class NachrichtEventService { public List<NachrichtEvent> getNachrichtEventsOfPostfachId(String postfachId) { return remoteService.getNachrichtEventsByPostfach(postfachId); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java index 13194163562cdf160a387f750ffa3aa21482b202..93ffdf3c51feae0b5714670bec83b546410d3029 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandler.java @@ -20,27 +20,32 @@ package de.ozgcloud.antragsraum.security; +import java.io.IOException; +import java.util.Objects; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import lombok.RequiredArgsConstructor; + import org.springframework.security.core.Authentication; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.web.authentication.AbstractAuthenticationTargetUrlRequestHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; -import java.io.IOException; -import java.util.Objects; +import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class AntragsraumLogoutSuccessHandler extends AbstractAuthenticationTargetUrlRequestHandler implements LogoutSuccessHandler { + private final UserDetailsService userDetailService; - public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException { if (Objects.nonNull(authentication) && authentication.getPrincipal() instanceof User user) { ((InMemoryUserDetailService) userDetailService).logout(user); } super.handle(request, response, authentication); } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java index 622d80609f1624c358abcb81b3b404c66efb342c..b61c326a28477111f71399d5bc1aa64b17451a3c 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AntragsraumProperties.java @@ -20,16 +20,19 @@ package de.ozgcloud.antragsraum.security; +import org.springframework.boot.context.properties.ConfigurationProperties; + import lombok.Getter; import lombok.Setter; -import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "ozgcloud.antragsraum") @Getter @Setter public class AntragsraumProperties { - private String[] authOrigins; - private String[] apiOrigins; - private String[] otherOrigins; - private String logoutSuccessUrl = "http://localhost:8082/?logout"; + + private String[] authOrigins; + private String[] apiOrigins; + private String[] otherOrigins; + private String logoutSuccessUrl = "http://localhost:8082/?logout"; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java index 7e999c8addc7dab9bb3b9afedf915a8ee43725ff..577c939fe1f732dd2ba0ea445b6f923a579e2869 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthCode.java @@ -21,4 +21,5 @@ package de.ozgcloud.antragsraum.security; record AuthCode(String code) { + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java index 4bb26808b2b6fdd104747a3703164c3edfce0ec7..9dffaa14506a950d1c659c47206f3adabb612bcb 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationController.java @@ -41,6 +41,7 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @RequestMapping(AuthenticationController.PATH) class AuthenticationController { + static final String PATH = "/auth"; // NOSONAR private final InMemoryUserDetailService userDetailsService; @@ -84,4 +85,5 @@ class AuthenticationController { return ResponseEntity.ok("Success"); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java index 6f20f2ffd44b48379d2517fbe28d4c56e03c971c..f58309a0464337f779d106bd13b13964749c8115 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/AuthenticationHelper.java @@ -38,6 +38,7 @@ import lombok.extern.log4j.Log4j2; @NoArgsConstructor(access = AccessLevel.PRIVATE) @Log4j2 public class AuthenticationHelper { + static final String NO_SAML_TOKEN = "--not set--"; private static final AuthenticationTrustResolver TRUST_RESOLVER = new AuthenticationTrustResolverImpl(); private static final Predicate<Authentication> TRUSTED = auth -> !TRUST_RESOLVER.isAnonymous(auth); @@ -59,4 +60,5 @@ public class AuthenticationHelper { return tokenValue; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java index 46b8ac67857cf2bb0aacfb495f60377f643e23da..4dc3b76571a55a0c535a11d23eab5fd864757cae 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdProperties.java @@ -32,8 +32,10 @@ import lombok.Setter; @Getter @Setter public class BayernIdProperties { + private String organizationDisplayName; private Map<String, String> authnMethods; private List<String> requestedAttributeUrns; private String redirectUrl; + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java index 384fc1a0c7c4f151f323824c29b703bf6b8e6474..c3fedb32615650eeac35b39c85b5c3a8a16b7d26 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/BayernIdSaml2Extension.java @@ -36,6 +36,7 @@ import lombok.RequiredArgsConstructor; @Component @RequiredArgsConstructor public class BayernIdSaml2Extension { + @NonNull private final BayernIdProperties properties; @@ -116,4 +117,5 @@ public class BayernIdSaml2Extension { return displayInformationElement; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java b/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java index abe82eea8a056970ebd68e3763dc8c2836128829..9cb16a5c056f4fa68a608b65217de6a91e5fac27 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/DefaultRole.java @@ -23,10 +23,12 @@ package de.ozgcloud.antragsraum.security; import org.springframework.security.core.GrantedAuthority; class DefaultRole implements GrantedAuthority { + public static final String ROLE = "ROLE_USER"; @Override public String getAuthority() { return ROLE; } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java index 866c00c3968dca9881b5790ed5be38b66d3c42bc..c9a898a13cbf2617af2137c514314dbb6bf1e9fa 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenFilter.java @@ -48,6 +48,7 @@ import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor @Component public class JwtTokenFilter extends OncePerRequestFilter { + public static final String TOKEN_HEADER = "Authorization"; public static final String TOKEN_PREFIX = "Bearer "; @@ -92,4 +93,5 @@ public class JwtTokenFilter extends OncePerRequestFilter { } return Optional.empty(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java index b6121fe95ea03d98664ccfc036fffbeee7885a08..284eae0916a1f33f9c7e4a49b689f1f287fad371 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenProvider.java @@ -37,6 +37,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class JwtTokenProvider { + public static final String TOKEN_TYPE = "JWT"; public static final String TOKEN_ISSUER = "antragsraum-api"; public static final String TOKEN_AUDIENCE = "antragsraum-app"; @@ -80,4 +81,5 @@ class JwtTokenProvider { .claim("trustlevel", user.getTrustLevel()) .compact(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java index d8be96e1db725759e2edb0edbbfe9077a6b775bf..db2cab22ae9281e45ff18c93f4c670fd898929c1 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/JwtTokenVerifier.java @@ -40,6 +40,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Component class JwtTokenVerifier { + @Value("${ozgcloud.jwt.secret}") private String jwtSecret; @@ -72,4 +73,5 @@ class JwtTokenVerifier { } return Optional.empty(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java index 7e5cea725cb7905e0acb74dd020c1c99fd0bfc0d..c3becbbe4b7e1b67cf965f05be301eb090d4f6e8 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithm.java @@ -29,6 +29,7 @@ import lombok.NonNull; @NoArgsConstructor final class SHA256withRSAAndMGF1SignatureAlgorithm implements SignatureAlgorithm { + static final String RSA_ALGORITHM_ID = "RSA"; static final String RSA_SHA256_MGF1_ALGORITHM_URL = "http://www.w3.org/2007/05/xmldsig-more#sha256-rsa-MGF1"; static final String RSA_SHA256_MGF1_ALGORITHM_ID = "SHA256withRSAandMGF1"; @@ -58,4 +59,5 @@ final class SHA256withRSAAndMGF1SignatureAlgorithm implements SignatureAlgorithm public String getDigest() { return SHA256_ALGORITHM_ID; } + } \ No newline at end of file diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java index ee7e5b6bd3032cb53f5748763cb19ef185fd9ac0..8f8570fd23b4bd41187cb69f2bc42590bb1999a2 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategy.java @@ -36,6 +36,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 class SamlRedirectStrategy extends DefaultRedirectStrategy { + private final UserDetailsService userDetailsService; private final String redirectUrl; private String onetimeToken; @@ -72,4 +73,5 @@ class SamlRedirectStrategy extends DefaultRedirectStrategy { response.sendRedirect(calculateRedirectUrl); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java index 0f125093103b170604199e9b56868b47d99fe21f..4df724fd16a4c98538454a95ee55e26709ac60d6 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandler.java @@ -40,6 +40,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 public class SamlUrlAuthenticationSuccessHandler implements AuthenticationSuccessHandler { + private final SamlRedirectStrategy redirectStrategy; private final Map<String, String> roleTargetUrlMap = new HashMap<>(); @@ -97,4 +98,5 @@ public class SamlUrlAuthenticationSuccessHandler implements AuthenticationSucces session.removeAttribute(WebAttributes.AUTHENTICATION_EXCEPTION); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java b/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java index 98ef48877071818e013cc6b844805e30a3d60c3a..c824b38d0fb3867619940ca9e588ab37d24e36fc 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/SecurityProvider.java @@ -30,6 +30,7 @@ import org.opensaml.xmlsec.algorithm.AlgorithmRegistry; import org.springframework.beans.factory.InitializingBean; public class SecurityProvider implements InitializingBean { + @Override public void afterPropertiesSet() { Security.addProvider(new BouncyCastleProvider()); @@ -45,4 +46,5 @@ public class SecurityProvider implements InitializingBean { ConfigurationService.register(AlgorithmRegistry.class, algorithmRegistry); } } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/User.java b/server/src/main/java/de/ozgcloud/antragsraum/security/User.java index 42317167610d4f52bda6da394047b0b7f43c285b..0ba59b2957e46dc0f07d099c32ea51a8da353edf 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/User.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/User.java @@ -39,6 +39,7 @@ import lombok.Getter; @Builder(toBuilder = true) @Getter class User implements UserDetails { + private String id; private String samlToken; private String firstName; @@ -89,4 +90,5 @@ class User implements UserDetails { PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } + } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java index a95d1fbf3e2b73819acb1eceefc458a0f8e048e9..3a922ee1b9d62c759c2d0e211453123e2db84c83 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/security/UserMapper.java @@ -34,6 +34,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class UserMapper { + public static final String POSTKORB_HANDLE_URN = "urn:oid:2.5.4.18"; public static final String BK2_URN = "urn:oid:1.3.6.1.4.1.25484.494450.3"; public static final String VORNAME_URN = "urn:oid:2.5.4.42"; @@ -76,4 +77,5 @@ class UserMapper { static List<Map.Entry<String, List<Object>>> getUnknownAttributes(Map<String, List<Object>> attributes) { return attributes.entrySet().stream().filter(entry -> !ArrayUtils.contains(KNOWN_ATTRIBUTES, entry.getKey())).toList(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java index 78fb758a9c6525d24f1cb0b991bfdd28a30e9384..482bf22b125002bf4e58c43c5539123c5b8f723a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationITCase.java @@ -29,7 +29,9 @@ import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; @SpringBootTest @SpringJUnitConfig(classes = { AntragsRaumApplicationTestConfiguration.class }) class AntragsRaumApplicationITCase { + @Test void shouldLoadContext() { // NOSONAR } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java index b647f91329747354a7dc7a27ec1b56ed185126b4..3598fd6eb03285fb06f180371f99f5d52ef28495 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTest.java @@ -31,6 +31,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class AntragsRaumApplicationTest { + @Spy @InjectMocks private AntragsRaumApplication application; @@ -48,4 +49,5 @@ class AntragsRaumApplicationTest { assertThat(customizer).isNotNull(); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java index 7b89a3b2058a115712ffbd5f6b075662daccdb9d..b86fff38b890c940a692a539e10c3b88d3c8f505 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/AntragsRaumApplicationTestConfiguration.java @@ -30,4 +30,5 @@ import org.springframework.context.annotation.FilterType; @ComponentScan(value = { "de.ozgcloud" }, excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = ".*[TestConfiguration].*")) public class AntragsRaumApplicationTestConfiguration { + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java b/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java index 7d54ea70fee3ee21b459a0f583393b10d2d98d73..98da49dd5da79ee8fa42c60e89e6a25b3168f34f 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/ModularityTests.java @@ -26,6 +26,7 @@ import org.springframework.modulith.core.ApplicationModules; import org.springframework.modulith.docs.Documenter; class ModularityTests { + @Test void verifyModularity() { // NOSONAR ApplicationModules.of(AntragsRaumApplication.class); @@ -39,4 +40,5 @@ class ModularityTests { .writeModulesAsPlantUml() .writeIndividualModulesAsPlantUml(); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java index 471db6a140b1984afeb11161d887d857670a6744..d36b85060ea61957f668c835901d8cf3f3dab791 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/RootControllerTest.java @@ -39,6 +39,7 @@ class RootControllerTest { @Nested class TestWithBuildProperties { + @Mock private BuildProperties buildProperties; @@ -121,10 +122,12 @@ class RootControllerTest { assertThat(root.isProduction()).isTrue(); } + } @Nested - class TestWithOutBuildProperties { + class TestWithoutBuildProperties { + private final RootController rootController = new RootController(null); @Test @@ -175,5 +178,7 @@ class RootControllerTest { assertThat(root.isProduction()).isTrue(); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java index cd4b8c89ddaed198489fb792692d79632c81731b..2642fbcdba7afa61d08f53b1f8ad79a67f2b372d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/SecurityConfigurationTest.java @@ -45,6 +45,7 @@ import de.ozgcloud.antragsraum.security.SecurityProvider; @ExtendWith(MockitoExtension.class) class SecurityConfigurationTest { + @Mock private BayernIdSaml2Extension bayernIdSaml2Extension; @@ -83,6 +84,7 @@ class SecurityConfigurationTest { @Nested class TestHttpSecurity { + private HttpSecurity httpSecurity; @BeforeEach @@ -123,10 +125,12 @@ class SecurityConfigurationTest { verify(httpSecurity, times(2)).headers(any()); } + } @Nested class TestAuthenticationRequestResolver { + @Mock private RelyingPartyRegistrationRepository registrations; @@ -136,10 +140,12 @@ class SecurityConfigurationTest { assertThat(authResolver).isInstanceOf(Saml2AuthenticationRequestResolver.class); } + } @Nested class TestSamlFilterChain { + @Mock HttpSecurity security; @@ -166,10 +172,12 @@ class SecurityConfigurationTest { verify(security).saml2Logout(any()); } + } @Nested class TestLogoutHandler { + @Test void shouldCreateLogoutHandler() { when(corsProperties.getLogoutSuccessUrl()).thenReturn("/"); @@ -178,25 +186,31 @@ class SecurityConfigurationTest { assertThat(handler).isInstanceOf(AntragsraumLogoutSuccessHandler.class); } + } @Nested class TestSuccessHandler { + @Test void shouldCreateSuccessHandler() { var handler = securityConfiguration.getSamlUrlAuthenticationSuccessHandler(); assertThat(handler).isInstanceOf(SamlUrlAuthenticationSuccessHandler.class); } + } @Nested class TestCorsConfigurer { + @Test void shouldCreateCorsConfigurer() { var corsConfigurer = securityConfiguration.corsConfigurer(); assertThat(corsConfigurer).isInstanceOf(WebMvcConfigurer.class); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java index 100fa9c4b6109be7d324d81107e539eef4e3d00e..b52943a4745bc0cb894437002a7d24e075784bcf 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/SwaggerCorsConfigurationTest.java @@ -21,18 +21,19 @@ */ package de.ozgcloud.antragsraum; -import org.junit.jupiter.api.Test; - import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; + class SwaggerCorsConfigurationTest { - private final SwaggerCorsConfiguration configuration = new SwaggerCorsConfiguration(); - @Test - void shouldCreateCorsFilter() { - var configSource = configuration.corsFilter(); + private final SwaggerCorsConfiguration configuration = new SwaggerCorsConfiguration(); + + @Test + void shouldCreateCorsFilter() { + var configSource = configuration.corsFilter(); - assertThat(configSource).isNotNull(); - } + assertThat(configSource).isNotNull(); + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java b/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java index 75d5c2033bc75fe6fd676e0a1a7568a0107d6b69..a5cad8c14c560fa416bf1e1c6950be1c53138bf8 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/WebConfigurationTest.java @@ -29,6 +29,7 @@ import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.web.client.RestTemplate; class WebConfigurationTest { + @Test void shouldCreateRestTemplate() { WebConfiguration configuration = new WebConfiguration(); @@ -36,4 +37,5 @@ class WebConfigurationTest { assertThat(template).isNotNull(); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java index 7abb90873e0ec47906f26a79f3b012e3499cb057..7068149336848d7b10793c2683afba94136925f6 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java @@ -72,7 +72,7 @@ class FileServiceTest { when(remoteService.uploadFile(any(OzgUploadFile.class), anyString())).thenReturn( CompletableFuture.completedFuture(FILE_ID)); - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); } @Test @@ -101,7 +101,7 @@ class FileServiceTest { @Test void shouldThrowTechnicalExceptionOnUpload() { - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); doThrow(TechnicalException.class).when(remoteService).uploadFile(any(), anyString()); assertThatExceptionOfType(TechnicalException.class).isThrownBy( @@ -114,7 +114,7 @@ class FileServiceTest { @BeforeEach void init() { when(remoteService.getFile(any(FileIdentificationData.class), anyString())).thenReturn(OzgFileTestFactory.create()); - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); } @Test @@ -129,7 +129,7 @@ class FileServiceTest { class TestDownloadingFileContent { @BeforeEach void init() { - when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.create()); } @Test diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java index 5a3318bfc7f439720fced5a248dc93c4ed0579b0..7f4425defaae4bb7f1cceb61b7ddb31c5ec826ad 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceITCase.java @@ -50,7 +50,7 @@ class CommandRemoteServiceITCase { @Nested class TestGetCommand { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createBuilder().address(ADDRESS).build(); @BeforeEach void setup() { diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java index 1cba2470cb154a098797342b375e42427902b244..6dbc661203bd015c6332bbd683f65b45e5bc621d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandRemoteServiceTest.java @@ -62,7 +62,7 @@ public class CommandRemoteServiceTest { @Test void shouldLoadCommand() { - var command = commandRemoteService.getCommand(NachrichtEventTestFactory.createNachrichtEvent(), CommandTestFactory.ID); + var command = commandRemoteService.getCommand(NachrichtEventTestFactory.create(), CommandTestFactory.ID); assertThat(command).isInstanceOf(Command.class); } @@ -79,7 +79,7 @@ public class CommandRemoteServiceTest { @Test void shouldThrowAddressNotFoundException() { - var nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + var nachrichtEvent = NachrichtEventTestFactory.create(); assertThatExceptionOfType(AddressNotFoundException.class).isThrownBy( () -> commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)); diff --git a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java index b4545f1f8754f979f088897ca36a0eba2e28e1c2..9e4fff94316261f2d5fdb6ca5d4d17b37ea3e066 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/command/CommandServiceTest.java @@ -53,7 +53,7 @@ class CommandServiceTest { @BeforeEach void init() { - final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); when(nachrichtEventService.getNachrichtEventById(NachrichtEventTestFactory.ID)).thenReturn(nachrichtEvent); when(commandRemoteService.getCommand(nachrichtEvent, CommandTestFactory.ID)).thenReturn(CommandTestFactory.create()); } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationByIdResponseFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationByIdResponseFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..c61f9b60854907b6736a9e93690910bdc8a6dafb --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationByIdResponseFactory.java @@ -0,0 +1,14 @@ +package de.ozgcloud.antragsraum.events; + +import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationByIdResponse; +import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; + +public class GrpcInformationByIdResponseFactory { + + private static final InfoGrpcInformationNachricht NACHRICHT = GrpcNachrichtEventTestFactory.create(); + + public static InfoGrpcInformationByIdResponse create() { + return new InfoGrpcInformationByIdResponse().nachricht(NACHRICHT); + } + +} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java index 59dc4743b931a483a30ed9e8d7fa33f141f15e45..6ef03e4c8dab40a8b044266620a9744961d77482 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcInformationResponseTestFactory.java @@ -7,11 +7,10 @@ import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationResponse; public class GrpcInformationResponseTestFactory { - public static final InfoGrpcInformationNachricht NACHRICHT = NachrichtEventTestFactory.createInfoGrpcInformationNachricht(); + public static final InfoGrpcInformationNachricht NACHRICHT = GrpcNachrichtEventTestFactory.create(); - public static InfoGrpcInformationResponse createResponse() { - var response = new InfoGrpcInformationResponse(); - response.setNachrichten(List.of(NACHRICHT)); - return response; + public static InfoGrpcInformationResponse create() { + return new InfoGrpcInformationResponse().nachrichten(List.of(NACHRICHT)); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcNachrichtEventTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcNachrichtEventTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..705e6c80ec9cbe2c9e09c8712e40994adf286eb3 --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/GrpcNachrichtEventTestFactory.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2023-2024. Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten + * des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung. + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.antragsraum.events; + +import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; + +public class GrpcNachrichtEventTestFactory { + + public static InfoGrpcInformationNachricht create() { + return new InfoGrpcInformationNachricht() + .id(NachrichtEventTestFactory.ID) + .postfachId(NachrichtEventTestFactory.POSTFACH_ID) + .ozgCloudAddress(NachrichtEventTestFactory.URL); + } + +} \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java index 0ccc15a580aae511ed6ce9fc3d10407fd19f8dd6..d2c430da11105b66e65f56ae9813ae96dfb8f523 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventMapperTest.java @@ -38,13 +38,15 @@ class NachrichtEventMapperTest { @Nested class TestFromGrpc { - private final InfoGrpcInformationNachricht grpcInformationNachricht = NachrichtEventTestFactory.createInfoGrpcInformationNachricht(); + private final InfoGrpcInformationNachricht grpcInformationNachricht = GrpcNachrichtEventTestFactory.create(); @Test void shouldMap() { var mapped = mapper.fromRest(grpcInformationNachricht); - assertThat(mapped).usingRecursiveComparison().isEqualTo(NachrichtEventTestFactory.createNachrichtEvent()); + assertThat(mapped).usingRecursiveComparison().isEqualTo(NachrichtEventTestFactory.create()); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java index e6684256bb43cb6465e6450842be9b1dd7f6fe46..1ff63c3ecea529fab068cd1d2b064e4c0dc31760 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteServiceTest.java @@ -46,11 +46,11 @@ class NachrichtEventRemoteServiceTest { @Nested class TestGetNachrichtEventById { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { - when(restClient.getNachrichtEventById(any())).thenReturn(RestInformationByIdResponseTestFactory.createResponse()); + when(restClient.getNachrichtEventById(any())).thenReturn(GrpcInformationByIdResponseFactory.create()); when(mapper.fromRest(any())).thenReturn(nachrichtEvent); } @@ -74,17 +74,18 @@ class NachrichtEventRemoteServiceTest { assertThat(mappedResult).usingRecursiveComparison().isEqualTo(nachrichtEvent); } + } @DisplayName("Get nachricht events by postfach") @Nested class TestGetNachrichtEventsByPostfach { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void mock() { - when(restClient.getNachrichtEventsByPostfach(any())).thenReturn(GrpcInformationResponseTestFactory.createResponse()); + when(restClient.getNachrichtEventsByPostfach(any())).thenReturn(GrpcInformationResponseTestFactory.create()); when(mapper.fromRest(any())).thenReturn(nachrichtEvent); } @@ -108,5 +109,7 @@ class NachrichtEventRemoteServiceTest { assertThat(mappedResult).containsExactly(nachrichtEvent); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java index 72c0ab4ef8cb2a8c4b1cda87388df3ba6dd60ac3..04a7983d484f0c1e041971456cdda0593a080c04 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRemoteTestConfiguration.java @@ -27,10 +27,12 @@ import org.springframework.context.annotation.Configuration; @Configuration public class NachrichtEventRemoteTestConfiguration { + @Bean NachrichtEventRemoteService nachrichtEventRemoteService() { var restClient = mock(NachrichtEventRestClient.class); var mapper = Mappers.getMapper(NachrichtEventMapper.class); return new NachrichtEventRemoteService(restClient, mapper); } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java index 0d37e26a2e7c5bde4d6da3f316b9def879d60629..26e627ccd1db40717bd49aec8e90caa0a43db766 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventRestClientTest.java @@ -32,7 +32,7 @@ class NachrichtEventRestClientTest { @Nested class TestGetNachrichtEventsByPostfach { - private final InfoGrpcInformationResponse grpcResponse = GrpcInformationResponseTestFactory.createResponse(); + private final InfoGrpcInformationResponse grpcResponse = GrpcInformationResponseTestFactory.create(); @BeforeEach void init() { @@ -53,13 +53,14 @@ class NachrichtEventRestClientTest { assertThat(response).isEqualTo(grpcResponse); } + } @DisplayName("Get nachricht event by id") @Nested class TestGetNachrichtEventById { - private final InfoGrpcInformationByIdResponse grpcResponse = RestInformationByIdResponseTestFactory.createResponse(); + private final InfoGrpcInformationByIdResponse grpcResponse = GrpcInformationByIdResponseFactory.create(); @BeforeEach void init() { @@ -80,6 +81,7 @@ class NachrichtEventRestClientTest { assertThat(response).isEqualTo(grpcResponse); } + } @DisplayName("Build get request") @@ -105,5 +107,7 @@ class NachrichtEventRestClientTest { void shouldThrowException() { assertThrows(TechnicalException.class, () -> nachrichtClient.get("dummyEndpoint", Object.class)); } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java index fe45a7e063048647eaf6266f917062b25c631e8e..f19915d0882726613fea6480ee74c919654d2359 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventServiceTest.java @@ -34,6 +34,7 @@ import de.ozgcloud.antragsraum.nachricht.NachrichtTestFactory; @ExtendWith(MockitoExtension.class) class NachrichtEventServiceTest { + @Spy @InjectMocks private NachrichtEventService service; @@ -53,4 +54,5 @@ class NachrichtEventServiceTest { verify(remoteService).getNachrichtEventById(anyString()); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java index f316fb7afa0971e94fe74d0f228f5bbfd333c17f..b69044983c5669f25199ab0e567e513b249d7043 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/events/NachrichtEventTestFactory.java @@ -23,29 +23,21 @@ package de.ozgcloud.antragsraum.events; import java.util.UUID; -import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; - public class NachrichtEventTestFactory { + public static final String ID = UUID.randomUUID().toString(); public static final String POSTFACH_ID = UUID.randomUUID().toString(); public static final String URL = "http://localhost"; - public static NachrichtEvent createNachrichtEvent() { - return createNachrichtEventBuilder().build(); + public static NachrichtEvent create() { + return createBuilder().build(); } - public static NachrichtEvent.NachrichtEventBuilder createNachrichtEventBuilder() { + public static NachrichtEvent.NachrichtEventBuilder createBuilder() { return NachrichtEvent.builder() .id(ID) .postfachId(POSTFACH_ID) .address(URL); } - public static InfoGrpcInformationNachricht createInfoGrpcInformationNachricht() { - var nachricht = new InfoGrpcInformationNachricht(); - nachricht.setId(ID); - nachricht.setPostfachId(POSTFACH_ID); - nachricht.setOzgCloudAddress(URL); - return nachricht; - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/events/RestInformationByIdResponseTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/events/RestInformationByIdResponseTestFactory.java deleted file mode 100644 index 387f0db15c112b5aada5071ea7ae33ee9b841954..0000000000000000000000000000000000000000 --- a/server/src/test/java/de/ozgcloud/antragsraum/events/RestInformationByIdResponseTestFactory.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.ozgcloud.antragsraum.events; - -import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationByIdResponse; -import de.ozgcloud.antragsraum.proxy.InfoGrpcInformationNachricht; - -public class RestInformationByIdResponseTestFactory { - - private static final InfoGrpcInformationNachricht NACHRICHT = NachrichtEventTestFactory.createInfoGrpcInformationNachricht(); - - public static InfoGrpcInformationByIdResponse createResponse() { - return createInfoGrpcInformationByIdResponse(); - } - - public static InfoGrpcInformationByIdResponse createInfoGrpcInformationByIdResponse() { - var response = new InfoGrpcInformationByIdResponse(); - response.setNachricht(NACHRICHT); - return response; - } -} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java index c5ac08da5e41efce5a6b6bc66598c146e0609652..87c29ba69677ab13b2ad3824af89097f03935ced 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceITCase.java @@ -63,7 +63,7 @@ class NachrichtenRemoteServiceITCase { @Nested class TestGetNachrichtHeaders { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createBuilder().address(ADDRESS).build(); @BeforeEach void setup() { @@ -91,7 +91,7 @@ class NachrichtenRemoteServiceITCase { @Nested class TestGetNachricht { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEventBuilder().address(ADDRESS).build(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createBuilder().address(ADDRESS).build(); @BeforeEach void setup() { diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java index d866a13274a88ad3014c042adaee4d1a65d5cf25..91cd3548e08d65ebace981c914a73793ef39e327 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenRemoteServiceTest.java @@ -83,7 +83,7 @@ public class NachrichtenRemoteServiceTest { @Nested class TestNachrichtenAvailable { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -129,7 +129,7 @@ public class NachrichtenRemoteServiceTest { @Test void shouldHandleStatusRuntimeException() { - var nachrichtHeaders = nachrichtenRemoteService.findRueckfrageHeads(NachrichtEventTestFactory.createNachrichtEvent()); + var nachrichtHeaders = nachrichtenRemoteService.findRueckfrageHeads(NachrichtEventTestFactory.create()); assertThat(nachrichtHeaders).isEmpty(); } @@ -145,7 +145,7 @@ public class NachrichtenRemoteServiceTest { @Test void shouldThrowAddressNotFoundException() { - var nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + var nachrichtEvent = NachrichtEventTestFactory.create(); assertThatExceptionOfType(AddressNotFoundException.class).isThrownBy(() -> nachrichtenRemoteService.findRueckfrageHeads(nachrichtEvent)); } @@ -153,7 +153,7 @@ public class NachrichtenRemoteServiceTest { @Nested class TestGetNachricht { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -186,7 +186,7 @@ public class NachrichtenRemoteServiceTest { new AntragraumproxyGrpcGetRueckfrageResponse()); nachrichtenRemoteService.getRueckfrage(AntragraumproxyGrpcRueckfrageTestFactory.RUECKFRAGE_ID, - NachrichtEventTestFactory.createNachrichtEvent()); + NachrichtEventTestFactory.create()); verify(nachrichtenRestClient).getGetRueckfrage(anyString(), anyString(), anyString()); } @@ -197,7 +197,7 @@ public class NachrichtenRemoteServiceTest { new StatusRuntimeException(Status.CANCELLED)); nachrichtenRemoteService.getRueckfrage(AntragraumproxyGrpcRueckfrageTestFactory.RUECKFRAGE_ID, - NachrichtEventTestFactory.createNachrichtEvent()); + NachrichtEventTestFactory.create()); verify(nachrichtenRestClient).getGetRueckfrage(anyString(), anyString(), anyString()); } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java index ff7af87fd603945c9e75d1b5bdb7db7c0148229d..56e897f3bec843a5916bb08dfe1196b55d049401 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceITCase.java @@ -67,7 +67,7 @@ class NachrichtenServiceITCase { class TestSendNachricht { @BeforeEach void init() { - when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.create()); when(nachrichtenRemoteService.sendAnswer(any(ReplyNachricht.class), anyString())).thenReturn(CommandReferenceTestFactory.create()); } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java index 536d887582fb096165912c23dc0fa96de27ea71c..ac8c2a8a36b66992357960564318a93dab96532b 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtenServiceTest.java @@ -66,7 +66,7 @@ class NachrichtenServiceTest { @BeforeEach void init() { when(nachrichtEventService.getNachrichtEventsOfPostfachId(anyString())).thenReturn( - List.of(NachrichtEventTestFactory.createNachrichtEvent())); + List.of(NachrichtEventTestFactory.create())); when(nachrichtenRemoteService.findRueckfrageHeads(any())).thenReturn(List.of(NachrichtTestFactory.createNachrichtHeader())); } @@ -105,7 +105,7 @@ class NachrichtenServiceTest { @Nested class TestGetRueckfrage { - private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.createNachrichtEvent(); + private final NachrichtEvent nachrichtEvent = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -135,7 +135,7 @@ class NachrichtenServiceTest { @Nested class TestGetNachrichtHeadersOfPostfachWithNachrichtenEventAvailable { - final NachrichtEvent event = NachrichtEventTestFactory.createNachrichtEvent(); + final NachrichtEvent event = NachrichtEventTestFactory.create(); @BeforeEach void init() { @@ -194,7 +194,7 @@ class NachrichtenServiceTest { @BeforeEach void init() { - when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); + when(nachrichtEventService.getNachrichtEventById(anyString())).thenReturn(NachrichtEventTestFactory.create()); when(nachrichtenRemoteService.sendAnswer(any(ReplyNachricht.class), anyString())).thenReturn(CommandReferenceTestFactory.create()); } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java index a40f9dc9777133746a647db1d604a2db877fb481..e7d4f8d78ed84e5b3c1a9bab816b0896ac1f76cc 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/AntragsraumLogoutSuccessHandlerTest.java @@ -20,9 +20,14 @@ package de.ozgcloud.antragsraum.security; +import static org.mockito.Mockito.*; + +import java.io.IOException; + import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -31,12 +36,9 @@ import org.mockito.Spy; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.core.Authentication; -import java.io.IOException; - -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class AntragsraumLogoutSuccessHandlerTest { + @Spy @InjectMocks private AntragsraumLogoutSuccessHandler antragsraumLogoutSuccessHandler; @@ -59,4 +61,5 @@ class AntragsraumLogoutSuccessHandlerTest { verify(userDetailService, never()).logout(any(User.class)); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java index 9ab867230769f1fd56ddea5eee1a880c39c8f39a..b7efda21a70dd79b82156dbf663353936afe9f9e 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationControllerTest.java @@ -41,6 +41,7 @@ import org.springframework.security.web.authentication.logout.SecurityContextLog @ExtendWith(MockitoExtension.class) class AuthenticationControllerTest { + @Spy @InjectMocks private AuthenticationController authenticationController; @@ -56,6 +57,7 @@ class AuthenticationControllerTest { @Nested class TestLogin { + private AuthCode code; @BeforeEach @@ -114,6 +116,7 @@ class AuthenticationControllerTest { @Nested class TestRefresh { + private AuthCode code; @BeforeEach @@ -145,10 +148,12 @@ class AuthenticationControllerTest { verify(inMemoryUserDetailService).updateRefreshCodeOf(any(User.class)); } + } @Nested class TestLogout { + private final MockHttpServletRequest request = new MockHttpServletRequest(); private final MockHttpServletResponse response = new MockHttpServletResponse(); private final User user = UserTestFactory.create(); @@ -180,5 +185,7 @@ class AuthenticationControllerTest { verify(logoutHandler).logout(eq(request), eq(response), any()); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java index ddc9500135309d5539da86d9d516a7ab8a27cd36..46dd1caa2b3ced82b33bf55ec3ac64b24c50b389 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/AuthenticationHelperTest.java @@ -34,8 +34,10 @@ import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; class AuthenticationHelperTest { + @Nested class TestGetAuthentication { + @Test void shouldGetAuthenticatedUser() { var authenticated = mock(RememberMeAuthenticationToken.class); @@ -57,10 +59,12 @@ class AuthenticationHelperTest { assertThatExceptionOfType(IllegalStateException.class).isThrownBy(AuthenticationHelper::getAuthentication); } + } @Nested class TestGetSamlToken { + @Test void shouldGetAuthenticatedSamlToken() { var authenticated = mock(UsernamePasswordAuthenticationToken.class); @@ -98,5 +102,7 @@ class AuthenticationHelperTest { assertThat(samlToken).isEqualTo(AuthenticationHelper.NO_SAML_TOKEN); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java index c0a5af1dbde1e7e2f71350f1add19cee851f2e80..894ced0076f331efdf0e4b489111ab009cedb83d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/BayernIdSaml2ExtensionTest.java @@ -43,6 +43,7 @@ import org.opensaml.saml.saml2.core.Extensions; @ExtendWith(MockitoExtension.class) class BayernIdSaml2ExtensionTest { + private static final String URN_1_1 = "urn:1.1"; private static final String URN_2_2 = "urn.2.2"; private static final String ORGANIZATION_DISPLAY_NAME = "TestOrganizationDisplayName"; @@ -109,6 +110,7 @@ class BayernIdSaml2ExtensionTest { private XSAny getChild(XMLObject authMethodElement) { return (XSAny) authMethodElement.getOrderedChildren().getFirst(); } + } @Nested @@ -159,6 +161,7 @@ class BayernIdSaml2ExtensionTest { ((XSAny) child).getUnknownAttributes().containsValue(name) ).findFirst(); } + } @Nested @@ -225,6 +228,7 @@ class BayernIdSaml2ExtensionTest { private XSAny getGrandChild(XMLObject authMethodElement) { return (XSAny) authMethodElement.getOrderedChildren().getFirst().getOrderedChildren().getFirst(); } + } @Nested @@ -284,6 +288,7 @@ class BayernIdSaml2ExtensionTest { child.getElementQName().getLocalPart().equals(localName) ).findFirst(); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java index 5c7b9c4e01c945e78df70090b05b5a88fb7c9558..dbd09ac941481cf5be6739df4f92d0892e1b3607 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/InMemoryUserDetailServiceTest.java @@ -20,9 +20,14 @@ package de.ozgcloud.antragsraum.security; -import com.google.common.cache.CacheBuilder; -import com.google.common.testing.FakeTicker; -import de.ozgcloud.antragsraum.common.NotFoundException; +import static org.assertj.core.api.Assertions.*; + +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.UUID; +import java.util.concurrent.TimeUnit; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -30,214 +35,226 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.test.util.ReflectionTestUtils; -import java.time.ZoneId; -import java.time.ZonedDateTime; -import java.util.Date; -import java.util.UUID; -import java.util.concurrent.TimeUnit; +import com.google.common.cache.CacheBuilder; +import com.google.common.testing.FakeTicker; -import static org.assertj.core.api.Assertions.*; +import de.ozgcloud.antragsraum.common.NotFoundException; @ExtendWith(MockitoExtension.class) class InMemoryUserDetailServiceTest { - private final InMemoryUserDetailService userDetailService = new InMemoryUserDetailService(); - private final static String TEMP_ID = UUID.randomUUID().toString(); - private User user; - - @Nested - class TestAddingUser { - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - user = UserTestFactory.create(); - userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.SECONDS) - .build(); - userDetailService.addUser(TEMP_ID, user); - } - - @Test - void shouldAddUser() { - assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); - } - - @Test - void shouldSetExpiryTimeDateWhenAddUser() { - var date = ZonedDateTime.now(ZoneId.of("UTC")).plusMinutes(30L).toInstant(); - assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isCloseTo(date, 10); - } - - @Test - void shouldGetUserByCode() { - assertThat(userDetailService.getUserByCode(TEMP_ID)).isNotNull(); - } - - @Test - void shouldThrowNotFoundExceptionWrongTempId() { - assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode("OTHER")); - } - - @Test - void shouldLoadUser() { - userDetailService.addUser(TEMP_ID, user); - - assertThat(userDetailService.loadUserByUsername(UserTestFactory.USER_NAME)).isNotNull(); - } - } - - @Nested - class TestSetUser { - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - user = UserTestFactory.create(); - userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() - .expireAfterAccess(10, TimeUnit.SECONDS) - .build(); - userDetailService.setUser(TEMP_ID, user); - } - - @Test - void shouldSetUser() { - assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); - } - - @Test - void shouldNotSetExpiryTimeDateWhenSetUser() { - assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isEqualTo(user.getTokenExpiresAt()); - } - } - - @Nested - class TestExpiringCodeCache { - FakeTicker ticker = new FakeTicker(); - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - - user = UserTestFactory.create(); - userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() - .expireAfterAccess(1, TimeUnit.SECONDS) - .ticker(ticker) - .build(); - userDetailService.addUser(TEMP_ID, user); - - userDetailService.getUserByCode(TEMP_ID); - ticker.advance(2, TimeUnit.SECONDS); - } - - @Test - void shouldThrowExceptionWhenGetUserByCode() { - assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); - } - } - - @Nested - class TestUninitializedCache { - @Test - void shouldThrowExceptionWhenGetUserByCode() { - assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); - } - } - - @Nested - class TestLoadingSamlToken { - @BeforeEach - void setup() { - user = UserTestFactory.create(); - - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - userDetailService.addUser(TEMP_ID, user); - } - - @Test - void shouldReturnToken() { - assertThat(userDetailService.getSamlTokenOfUser(user.getId())).isEqualTo(UserTestFactory.SAML_TOKEN); - } - } - - @Nested - class TestHandlingRefreshToken { - @BeforeEach - void setup() { - user = UserTestFactory.create(); - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - userDetailService.addUser(UUID.randomUUID().toString(), user); - } - - - @Test - void shouldGetUser() { - var updatedUser = userDetailService.getUser(new AuthCode(user.getRefreshCode())); - - assertThat(updatedUser).isPresent(); - } - - @Test - void shouldNotGetUserBecauseUnknownRefreshCode() { - var user = userDetailService.getUser(new AuthCode(UUID.randomUUID().toString())); - - assertThat(user).isNotPresent(); - } - - @Test - void shouldNotGetUserBecauseRefreshCodeExpired() { - var localUser = UserTestFactory.createBuilder() - .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(31L).toInstant())) - .build(); - userDetailService.setUser(UUID.randomUUID().toString(), localUser); - - var userOptional = userDetailService.getUser(new AuthCode(localUser.getRefreshCode())); - - assertThat(userOptional).isNotPresent(); - } - - @Test - void shouldUpdateRefreshCode() { - var user = UserTestFactory.create(); - userDetailService.updateRefreshCodeOf(user); - - var updatedUser = userDetailService.getUser(user.getId()); - assertThat(updatedUser.getRefreshCode()).isNotEqualTo(user.getRefreshCode()); - } - } - - @Nested - class TestUserMapCleanUp { - private User expiredUser; - private User validUser; - - @BeforeEach - void setup() { - ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); - validUser = UserTestFactory.create(); - userDetailService.setUser(UUID.randomUUID().toString(), validUser); - expiredUser = UserTestFactory.createBuilder() - .id(UUID.randomUUID().toString()) - .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(5L).toInstant())).build(); - userDetailService.setUser(UUID.randomUUID().toString(), expiredUser); - } - - @Test - void shouldRemoveExpiredUser() { - userDetailService.userCleanUp(); - - assertThat(userDetailService.getUser(expiredUser.getId())).isNull(); - } - - @Test - void shouldNotRemoveValidUser() { - userDetailService.userCleanUp(); - - assertThat(userDetailService.getUser(validUser.getId())).isNotNull(); - } - - @Test - void shouldRemoveOnLogout() { - userDetailService.logout(validUser); - - assertThat(userDetailService.getUser(validUser.getId())).isNull(); - } - } + + private final InMemoryUserDetailService userDetailService = new InMemoryUserDetailService(); + private final static String TEMP_ID = UUID.randomUUID().toString(); + private User user; + + @Nested + class TestAddingUser { + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + user = UserTestFactory.create(); + userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() + .expireAfterAccess(10, TimeUnit.SECONDS) + .build(); + userDetailService.addUser(TEMP_ID, user); + } + + @Test + void shouldAddUser() { + assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); + } + + @Test + void shouldSetExpiryTimeDateWhenAddUser() { + var date = ZonedDateTime.now(ZoneId.of("UTC")).plusMinutes(30L).toInstant(); + assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isCloseTo(date, 10); + } + + @Test + void shouldGetUserByCode() { + assertThat(userDetailService.getUserByCode(TEMP_ID)).isNotNull(); + } + + @Test + void shouldThrowNotFoundExceptionWrongTempId() { + assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode("OTHER")); + } + + @Test + void shouldLoadUser() { + userDetailService.addUser(TEMP_ID, user); + + assertThat(userDetailService.loadUserByUsername(UserTestFactory.USER_NAME)).isNotNull(); + } + + } + + @Nested + class TestSetUser { + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + user = UserTestFactory.create(); + userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() + .expireAfterAccess(10, TimeUnit.SECONDS) + .build(); + userDetailService.setUser(TEMP_ID, user); + } + + @Test + void shouldSetUser() { + assertThat(userDetailService.getUser(UserTestFactory.USER_ID)).isNotNull(); + } + + @Test + void shouldNotSetExpiryTimeDateWhenSetUser() { + assertThat(userDetailService.getUser(UserTestFactory.USER_ID).getTokenExpiresAt()).isEqualTo(user.getTokenExpiresAt()); + } + + } + + @Nested + class TestExpiringCodeCache { + + FakeTicker ticker = new FakeTicker(); + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + + user = UserTestFactory.create(); + userDetailService.tmpTokenUserIdCache = CacheBuilder.newBuilder() + .expireAfterAccess(1, TimeUnit.SECONDS) + .ticker(ticker) + .build(); + userDetailService.addUser(TEMP_ID, user); + + userDetailService.getUserByCode(TEMP_ID); + ticker.advance(2, TimeUnit.SECONDS); + } + + @Test + void shouldThrowExceptionWhenGetUserByCode() { + assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); + } + + } + + @Nested + class TestUninitializedCache { + + @Test + void shouldThrowExceptionWhenGetUserByCode() { + assertThatExceptionOfType(NotFoundException.class).isThrownBy(() -> userDetailService.getUserByCode(TEMP_ID)); + } + + } + + @Nested + class TestLoadingSamlToken { + + @BeforeEach + void setup() { + user = UserTestFactory.create(); + + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + userDetailService.addUser(TEMP_ID, user); + } + + @Test + void shouldReturnToken() { + assertThat(userDetailService.getSamlTokenOfUser(user.getId())).isEqualTo(UserTestFactory.SAML_TOKEN); + } + + } + + @Nested + class TestHandlingRefreshToken { + + @BeforeEach + void setup() { + user = UserTestFactory.create(); + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + userDetailService.addUser(UUID.randomUUID().toString(), user); + } + + @Test + void shouldGetUser() { + var updatedUser = userDetailService.getUser(new AuthCode(user.getRefreshCode())); + + assertThat(updatedUser).isPresent(); + } + + @Test + void shouldNotGetUserBecauseUnknownRefreshCode() { + var user = userDetailService.getUser(new AuthCode(UUID.randomUUID().toString())); + + assertThat(user).isNotPresent(); + } + + @Test + void shouldNotGetUserBecauseRefreshCodeExpired() { + var localUser = UserTestFactory.createBuilder() + .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(31L).toInstant())) + .build(); + userDetailService.setUser(UUID.randomUUID().toString(), localUser); + + var userOptional = userDetailService.getUser(new AuthCode(localUser.getRefreshCode())); + + assertThat(userOptional).isNotPresent(); + } + + @Test + void shouldUpdateRefreshCode() { + var user = UserTestFactory.create(); + userDetailService.updateRefreshCodeOf(user); + + var updatedUser = userDetailService.getUser(user.getId()); + assertThat(updatedUser.getRefreshCode()).isNotEqualTo(user.getRefreshCode()); + } + + } + + @Nested + class TestUserMapCleanUp { + + private User expiredUser; + private User validUser; + + @BeforeEach + void setup() { + ReflectionTestUtils.setField(userDetailService, "jwtExpirationMinutes", 30L); + validUser = UserTestFactory.create(); + userDetailService.setUser(UUID.randomUUID().toString(), validUser); + expiredUser = UserTestFactory.createBuilder() + .id(UUID.randomUUID().toString()) + .tokenExpiresAt(Date.from(ZonedDateTime.now(ZoneId.of("UTC")).minusMinutes(5L).toInstant())).build(); + userDetailService.setUser(UUID.randomUUID().toString(), expiredUser); + } + + @Test + void shouldRemoveExpiredUser() { + userDetailService.userCleanUp(); + + assertThat(userDetailService.getUser(expiredUser.getId())).isNull(); + } + + @Test + void shouldNotRemoveValidUser() { + userDetailService.userCleanUp(); + + assertThat(userDetailService.getUser(validUser.getId())).isNotNull(); + } + + @Test + void shouldRemoveOnLogout() { + userDetailService.logout(validUser); + + assertThat(userDetailService.getUser(validUser.getId())).isNull(); + } + + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java index 1f21b06deca298ab3cb73b86c8a76b6256dbc06c..0a3a680eb721dadb63ffa165cbc425b427133496 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenFilterTest.java @@ -51,6 +51,7 @@ import io.jsonwebtoken.JwtParser; @ExtendWith(MockitoExtension.class) class JwtTokenFilterTest { + @Mock HttpServletRequest request; @Mock @@ -164,10 +165,12 @@ class JwtTokenFilterTest { when(tokenVerifier.getJws(any(), any())).thenReturn(Optional.of(jws)); when(userDetailService.loadUserByUsername(any())).thenReturn(UserTestFactory.create()); } + } @Nested class TestSettingSecurityContext { + @BeforeEach void setup() { User user = UserTestFactory.create(); @@ -214,10 +217,12 @@ class JwtTokenFilterTest { assertThat(((UsernamePasswordAuthenticationToken) auth).getAuthorities()).isNotNull(); } + } @Nested class TestLoadingTokenFromRequest { + @BeforeEach void setup() { User user = UserTestFactory.create(); @@ -252,10 +257,12 @@ class JwtTokenFilterTest { assertThat(tokenOptional).isPresent().map(tokenValue -> assertThat(tokenValue).isEqualTo(token)); } + } @Nested class TestNullHandling { + @Test void shouldThrowIllegalStateException() { assertThatIllegalArgumentException().isThrownBy(() -> tokenFilter.createAuthentication(null, null, null)); @@ -265,5 +272,7 @@ class JwtTokenFilterTest { void shouldThrowIllegalArgumentException() { assertThatIllegalArgumentException().isThrownBy(() -> tokenFilter.doFilterInternal(null, null, null)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java index a27a25c9fe947249770ef935d7a59f83e2b6520f..57a5a35b524bdfbe880f1576d7ef9cde7b5a3783 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenProviderTest.java @@ -37,6 +37,7 @@ import org.springframework.test.util.ReflectionTestUtils; @ExtendWith(MockitoExtension.class) class JwtTokenProviderTest { + private static final String SECRET = RandomStringUtils.random(256); JwtTokenProvider provider = new JwtTokenProvider(); @@ -48,6 +49,7 @@ class JwtTokenProviderTest { @Nested class TestJwtGeneration { + @Test void shouldGenerateToken() { assertThat(provider.generate(UserTestFactory.create())).isNotNull(); @@ -68,5 +70,7 @@ class JwtTokenProviderTest { var expIndex = token.indexOf("\"exp\":"); return Long.valueOf(token.substring(expIndex + 6, expIndex + 16)); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java index d03f3a4473bface487b6ec5ce37d5d8aa5423a3e..da1d500f6f22ff938e388203a224c5634a0f5d68 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/JwtTokenVerifierTest.java @@ -40,6 +40,7 @@ import io.jsonwebtoken.security.Keys; import io.jsonwebtoken.security.SignatureException; class JwtTokenVerifierTest { + private static final String SECRET = RandomStringUtils.random(256); JwtTokenVerifier verifier = new JwtTokenVerifier(); @@ -113,5 +114,7 @@ class JwtTokenVerifierTest { .claim("trustlevel", UserTestFactory.TRUST_LEVEL) .compact(); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java index b8f40ffe89f7d9a50fe2795378dbab1127eb3ec1..b36e4940cf5f0dc9f4a26f8ae7b052573dd3bc94 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SHA256withRSAAndMGF1SignatureAlgorithmTest.java @@ -26,6 +26,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Test; class SHA256withRSAAndMGF1SignatureAlgorithmTest { + @Test void shouldGetKey() { var algorithm = new SHA256withRSAAndMGF1SignatureAlgorithm(); @@ -60,4 +61,5 @@ class SHA256withRSAAndMGF1SignatureAlgorithmTest { assertThat(algorithm.getDigest()).isEqualTo(SHA256_ALGORITHM_ID); } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java index ac62a9da2d523997529fc7722e205813e6120d1f..6dbc3332ad4bde38b6223f76897077330f83ff3c 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlRedirectStrategyTest.java @@ -41,6 +41,7 @@ import org.springframework.security.saml2.provider.service.authentication.Saml2A @ExtendWith(MockitoExtension.class) class SamlRedirectStrategyTest { + private static final String URL = "http://test"; @Mock @@ -62,6 +63,7 @@ class SamlRedirectStrategyTest { @Nested class TestRedirect { + @BeforeEach void setup() { when(request.getContextPath()).thenReturn(URL); @@ -96,10 +98,12 @@ class SamlRedirectStrategyTest { verify(response).sendRedirect(matches(URL + "\\?code=*")); } + } @Nested class TestRedirectWithConfiguredUrl { + private final String CONFIGURED_REDIRECT_URL = "https://redirect.me"; @BeforeEach @@ -114,5 +118,7 @@ class SamlRedirectStrategyTest { verify(response).sendRedirect(CONFIGURED_REDIRECT_URL + "?code=abc"); } + } + } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java index f498d5a97bffb753474c414be1010cb92dc5814c..93585b4c090235ffbd48b40e71d039483e47c4d9 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SamlUrlAuthenticationSuccessHandlerTest.java @@ -44,6 +44,7 @@ import org.springframework.security.core.userdetails.UserDetailsService; @ExtendWith(MockitoExtension.class) class SamlUrlAuthenticationSuccessHandlerTest { + private static final String HTTP_TEST = "http://test"; private static final String REDIRECT_URL = "http://redirect"; @@ -54,6 +55,7 @@ class SamlUrlAuthenticationSuccessHandlerTest { @Nested class TestOnSuccess { + @Mock private HttpServletRequest request; @Mock @@ -83,10 +85,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { verify(handler).clearAuthenticationAttributes(any()); } + } @Nested class TestInit { + @Test void shouldGetRedirectUrl() { successHandler = new SamlUrlAuthenticationSuccessHandler(REDIRECT_URL, userService); @@ -104,10 +108,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { assertThat(url).isEqualTo("/"); } + } @Nested class TestWithAuthentication { + @Mock private Authentication authentication; @@ -133,10 +139,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { assertThatExceptionOfType(IllegalStateException.class).isThrownBy(() -> successHandler.determineTargetUrl(authentication)) .withMessage("Invalid role! User is missing role ROLE_USER"); } + } @Nested class TestClearLoginSession { + @Mock private HttpServletRequest request; @@ -161,10 +169,12 @@ class SamlUrlAuthenticationSuccessHandlerTest { verify(request, times(1)).getSession(false); verify(session).removeAttribute(any()); } + } @Nested class TestHandle { + @Mock private HttpServletRequest request; @Mock @@ -199,6 +209,7 @@ class SamlUrlAuthenticationSuccessHandlerTest { verify(response, never()).sendRedirect(anyString()); } + } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java index 395077c2c3afec293d50030690e71833bf1e79f6..67a3fe4324e5b5aaeff4897975baa652b3f7111a 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/SecurityProviderTest.java @@ -36,12 +36,14 @@ import org.opensaml.core.config.ConfigurationService; import org.opensaml.xmlsec.algorithm.AlgorithmRegistry; public class SecurityProviderTest { + private static final String BOUNCY_CASTLE_PROVIDER_ID = "BC"; private final SecurityProvider securityProvider = new SecurityProvider(); @Nested class TestAfterPropertiesSet { + @BeforeEach void init() { Security.removeProvider(BOUNCY_CASTLE_PROVIDER_ID); @@ -86,5 +88,7 @@ public class SecurityProviderTest { SHA256withRSAAndMGF1SignatureAlgorithm.class); } } + } + } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java index 219af424a39ab69a503186c94ddff007ab35be0e..a12042e77f7fb21f0c70d894555277d5176163a2 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/UserMapperTest.java @@ -20,6 +20,13 @@ package de.ozgcloud.antragsraum.security; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -28,100 +35,95 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.security.saml2.provider.service.authentication.DefaultSaml2AuthenticatedPrincipal; import org.springframework.security.saml2.provider.service.authentication.Saml2Authentication; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - @ExtendWith(MockitoExtension.class) class UserMapperTest { - static final String SAML_TOKEN = "token"; - @Mock - private Saml2Authentication auth; - Map<String, List<Object>> attributes; + static final String SAML_TOKEN = "token"; + @Mock + private Saml2Authentication auth; + + Map<String, List<Object>> attributes; + + @BeforeEach + void setup() { + when(auth.getSaml2Response()).thenReturn(SAML_TOKEN); - @BeforeEach - void setup() { - when(auth.getSaml2Response()).thenReturn(SAML_TOKEN); + attributes = new HashMap<>(); + attributes.put(UserMapper.NACHNAME_URN, List.of(UserTestFactory.LAST_NAME)); + attributes.put(UserMapper.VORNAME_URN, List.of(UserTestFactory.FIRST_NAME)); + attributes.put(UserMapper.POSTKORB_HANDLE_URN, List.of(UserTestFactory.POSTKORB_HANDLE)); + attributes.put(UserMapper.VERTRAUENSNIVEAU_URN, List.of(UserTestFactory.TRUST_LEVEL)); + attributes.put(UserMapper.BK2_URN, List.of(UserTestFactory.USER_NAME)); - attributes = new HashMap<>(); - attributes.put(UserMapper.NACHNAME_URN, List.of(UserTestFactory.LAST_NAME)); - attributes.put(UserMapper.VORNAME_URN, List.of(UserTestFactory.FIRST_NAME)); - attributes.put(UserMapper.POSTKORB_HANDLE_URN, List.of(UserTestFactory.POSTKORB_HANDLE)); - attributes.put(UserMapper.VERTRAUENSNIVEAU_URN, List.of(UserTestFactory.TRUST_LEVEL)); - attributes.put(UserMapper.BK2_URN, List.of(UserTestFactory.USER_NAME)); + var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); + when(auth.getPrincipal()).thenReturn(principal); + } - var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); - when(auth.getPrincipal()).thenReturn(principal); - } + @Test + void shouldGetUsername() { + var user = UserMapper.map(auth); - @Test - void shouldGetUsername() { - var user = UserMapper.map(auth); + assertThat(user.getUsername()).isEqualTo(UserTestFactory.USER_ID); + } - assertThat(user.getUsername()).isEqualTo(UserTestFactory.USER_ID); - } + @Test + void shouldGetFirstName() { + var user = UserMapper.map(auth); - @Test - void shouldGetFirstName() { - var user = UserMapper.map(auth); + assertThat(user.getFirstName()).isEqualTo(UserTestFactory.FIRST_NAME); + } - assertThat(user.getFirstName()).isEqualTo(UserTestFactory.FIRST_NAME); - } + @Test + void shouldGetLastName() { + var user = UserMapper.map(auth); - @Test - void shouldGetLastName() { - var user = UserMapper.map(auth); + assertThat(user.getLastName()).isEqualTo(UserTestFactory.LAST_NAME); + } - assertThat(user.getLastName()).isEqualTo(UserTestFactory.LAST_NAME); - } + @Test + void shouldGetPostkornHandle() { + var user = UserMapper.map(auth); - @Test - void shouldGetPostkornHandle() { - var user = UserMapper.map(auth); + assertThat(user.getPostkorbHandle()).isEqualTo(UserTestFactory.POSTKORB_HANDLE); + } - assertThat(user.getPostkorbHandle()).isEqualTo(UserTestFactory.POSTKORB_HANDLE); - } + @Test + void shouldGetTrustLevel() { + var user = UserMapper.map(auth); - @Test - void shouldGetTrustLevel() { - var user = UserMapper.map(auth); + assertThat(user.getTrustLevel()).isEqualTo(UserTestFactory.TRUST_LEVEL); + } - assertThat(user.getTrustLevel()).isEqualTo(UserTestFactory.TRUST_LEVEL); - } + @Test + void shouldGetSaml2Token() { + var user = UserMapper.map(auth); - @Test - void shouldGetSaml2Token() { - var user = UserMapper.map(auth); + assertThat(user.getSamlToken()).isEqualTo(SAML_TOKEN); + } - assertThat(user.getSamlToken()).isEqualTo(SAML_TOKEN); - } + @Test + void shouldGetUnknownAttributesEmpty() { + var user = UserMapper.map(auth); - @Test - void shouldGetUnknownAttributesEmpty() { - var user = UserMapper.map(auth); + assertThat(user.getUnknownAttributes()).isEmpty(); + } - assertThat(user.getUnknownAttributes()).isEmpty(); - } + @Test + void shouldGetUnknownAttributes() { + attributes.put("other", List.of("value")); + var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); + when(auth.getPrincipal()).thenReturn(principal); - @Test - void shouldGetUnknownAttributes() { - attributes.put("other", List.of("value")); - var principal = new DefaultSaml2AuthenticatedPrincipal(UserTestFactory.USER_ID, attributes); - when(auth.getPrincipal()).thenReturn(principal); + var user = UserMapper.map(auth); - var user = UserMapper.map(auth); + assertThat(user.getUnknownAttributes()).isNotEmpty().hasSize(1); + } - assertThat(user.getUnknownAttributes()).isNotEmpty().hasSize(1); - } + @Test + void shouldSetRefreshCode() { + var user = UserMapper.map(auth); - @Test - void shouldSetRefreshCode() { - var user = UserMapper.map(auth); + assertThat(user.getRefreshCode()).isNotEmpty(); + } - assertThat(user.getRefreshCode()).isNotEmpty(); - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java index 715c7b9af3cf2868b15ca14420aa5140194beef7..ce0085d74911400b7814e73a1b4131b51f21163d 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTest.java @@ -20,35 +20,37 @@ package de.ozgcloud.antragsraum.security; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.*; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.Date; -import static org.assertj.core.api.Assertions.*; +import org.junit.jupiter.api.Test; class UserTest { - @Test - void getAuthorities() { - var user = UserTestFactory.create(); + @Test + void getAuthorities() { + var user = UserTestFactory.create(); + + assertThat(user.getAuthorities()).isNotNull(); + assertThat(user.getAuthorities().iterator().next().getAuthority()).isEqualTo(DefaultRole.ROLE); + } - assertThat(user.getAuthorities()).isNotNull(); - assertThat(user.getAuthorities().iterator().next().getAuthority()).isEqualTo(DefaultRole.ROLE); - } + @Test + void credentialsShouldBeExpired() { + var expiredUser = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC))) + .build(); - @Test - void credentialsShouldBeExpired() { - var expiredUser = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().minusDays(1).toInstant(ZoneOffset.UTC))).build(); + assertThat(expiredUser.isCredentialsNonExpired()).isFalse(); + } - assertThat(expiredUser.isCredentialsNonExpired()).isFalse(); - } + @Test + void credentialsShouldNotBeExpired() { + var user = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().plusHours(1).toInstant(ZoneOffset.UTC))).build(); - @Test - void credentialsShouldNotBeExpired() { - var user = UserTestFactory.createBuilder().tokenExpiresAt(Date.from(LocalDateTime.now().plusHours(1).toInstant(ZoneOffset.UTC))).build(); + assertThat(user.isCredentialsNonExpired()).isTrue(); + } - assertThat(user.isCredentialsNonExpired()).isTrue(); - } } \ No newline at end of file diff --git a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java index 60a2d0bf1ae9d583c26e7385f6421235846ffb11..f4f7046fbd17d01d2d1500f020d09329c1c98507 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/security/UserTestFactory.java @@ -26,6 +26,7 @@ import java.util.Date; import java.util.UUID; public class UserTestFactory { + static final String USER_ID = UUID.randomUUID().toString(); static final String REFRESH_TOKEN = UUID.randomUUID().toString(); static final String FIRST_NAME = "Paul"; @@ -52,4 +53,5 @@ public class UserTestFactory { .tokenExpiresAt(TOKEN_EXPIRATION) .trustLevel(TRUST_LEVEL); } + }