maia/.svn/pristine/86/8663757a942f34bdc0fe5249a9f...

440 lines
15 KiB
Plaintext
Executable File
Raw Permalink Blame History

/**
*
*/
package com.fp.frontend.controller.security;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import com.fp.dto.AbstractDataTransport;
import com.fp.dto.Request;
import com.fp.dto.Response;
import com.fp.dto.query.DtoQuery;
import com.fp.dto.query.SubQuery;
import com.fp.dto.save.DtoSave;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.pcustomer.PersonAddressController;
import com.fp.frontend.controller.pcustomer.lov.PersonLovController;
import com.fp.frontend.controller.pgeneral.gene.ParametersController;
import com.fp.frontend.controller.pgeneral.message.MessageTemplatesController;
import com.fp.frontend.controller.pgeneral.message.MessageTemplatesDescController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.frontend.utility.MsgControlArmas;
import com.fp.mail.Mail;
import com.fp.persistence.pcustomer.gene.TcustPersonAddress;
import com.fp.persistence.pcustomer.gene.TcustPersonDetail;
import com.fp.persistence.pgeneral.message.TgeneMessageTemplates;
import com.fp.persistence.pgeneral.message.TgeneMessageTemplatesDesc;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;
/**
* Clase controladora del bean TsafeUserDetail.
*
* @author Andres E. Carpio
* @version 2.1
*/
@ManagedBean
@ViewScoped
public class ChangePassPersonalController extends AbstractController<TsafeUserDetail> implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@ManagedProperty(value="#{personAddressController}")
private PersonAddressController personAddress;
// @ManagedProperty(value = "#{userProfileController}")
// private UserProfileController userprofile;
public ChangePassPersonalController() throws Exception {
super(TsafeUserDetail.class);
}
@PostConstruct
private void postconstruct() {
this.init();
// Inicializa autoconsulta
super.startQuery();
//Query
this.querydatabase();
}
/**
* Incializa el controlador, cuando se esta utilizando una pagina que utliza
* el controlador.
*/
private void init() {
try {
this.create();
this.lrecord = new ArrayList<>();
this.beanalias = "TSAFEUSERDETAIL";
} catch (Exception e) {
MessageHelper.setMessageError(e);
}
}
@Override
protected void querydatabase() {
try {
super.addFilter("pk.usercode", super.getLoginController().getRequest().getUser());
super.addFilterDateto();
super.addFilter("companycode", super.getLoginController().getRequest().getCompany().toString());
if (!this.existAtLeastOneFilterValue()) {
MessageHelper.setMessageError("msg_filterrequird");
return;
}
Request request = this.callerhelper.getRequest();
DtoQuery dto = super.getDtoQuery(false);
dto.setOrderby("t.pk.personcode"); // En en string van todos los campos de orden ("t.pk, t.nombre, t.cpais").
// subqueries
SubQuery subquery = new SubQuery("TgeneChannels", "description", "chanelname", "i.pk = t.channelcode");
dto.addSubQuery(subquery);
SubQuery subqueryName = new SubQuery("TcustPersonDetail", "name", "name",
" i.pk.personcode = t.pk.personcode"
+ " and i.pk.dateto = to_date('2999-12-31', 'YYYY-MM-DD')");
dto.addSubQuery(subqueryName);
SubQuery subquerya = new SubQuery("TgeneArea", "descripction", "areaname",
"i.pk.companycode = t.companycode and i.pk.areacode = t.areacode ");
dto.addSubQuery(subquerya);
HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
mtables.put(this.beanalias, dto); // permite adicionar mas de una tabla.
request.setQueryTables(mtables);
Response resp = this.callerhelper.executeQuery(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
this.record = new TsafeUserDetail();
MessageHelper.setMessageError(resp);
} else {
this.record = (TsafeUserDetail) resp.get(this.beanalias);
if (this.record != null) {
// this.userprofile.addFilter("pk.usercode", this.record.getPk().getUsercode());
// this.userprofile.query();
TcustPersonDetail tcpd = PersonLovController.find(this.record.getPk().getPersoncode().toString());
super.addField("personname", tcpd != null ? tcpd.getName() : "");
TcustPersonAddress mail = personAddress.findPersonaPorDireccionTipoCatalogo(this.record.getPk().getPersoncode().toString(), "3");
this.personAddress.setPersoncode(this.record.getPk().getPersoncode());
if(mail != null){
super.addField("email", mail.getAddress());
personAddress.setRecord(mail);
} else{
personAddress.create();
}
super.postQuery((AbstractDataTransport) resp.get(this.beanalias));
} else {
// this.userprofile.setLrecord(null);
this.create();
}
}
} catch (Throwable e) {
MessageHelper.setMessageError(e);
}
}
@Override
public void save() {
try {
if (this.validateUser()) {
MessageHelper.setMessageError("msg_userrequired");
return;
}
if (!this.passwordvalidate()) {
return;
}
String oldPass = this.callerhelper.getPasswordEncriptado((String) this.getMfilelds().get("oldpassword"));
String newPass = this.callerhelper.getPasswordEncriptado((String) this.getMfilelds().get("newpassword"));
this.record.put("newpassword", this.getMfilelds().get("newpassword"));
this.record.put("origination", newPass);
this.record.put("oldpassword", oldPass);
this.record.setPassword(newPass);
if (this.record.getChangepassword().compareTo("Y") == 0) {
this.record.setChangepassword("N");
}
this.update();
if(this.getMfilelds().get("email") != null){
this.personAddress.getRecord().setAddress(this.getMfilelds().get("email").toString());
}
this.personAddress.update();
Request request = this.callerhelper.getRequest();
HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
DtoSave dtoSavePassword = super.getDtoSave();
dtoSavePassword.setIsForm(true);
dtoSavePassword.setPosition(1);
if (!dtoSavePassword.pendingProcess()) {
MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_claveanteriornopuederserigualactual"));
return;
}
DtoSave dtosaveMail = personAddress.getDtoSave();
dtosaveMail.setPosition(2);
msave.put(this.beanalias, dtoSavePassword);
msave.put(this.personAddress.getBeanalias(), dtosaveMail);
request.setSaveTables(msave);
Response resp = this.callerhelper.executeSave(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
this.postCommit(resp);
this.envioCorreoCambio();
MessageHelper.setMessageInfo(resp);
confirmaChangePasswd();
} else {
MessageHelper.setMessageError(resp);
}
} catch (Throwable e) {
MessageHelper.setMessageError(e);
}
}
public void saveUser() {
try {
if (this.validateUser()) {
MessageHelper.setMessageError("msg_userrequired");
return;
}
if (!this.passwordvalidate()) {
return;
}
String oldPass = this.callerhelper.getPasswordEncriptado((String) this.getMfilelds().get("oldpassword"));
String newPass = this.callerhelper.getPasswordEncriptado((String) this.getMfilelds().get("newpassword"));
System.out.println("Nuevo Password "+newPass);
System.out.println("Nuevo Password "+(String) this.getMfilelds().get("newpassword"));
if (verificaPasswd((String) this.getMfilelds().get("newpassword"))) {
this.record.put("newpassword", this.getMfilelds().get("newpassword"));
this.record.put("origination", newPass);
this.record.put("oldpassword", oldPass);
this.record.setPassword(newPass);
if (this.record.getChangepassword().compareTo("Y") == 0) {
this.record.setChangepassword("N");
}
this.update();
if(this.getMfilelds().get("email") != null){
this.personAddress.getRecord().setAddress(this.getMfilelds().get("email").toString());
}
this.personAddress.update();
Request request = this.callerhelper.getRequest();
HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
DtoSave dtoSavePassword = super.getDtoSave();
dtoSavePassword.setIsForm(true);
dtoSavePassword.setPosition(1);
if (!dtoSavePassword.pendingProcess()) {
MessageHelper.setMessageError(MsgControlArmas.getProperty("msg_error_claveanteriornopuederserigualactual"));
return;
}
DtoSave dtosaveMail = personAddress.getDtoSave();
dtosaveMail.setPosition(2);
msave.put(this.beanalias, dtoSavePassword);
msave.put(this.personAddress.getBeanalias(), dtosaveMail);
request.setSaveTables(msave);
Response resp = this.callerhelper.executeSave(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
this.postCommit(resp);
this.envioCorreoCambio();
MessageHelper.setMessageInfo(resp);
confirmaChangePasswd();
RequestContext.getCurrentInstance().execute("PF('dialog').show()");
} else {
MessageHelper.setMessageError(resp);
}}else {
MessageHelper.setMessageError("LA CLAVE NO CUMPLE LAS POL<4F>TICAS DE SEGURIDAD");
System.out.println("La clave no cumple las politicas de seguridad nuevo Save");
}
} catch (Throwable e) {
MessageHelper.setMessageError(e);
}
}
/**
* Env&iacute;a el correo de cambio de email
* @throws Exception
*/
private void envioCorreoCambio() throws Exception{
Mail m = new Mail();
m.config(ParametersController.find("MAIL.FROM", "1").getTextvalue(),
ParametersController.find("MAIL.SMTP.SERVER", "1").getTextvalue(),
ParametersController.find("MAIL.SMTP.PORT", "1").getNumbervalue().intValue(),
ParametersController.find("MAIL.SMTP.USER", "1").getTextvalue(),
ParametersController.find("MAIL.SMTP.PASSWORD", "1").getTextvalue(),
Boolean.valueOf(ParametersController.find("MAIL.SMTP.AUTH", "1").getTextvalue()),
Boolean.valueOf(ParametersController.find("MAIL.SMTPS", "1").getTextvalue()));
m.setTo(personAddress.getRecord().getAddress());
MessageTemplatesController message = new MessageTemplatesController();
message.addFilter("pk", "62");
message.query();
if(message.getLrecord() != null && !message.getLrecord().isEmpty()){
TgeneMessageTemplates asunto = message.getLrecord().get(0);
MessageTemplatesDescController content = new MessageTemplatesDescController();
content.addFilter("pk.code", "62");
content.addFilter("pk.languagecode", "ES");
content.query();
if(content.getLrecord() != null && !content.getLrecord().isEmpty()){
TgeneMessageTemplatesDesc descripcionContenido = content.getLrecord().get(0);
//Velocity.init();
//VelocityContext context = new VelocityContext();
//context.put("nombreusuario", this.getLoginController().getRequest().getUser());
//context.put("clave", this.record.get("newpassword"));
m.setSubject(asunto.getDescription());
//StringWriter sw = new StringWriter();
String sw=descripcionContenido.getTemplate().replace("$clave", this.record.get("newpassword").toString());
sw=sw.replace("$nombreusuario", this.record.get("name")+"");
//Velocity.evaluate(context, sw, "", descripcionContenido.getTemplate());
m.setCont(sw.toString());
m.setContentMessageType("text/html");
m.send();
}
}
}
private boolean validateUser() {
boolean result = false;
if (this.record.getPk() == null) {
result = true;
}
return result;
}
@Override
public void postCommit(Response response) throws Exception {
super.postCommitGeneric(response, this.beanalias);
RequestContext.getCurrentInstance().execute("PF('dialogChangePassword').hide()");
}
// /**
// * Entrega el valor de: userprofile
// *
// * @return UserProfileController
// */
// public UserProfileController getUserprofile() {
// return userprofile;
// }
//
// /**
// * Fija el valor de: userprofile
// *
// * @param UserProfileController
// */
// public void setUserprofile(UserProfileController userprofile) {
// this.userprofile = userprofile;
// }
/**
* Valida que el usuario ingrese la contrasena y la contrasena de validacion
* y que las dos sean iguales.
*
* @return boolean
* @throws Exception
*/
private boolean passwordvalidate() throws Exception {
Object p = super.getFieldvalue("newpassword");
Object np = super.getFieldvalue("confirmpassword");
if ((p == null) || (np == null)) {
MessageHelper.setMessageError("msg_passwordrequired");
return false;
}
if (!p.equals(np)) {
MessageHelper.setMessageError("msg_passwordnomatch");
return false;
}
return true;
}
public PersonAddressController getPersonAddress() {
return personAddress;
}
public void setPersonAddress(PersonAddressController personAddress) {
this.personAddress = personAddress;
}
public void cancelChangePasswd() throws IOException {
//RequestContext.getCurrentInstance().execute("PF('dialog').show()");
logout();
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "/" + "login.xhtml");
}
public void confirmaChangePasswd() throws IOException {
logout();
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "/" + "login.xhtml");
}
public String logout() {
System.out.println("logout::cerrando session bean");
FacesContext fc = FacesContext.getCurrentInstance();
if (fc != null) {
fc.getExternalContext().invalidateSession();
}
return "/login?faces-redirect=true";
}
//Procedimiento Verifica Seguridad de la Clave del Usuario
private boolean verificaPasswd(String clave) {
boolean minuscula = false;
boolean mayuscula = false;
boolean numero = false;
boolean caracter = false;
//Hace un barrido de los caracteres ingresados en la clave
for (int i = 0; i < clave.length(); i++) {
//Verifica que el codigo ASCII ( letras minusculas)
if (clave.charAt(i) >= 97 && clave.charAt(i) <= 122) {
minuscula = true;
//Verifica que el codigo ASCII ( letras mayusculas)
} else if (clave.charAt(i) >= 65 && clave.charAt(i) <= 90) {
mayuscula = true;
//Verifica que el codigo ASCII ( numeros)
} else if (clave.charAt(i) >= 48 && clave.charAt(i) <= 57) {
numero = true;
//Si no cumple las condiciones anteriores es caracter especial
} else {
caracter = true;
}
}
if ((minuscula == true) && (mayuscula == true) && (numero == true) && (caracter == true)) {
return true;
} else {
return false;
}
}
}