package com.sungardas.enhancedsnapshots.security; import com.sungardas.enhancedsnapshots.aws.dynamodb.Roles; import com.sungardas.enhancedsnapshots.dto.UserDto; import com.sungardas.enhancedsnapshots.service.UserService; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.saml.SAMLCredential; import org.springframework.security.saml.userdetails.SAMLUserDetailsService; import java.util.Arrays; public class SamlUserDetails implements SAMLUserDetailsService { private UserService userService; private static final String ROLE_PREFIX = "ROLE_"; @Override public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException { com.sungardas.enhancedsnapshots.aws.dynamodb.model.User user = userService.getUser(credential.getNameID().getValue().toLowerCase()); if (user == null) { String email = credential.getNameID().getValue().toLowerCase(); UserDto userDto = new UserDto(); userDto.setEmail(email); userDto.setRole(Roles.USER.getName()); userService.createUser(userDto, ""); user = userService.getUser(email); } return new User(credential.getNameID().getValue(), "", Arrays.asList(new SimpleGrantedAuthority(ROLE_PREFIX + user.getRole().toUpperCase()))); } public void setUserService(UserService userService) { this.userService = userService; } }