package eu.dnetlib.uoaauthorizationlibrary.security; import eu.dnetlib.uoaauthorizationlibrary.utils.AuthorizationUtils; import eu.dnetlib.uoaauthorizationlibrary.utils.UserInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @Service public class UserDetailsServiceImpl implements UserDetailsService { private AuthorizationUtils utils; @Autowired public UserDetailsServiceImpl(AuthorizationUtils utils) { this.utils = utils; } private List getAuthorities(List roles) { List authorities = new ArrayList<>(); for(String role : roles) { authorities.add(new SimpleGrantedAuthority(role)); } return authorities; } @Override public UserDetails loadUserByUsername(String token) throws UsernameNotFoundException { final UserInfo user = utils.getUserInfo(token); if (user == null) { throw new UsernameNotFoundException("invalid token: " + token); } return org.springframework.security.core.userdetails.User .withUsername(user.getEmail()).password("") .authorities(getAuthorities(user.getRoles())) .accountExpired(false) .accountLocked(false) .credentialsExpired(false) .disabled(false) .build(); } }