package cz.nkp.differ.rest.auth;
import cz.nkp.differ.dao.UserDAOImpl;
import cz.nkp.differ.exceptions.UserDifferException;
import cz.nkp.differ.model.User;
import cz.nkp.differ.user.UserManager;
import java.util.Collections;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
/**
*
* @author xrosecky
*/
public class DBAuthenticationManager implements AuthenticationProvider, ApplicationContextAware {
@Autowired
private UserManager userManager;
public DBAuthenticationManager() {
}
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
String password = (String) auth.getCredentials();
String principal = (String) auth.getPrincipal();
try {
User user = userManager.attemptLogin(principal, password);
return new UsernamePasswordAuthenticationToken(
auth.getPrincipal(),
auth.getCredentials(),
Collections.singletonList(new SimpleGrantedAuthority("ROLE_USER")));
} catch (UserDifferException ude) {
throw new BadCredentialsException("Bad username or password.");
}
}
@Override
public boolean supports(Class<?> type) {
return type.equals(UsernamePasswordAuthenticationToken.class);
}
@Override
public void setApplicationContext(ApplicationContext appCtx) throws BeansException {
}
}