This is the codeAbility Sharing Platform! Learn more about the codeAbility Sharing Platform.

Skip to content
Snippets Groups Projects
Commit eaac6cba authored by Michael Breu's avatar Michael Breu :speech_balloon:
Browse files

Minor refactoring

parent ffceec5f
Branches
Tags
1 merge request!17Initial Merge to Prepare Release 1.0.0
......@@ -4,16 +4,10 @@ import static org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VAL
import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.event.EventListener;
import org.springframework.core.convert.converter.Converter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
......@@ -21,59 +15,44 @@ import org.springframework.http.MediaType;
import org.springframework.http.RequestEntity;
import org.springframework.security.authentication.AbstractAuthenticationToken;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.event.AbstractAuthenticationEvent;
import org.springframework.security.authentication.event.AuthenticationSuccessEvent;
import org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken;
import org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient;
import org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient;
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
import org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequestEntityConverter;
import org.springframework.security.oauth2.client.oidc.authentication.OidcIdTokenDecoderFactory;
import org.springframework.security.oauth2.client.registration.ClientRegistration;
import org.springframework.security.oauth2.core.DelegatingOAuth2TokenValidator;
import org.springframework.security.oauth2.core.OAuth2TokenValidator;
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationExchange;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.oauth2.core.endpoint.PkceParameterNames;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.oauth2.jwt.Jwt;
import org.springframework.security.oauth2.jwt.JwtDecoder;
import org.springframework.security.oauth2.jwt.JwtDecoderFactory;
import org.springframework.security.oauth2.jwt.JwtDecoders;
import org.springframework.security.oauth2.jwt.JwtValidators;
import org.springframework.security.oauth2.jwt.MappedJwtClaimSetConverter;
import org.springframework.security.oauth2.jwt.NimbusJwtDecoder;
import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken;
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
import org.springframework.security.web.csrf.CsrfFilter;
import org.springframework.security.web.header.writers.ReferrerPolicyHeaderWriter;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.filter.CorsFilter;
import org.springframework.web.util.UriComponentsBuilder;
import org.zalando.problem.spring.web.advice.security.SecurityProblemSupport;
import at.ac.uibk.gitsearch.domain.User;
import at.ac.uibk.gitsearch.security.AuthoritiesConstants;
import at.ac.uibk.gitsearch.security.jwt.JWTConfigurer;
import at.ac.uibk.gitsearch.security.jwt.TokenProvider;
import at.ac.uibk.gitsearch.security.oauth2.UserDetailsFetcher;
import at.ac.uibk.gitsearch.service.UserService;
import at.ac.uibk.gitsearch.service.dto.UserDTO;
import at.ac.uibk.gitsearch.service.mapper.UserMapper;
import io.github.jhipster.config.JHipsterProperties;
@EnableWebSecurity
......@@ -100,72 +79,6 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
this.jHipsterProperties = jHipsterProperties;
}
// @Autowired
// public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// auth
// .inMemoryAuthentication()
// .withUser("user").password("password").roles("USER");
// }
/**
* inserts a new authenticated user into Database
* @author Michael Breu
*
*/
@Service
public static class OAuth2AuthenticationSuccessEventHandler{
private final Set<String> defaultAuthorities = new HashSet<String>();
@Autowired
private UserDetailsFetcher userDetailsFetcher;
@Autowired
private UserMapper userMapper;
public OAuth2AuthenticationSuccessEventHandler() {
defaultAuthorities.add(AuthoritiesConstants.USER);
}
@Autowired
private UserService userService;
@EventListener({AuthenticationSuccessEvent.class, InteractiveAuthenticationSuccessEvent.class})
public void processAuthenticationSuccessEvent(AbstractAuthenticationEvent e) {
if (!(e.getAuthentication() instanceof OAuth2LoginAuthenticationToken)) {
return;
}
Object principal = e.getAuthentication().getPrincipal();
if (principal instanceof OidcUser) {
OidcUser oidcUser = (OidcUser) principal;
String email = oidcUser.getEmail();
Optional<User> userO = userService.getUserWithAuthoritiesByEmail(email);
if(userO.isPresent()) {
UserDTO userDto = userMapper.userToUserDTO(userO.get());
boolean hasChanged = userDetailsFetcher.updateUserDetails(userDto, oidcUser, (OAuth2LoginAuthenticationToken) e.getAuthentication());
if (hasChanged)
userService.updateUser(userDto);
} else {
UserDTO u = new UserDTO();
u.setFirstName(oidcUser.getGivenName());
u.setLastName(oidcUser.getFamilyName());
u.setLogin(email);
u.setActivated(true);
u.setLastModifiedBy("system");
u.setCreatedDate(java.time.Instant.now());
u.setAuthorities(defaultAuthorities);
u.setEmail(oidcUser.getEmail());
@SuppressWarnings("unused")
boolean hasChanged = userDetailsFetcher.updateUserDetails(u, oidcUser, (OAuth2LoginAuthenticationToken) e.getAuthentication());
userService.createUser(u);
}
}
}
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
......@@ -313,6 +226,11 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
}
/**
* corrects UTF-8 Handling.
* @author Michael Breu
*
*/
public static class CustomOAuth2AuthorizationCodeGrantRequestEntityConverter extends OAuth2AuthorizationCodeGrantRequestEntityConverter {
/**
......
package at.ac.uibk.gitsearch.security.oauth2;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.security.authentication.event.AbstractAuthenticationEvent;
import org.springframework.security.authentication.event.AuthenticationSuccessEvent;
import org.springframework.security.authentication.event.InteractiveAuthenticationSuccessEvent;
import org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken;
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.stereotype.Service;
import at.ac.uibk.gitsearch.domain.User;
import at.ac.uibk.gitsearch.security.AuthoritiesConstants;
import at.ac.uibk.gitsearch.service.UserService;
import at.ac.uibk.gitsearch.service.dto.UserDTO;
import at.ac.uibk.gitsearch.service.mapper.UserMapper;
/**
* inserts a new authenticated user into Database
* @author Michael Breu
*
*/
@Service
public class OAuth2AuthenticationSuccessEventHandler{
private final Set<String> defaultAuthorities = new HashSet<String>();
@Autowired
private UserDetailsFetcher userDetailsFetcher;
@Autowired
private UserMapper userMapper;
public OAuth2AuthenticationSuccessEventHandler() {
defaultAuthorities.add(AuthoritiesConstants.USER);
}
@Autowired
private UserService userService;
@EventListener({AuthenticationSuccessEvent.class, InteractiveAuthenticationSuccessEvent.class})
public void processAuthenticationSuccessEvent(AbstractAuthenticationEvent e) {
if (!(e.getAuthentication() instanceof OAuth2LoginAuthenticationToken)) {
return;
}
Object principal = e.getAuthentication().getPrincipal();
if (principal instanceof OidcUser) {
OidcUser oidcUser = (OidcUser) principal;
String email = oidcUser.getEmail();
Optional<User> userO = userService.getUserWithAuthoritiesByEmail(email);
if(userO.isPresent()) {
UserDTO userDto = userMapper.userToUserDTO(userO.get());
boolean hasChanged = userDetailsFetcher.updateUserDetails(userDto, oidcUser, (OAuth2LoginAuthenticationToken) e.getAuthentication());
if (hasChanged)
userService.updateUser(userDto);
} else {
UserDTO u = new UserDTO();
u.setFirstName(oidcUser.getGivenName());
u.setLastName(oidcUser.getFamilyName());
u.setLogin(email);
u.setActivated(true);
u.setLastModifiedBy("system");
u.setCreatedDate(java.time.Instant.now());
u.setAuthorities(defaultAuthorities);
u.setEmail(oidcUser.getEmail());
@SuppressWarnings("unused")
boolean hasChanged = userDetailsFetcher.updateUserDetails(u, oidcUser, (OAuth2LoginAuthenticationToken) e.getAuthentication());
userService.createUser(u);
}
}
}
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment