Spaces:
Runtime error
Runtime error
Replace with working da-autodelete code and fix build configuration for HF Spaces - Complete microservice with all dependencies, multi-stage Dockerfile, and clean repository structure
6a6be6d
| // This file was added to provide test security configuration for the da-autodelete service. | |
| // Reason: Needed for unit and integration tests to work with Spring Security and JWT authentication. | |
| // This configuration mocks JWT authentication for testing purposes. | |
| package com.dalab.autodelete.config; | |
| import static org.mockito.Mockito.*; | |
| import org.springframework.boot.test.context.TestConfiguration; | |
| import org.springframework.context.annotation.Bean; | |
| import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; | |
| import org.springframework.security.config.annotation.web.builders.HttpSecurity; | |
| import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; | |
| import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; | |
| import org.springframework.security.config.http.SessionCreationPolicy; | |
| import org.springframework.security.oauth2.jwt.JwtDecoder; | |
| import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter; | |
| import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter; | |
| import org.springframework.security.web.SecurityFilterChain; | |
| /** | |
| * Test security configuration for da-autodelete service tests. | |
| * Enables method-level security to test @PreAuthorize annotations. | |
| * Uses mocked JWT decoder for testing purposes. | |
| */ | |
| public class TestSecurityConfiguration { | |
| public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { | |
| http | |
| .csrf(AbstractHttpConfigurer::disable) | |
| .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) | |
| .authorizeHttpRequests(authz -> authz | |
| .requestMatchers("/actuator/health", "/actuator/info").permitAll() | |
| .requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll() | |
| .requestMatchers("/api/**").authenticated() | |
| .anyRequest().authenticated() | |
| ) | |
| .oauth2ResourceServer(oauth2 -> oauth2 | |
| .jwt(jwt -> jwt | |
| .decoder(jwtDecoder()) | |
| .jwtAuthenticationConverter(jwtAuthenticationConverter()) | |
| ) | |
| ); | |
| return http.build(); | |
| } | |
| public JwtDecoder jwtDecoder() { | |
| return mock(JwtDecoder.class); | |
| } | |
| public JwtAuthenticationConverter jwtAuthenticationConverter() { | |
| JwtGrantedAuthoritiesConverter grantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter(); | |
| grantedAuthoritiesConverter.setAuthoritiesClaimName("roles"); | |
| grantedAuthoritiesConverter.setAuthorityPrefix(""); // Remove the default "SCOPE_" prefix | |
| JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter(); | |
| jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(grantedAuthoritiesConverter); | |
| return jwtAuthenticationConverter; | |
| } | |
| } |