CustomInMemoryIdentityStore.java
Last updated
Last updated
public CredentialValidationResult validate(Credential credential) {
UsernamePasswordCredential login = (UsernamePasswordCredential) credential;import com.avbravo.jmoordb.configuration.JmoordbContext;
import com.avbravo.jmoordbutils.JsfUtil;
import com.avbravo.store.util.ResourcesFiles;
import com.avbravo.storeejb.entity.Almacen;
import com.avbravo.storeejb.entity.Rol;
import com.avbravo.storeejb.entity.Usuario;
import com.avbravo.storeejb.repository.UsuarioRepository;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.security.enterprise.credential.Credential;
import javax.security.enterprise.credential.UsernamePasswordCredential;
import javax.security.enterprise.identitystore.CredentialValidationResult;
import javax.security.enterprise.identitystore.IdentityStore;
/**
*
* @author avbravo
*/
@ApplicationScoped
public class CustomInMemoryIdentityStore implements IdentityStore {
private String rolValue = "";
@Inject
ResourcesFiles rf;
@Inject
UsuarioRepository usuarioRepository;
@Override
public CredentialValidationResult validate(Credential credential) {
UsernamePasswordCredential login = (UsernamePasswordCredential) credential;
//Esta adaptado para guardar el GRUPO DEL USUARIO la validacion se hizo en LoginController
String username = login.getCaller();
String password = login.getPasswordAsString();
if (!isValidUser(username, password)) {
return CredentialValidationResult.NOT_VALIDATED_RESULT;
}
return new CredentialValidationResult(rolValue, new HashSet<>(Arrays.asList(rolValue)));
}
// <editor-fold defaultstate="collapsed" desc="metodo()">
private Boolean isValidUser(String username, String password) {
try {
if (!isValidData(username, password)) {
return false;
}
Usuario usuario = new Usuario();
usuario.setUsername(username);
Almacen almacen = (Almacen) JmoordbContext.get("_login_almacen");
Rol rol = (Rol) JmoordbContext.get("_login_rol");
//Asigna el rol del usuario
this.rolValue = rol.getIdrol();
//-----------------
usuario.setUsername(username);
Optional<Usuario> optional = usuarioRepository.findById(usuario);
if (!optional.isPresent()) {
JsfUtil.warningMessage(rf.getAppMessage("login.usernamenotvalid"));
return false;
} else {
Usuario u2 = optional.get();
usuario = u2;
//guarda el usuario logeado
JmoordbContext.put("_userLogged", usuario);
if (!JsfUtil.desencriptar(usuario.getPassword()).equals(password)) {
JsfUtil.successMessage(rf.getAppMessage("login.passwordnotvalid"));
return false;
}
if (usuario.getActivo().equals("no")) {
JsfUtil.successMessage(rf.getAppMessage("login.usuarioinactivo"));
return false;
}
//Valida los roles del usuario si coincide con el seleccionado
Boolean foundalmacen = false;
for (Almacen a : usuario.getAlmacen()) {
if (almacen.getIdalmacen().equals(a.getIdalmacen())) {
foundalmacen = true;
}
}
if (!foundalmacen) {
JsfUtil.successMessage(rf.getMessage("warning.noestaasignadoaesealmacen") + " " + rol.getIdrol());
return false;
}
//Valida los roles del usuario si coincide con el seleccionado
Boolean foundrol = false;
for (Rol r : usuario.getRol()) {
if (rol.getIdrol().equals(r.getIdrol())) {
foundrol = true;
}
}
if (!foundrol) {
JsfUtil.successMessage(rf.getAppMessage("login.notienerolenelsistema") + " " + rol.getIdrol());
return false;
}
return true;
}
} catch (Exception e) {
}
return false;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="Boolean isValidData(String username, String password)">
private Boolean isValidData(String username, String password) {
try {
if (username.isEmpty() || username.equals("") || username == null) {
JsfUtil.successMessage(rf.getAppMessage("warning.usernameisempty"));
return false;
}
if (password.isEmpty() || password.equals("") || password == null) {
JsfUtil.successMessage(rf.getAppMessage("warning.passwordisempty"));
return false;
}
return true;
} catch (Exception e) {
}
return false;
}
// </editor-fold>
}