Skip to content

Commit

Permalink
Fix tests, fix handling of security.enabled flag, clean up and organi…
Browse files Browse the repository at this point in the history
…ze new classes
  • Loading branch information
iyourshaw committed Feb 15, 2024
1 parent c275c0b commit d61d1dd
Show file tree
Hide file tree
Showing 16 changed files with 261 additions and 254 deletions.
6 changes: 5 additions & 1 deletion jpo-conflictvisualizer-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,11 @@
<configuration>
<enableProcessChecker>all</enableProcessChecker>
<shutdown>exit</shutdown>

<!-- Prevent JDK 21 warnings related to Mockito during tests. -->
<!-- See: https://github.com/mockito/mockito/issues/3037 -->
<argLine>
-XX:+EnableDynamicAgentLoading
</argLine>
</configuration>
<dependencies>
<dependency>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package us.dot.its.jpo.ode.api.keycloak;
package us.dot.its.jpo.ode.api.keycloak.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.security.oauth2.resource.OAuth2ResourceServerProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -10,6 +12,8 @@
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
import org.springframework.security.oauth2.jose.jws.SignatureAlgorithm;
import org.springframework.security.oauth2.jwt.*;
import us.dot.its.jpo.ode.api.keycloak.support.KeycloakGrantedAuthoritiesConverter;
import us.dot.its.jpo.ode.api.keycloak.support.KeycloakJwtAuthenticationConverter;

import java.util.ArrayList;
import java.util.Collection;
Expand All @@ -20,6 +24,9 @@
* Configures JWT handling (decoder and validator)
*/
@Configuration
@ConditionalOnProperty(prefix = "security",
name = "enabled",
havingValue = "true") // Allow disabling security
class JwtSecurityConfig {

/**
Expand Down Expand Up @@ -66,10 +73,12 @@ KeycloakJwtAuthenticationConverter keycloakJwtAuthenticationConverter(Converter<
return new KeycloakJwtAuthenticationConverter(authoritiesConverter);
}



@Bean
Converter<Jwt, Collection<GrantedAuthority>> keycloakGrantedAuthoritiesConverter(GrantedAuthoritiesMapper authoritiesMapper) {
// TODO Don't hard code this
String clientId = "conflictvisualizer-gui";
Converter<Jwt, Collection<GrantedAuthority>> keycloakGrantedAuthoritiesConverter(
GrantedAuthoritiesMapper authoritiesMapper,
@Value("${keycloak.resource}") String clientId) {
return new KeycloakGrantedAuthoritiesConverter(clientId, authoritiesMapper);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package us.dot.its.jpo.ode.api.keycloak.config;

import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.KeycloakBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class KeycloakAdminConfig {

@Value("${security.enabled:true}")
private boolean securityEnabled;

@Value("${keycloak.realm}")
private String realm;

@Value("${keycloak.resource}")
private String resource;

@Value("${keycloak.auth-server-url}")
private String authServer;

@Value("${keycloak_username}")
private String username;

@Value("${keycloak_password}")
private String password;

// Keycloak admin client used for email
@Bean
public Keycloak keyCloakBuilder() {
System.out.println("Auth Server: " + authServer);
System.out.println("Realm: " + realm);
System.out.println("Resource: " + resource);
return KeycloakBuilder.builder()
.serverUrl(authServer)
.grantType("password")
.realm("master")
.clientId("admin-cli")
.username(username)
.password(password)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package us.dot.its.jpo.ode.api.keycloak.config;

import lombok.RequiredArgsConstructor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.web.SecurityFilterChain;
import us.dot.its.jpo.ode.api.ConflictMonitorApiProperties;
import us.dot.its.jpo.ode.api.keycloak.support.CorsUtil;

import static org.springframework.security.config.Customizer.withDefaults;

/**
* Alternative keycloack configuration for when security is disabled
*/
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@ConditionalOnProperty(prefix = "security",
name = "enabled",
havingValue = "false") // Allow disabling security
public class KeycloakNoSecurityConfig {

final ConflictMonitorApiProperties properties;


@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {

System.out.println("Running without KeyCloak Authentication");
return httpSecurity
.sessionManagement(sm -> sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
.cors(corsConfigurer -> CorsUtil.configureCors(corsConfigurer, properties))
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(
request -> request.anyRequest().permitAll()
)
.anonymous(withDefaults())
.build();

}


}
Loading

0 comments on commit d61d1dd

Please sign in to comment.