/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.evasion.plugin.security;
import com.evasion.entity.security.User;
import com.evasion.exception.PersistenceViolationException;
import java.util.HashSet;
import javax.persistence.EntityManager;
import org.springframework.security.userdetails.UserDetails;
/**
*
* @author sebastien.glon
*/
public class UserDetailsService {
public static final String USERNAME_ADMIN = "admin";
private EntityManager em;
public UserDetailsService(EntityManager em) {
this.em = em;
}
public final UserDetails loadUserByUsername(String login)
throws PersistenceViolationException {
try {
User account = findUserByUserName(login);
em.flush();
if (account != null) {
return new UserDetailsAdapter(account);
} else {
return null;
}
} catch (Exception e) {
throw new PersistenceViolationException("Erreur lors de l'identification du login '" + login + "' en persistence");
}
}
public User findUserByUserName(String u) {
User user;
if (u.equals(USERNAME_ADMIN)) {
user = initAdminUser();
} else {
user = em.find(User.class, u);
}
return user;
}
/**
* Initialise de compte administrateur si non present en base.
* @return
*/
public User initAdminUser() {
User user = em.find(User.class, USERNAME_ADMIN);
if (user == null || user.getPassword() == null ||
user.getPassword().isEmpty()) {
HashSet<String> auth = new HashSet<String>();
auth.add("ROLE_SUPERADMIN");
auth.add("ROLE_ADMIN");
user = new User();
user.setUsername(USERNAME_ADMIN);
user.setEnabled(true);
user.setPassword(USERNAME_ADMIN + USERNAME_ADMIN);
user.setAuthorities(auth);
UserDetailsAdapter.encodPassword(user);
em.merge(user);
}
return user;
}
}