UtenteChange.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.web.ctrlstat.servlet.utenti;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.utils.crypt.PasswordVerifier;
import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
import org.openspcoop2.web.ctrlstat.servlet.login.LoginSessionUtilities;
import org.openspcoop2.web.lib.mvc.Costanti;
import org.openspcoop2.web.lib.mvc.DataElement;
import org.openspcoop2.web.lib.mvc.ForwardParams;
import org.openspcoop2.web.lib.mvc.GeneralData;
import org.openspcoop2.web.lib.mvc.PageData;
import org.openspcoop2.web.lib.mvc.Parameter;
import org.openspcoop2.web.lib.mvc.ServletUtils;
import org.openspcoop2.web.lib.users.dao.InterfaceType;
import org.openspcoop2.web.lib.users.dao.User;
import org.openspcoop2.web.lib.users.dao.UserPassword;
/**
* changePw
*
* @author Andrea Poli (apoli@link.it)
* @author Stefano Corallo (corallo@link.it)
* @author Sandra Giangrandi (sandra@link.it)
* @author $Author$
* @version $Rev$, $Date$
*
*/
public final class UtenteChange extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession(true);
// Inizializzo PageData
PageData pd = new PageData();
GeneralHelper generalHelper = new GeneralHelper(session);
// Inizializzo GeneralData
GeneralData gd = generalHelper.initGeneralData(request);
String userLogin = ServletUtils.getUserLoginFromSession(session);
try {
UtentiHelper utentiHelper = new UtentiHelper(request, pd, session);
String newpw = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_NUOVA_PW);
String tipogui = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_GUI);
String changeGui = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_GUI);
String changepw = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_PW);
String changeModalita = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_MODALITA);
String tipoModalita = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA);
String changeSoggetto = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_SOGGETTO);
String idSoggetto = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_ID_SOGGETTO);
UtentiCore utentiCore = new UtentiCore();
User user = ServletUtils.getUserFromSession(request, session);
InterfaceType interfaceType = null;
if(tipogui==null) {
interfaceType = utentiCore.getUser(user.getLogin()).getInterfaceType();
}
else {
interfaceType = InterfaceType.convert(tipogui, true);
}
String oldProtocolloSelezionatoUtente = user.getProtocolloSelezionatoPddConsole();
String protocolloSelezionatoUtente = null;
String soggettoSelezionatoUtente = null;
boolean updateSoggetto = false;
if(changeGui == null && changeModalita==null && changeSoggetto == null) {
// modifica del profilo passando dalla form
User dbUser = utentiCore.getUser(userLogin);
if(tipoModalita == null) {
tipoModalita = dbUser.getProtocolloSelezionatoPddConsole();
}
// nessun profilo selezionato imposto all
if(tipoModalita == null) {
tipoModalita = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
if(idSoggetto == null) {
idSoggetto = dbUser.getSoggettoSelezionatoPddConsole();
}
// nessun soggetto selezionato imposto all
if(idSoggetto == null) {
idSoggetto = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
String postBackElementName = utentiHelper.getPostBackElementName();
if (postBackElementName != null &&
postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA)) { // cambio del profilo, reset del valore del soggetto
idSoggetto = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
}
} else {
// modifica del profilo utente passando dai link del menu'
if(idSoggetto == null) {
// prelevo il vecchio valore del protocollo
soggettoSelezionatoUtente = user.getSoggettoSelezionatoPddConsole();
} else {
if(!idSoggetto.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL)) {
soggettoSelezionatoUtente = idSoggetto; // il caso all viene gestito impostando il valore del soggetto selezionato = null;
}
}
if(tipoModalita == null) {
// prelevo il vecchio valore del protocollo
protocolloSelezionatoUtente = oldProtocolloSelezionatoUtente;
} else {
if(!tipoModalita.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL)) {
protocolloSelezionatoUtente = tipoModalita; // il caso ALL viene gestito impostando il valore del protocollo selezionato a null;
}
// reset soggetto scelto se cambia il protocollo
// 1. se ho messo tutti oppure se ho cambiato modalita'
if((protocolloSelezionatoUtente == null) || !(protocolloSelezionatoUtente.equals(oldProtocolloSelezionatoUtente))) {
soggettoSelezionatoUtente = null;
updateSoggetto = true;
}
}
}
// Preparo il menu
utentiHelper.makeMenu();
// setto la barra del titolo
if(changeGui == null && changeModalita==null && changeSoggetto == null) {
ServletUtils.setPageDataTitle(pd,
new Parameter(UtentiCostanti.LABEL_UTENTE, null));
}
User myS = null;
// Se idhid != null, modifico i dati della porta di dominio nel db
if(!utentiHelper.isEditModeInProgress()){
//se e' richiesta la modifica pwd allora controllo dati inseriti per modifica pwd
if(ServletUtils.isCheckBoxEnabled(changepw)){
// Controlli sui campi immessi
boolean isOk = utentiHelper.changePwCheckData();
if (!isOk) {
// preparo i campi
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
utentiHelper.addUtenteChangeToDati(dati, interfaceType, changepw, userLogin, tipoModalita, idSoggetto);
pd.setDati(dati);
ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
return ServletUtils.getStrutsForwardEditModeCheckError(mapping, UtentiCostanti.OBJECT_NAME_UTENTE, ForwardParams.CHANGE());
}else{
//tutto ok modifico pwd
// Cripto la nuova password
if (!"".equals(newpw)) {
newpw = utentiCore.getUtenzePasswordManager().crypt(newpw);
// Modifico i dati della pw nel db
myS = utentiCore.getUser(userLogin);
PasswordVerifier passwordVerifier = utentiCore.getUtenzePasswordVerifier();
// aggiornamento della password nello storico e nella data
if(passwordVerifier.isHistory()) {
List<UserPassword> precedentiPassword = myS.getPrecedentiPassword();
UserPassword userPassword = new UserPassword();
userPassword.setDatePassword(user.getLastUpdatePassword());
userPassword.setPassword(user.getPassword());
precedentiPassword.add(userPassword );
}
myS.setLastUpdatePassword(new Date());
myS.setPassword(newpw);
utentiCore.performUpdateOperation(userLogin, utentiHelper.smista(), myS);
//resetto changepwd
changepw=null;
}
}
}
User userFromSession = ServletUtils.getUserFromSession(request, session);
if(myS==null){
myS = utentiCore.getUser(userLogin);
}
// salvataggio form profilo utente
if(changeGui == null && changeModalita==null && changeSoggetto == null) {
// modifica profilo utente dalla form
myS.setProtocolloSelezionatoPddConsole(!tipoModalita.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? tipoModalita : null);
myS.setSoggettoSelezionatoPddConsole(!idSoggetto.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? idSoggetto : null);
myS.setInterfaceType(interfaceType);
utentiCore.performUpdateOperation(userLogin, utentiHelper.smista(), myS);
if(utentiCore.isUtenzeModificaProfiloUtenteDaFormAggiornaSessione()) {
LoginSessionUtilities.cleanLoginParametersSession(request, session);
ServletUtils.setUserIntoSession(request, session, myS); // update in sessione.
// utentiHelper.setTipoInterfaccia(myS.getInterfaceType()); // update InterfaceType
LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userLogin);
}
}else {
// nel caso di modifiche dai link in alto a dx, deve essere modificato solo l'oggetto in sessione
if(changeGui != null) {
userFromSession.setInterfaceType(interfaceType);
ServletUtils.setUserIntoSession(request, session, userFromSession); // update in sessione.
LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userFromSession);
if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
myS.setInterfaceType(interfaceType);
utentiCore.performUpdateOperation(userLogin, utentiHelper.smista(), myS);
}
} else if(changeModalita != null) {
userFromSession.setProtocolloSelezionatoPddConsole(protocolloSelezionatoUtente);
if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
myS.setProtocolloSelezionatoPddConsole(protocolloSelezionatoUtente);
utentiCore.salvaModalitaUserPddConsole(myS.getLogin(), protocolloSelezionatoUtente);
}
if(updateSoggetto) {
userFromSession.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
myS.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
utentiCore.salvaSoggettoOperativoUserPddConsole(myS.getLogin(), soggettoSelezionatoUtente);
}
}
ServletUtils.setUserIntoSession(request, session, userFromSession); // update in sessione.
} else if(changeSoggetto != null) {
userFromSession.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
ServletUtils.setUserIntoSession(request, session, userFromSession); // update in sessione.
if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
myS.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
utentiCore.salvaSoggettoOperativoUserPddConsole(myS.getLogin(), soggettoSelezionatoUtente);
}
}
// vecchio comportamento, si aggiornava sia DB che sessione
if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
LoginSessionUtilities.cleanLoginParametersSession(request, session);
ServletUtils.setUserIntoSession(request, session, myS); // update in sessione.
// utentiHelper.setTipoInterfaccia(myS.getInterfaceType()); // update InterfaceType
LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userLogin);
}
}
pd.setMessage("Modifiche effettuate con successo", Costanti.MESSAGE_TYPE_INFO);
}//fine modifica user interface
// se ho cliccato sul link cambia modalita interfaccia
if(changeGui != null) {
// provengo dal link presente nell'header della pagina a dx.
pd.setMessage("Passaggio all'interfaccia '"+interfaceType.toString().toLowerCase()+"' effettuato con successo.", Costanti.MESSAGE_TYPE_INFO_SINTETICO);
pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
} else if(changeModalita != null) { // clic sul link cambia modalita gateway
// messaggio di cambiamento del protocollo:
List<String> protocolli = utentiCore.getProtocolli(request, session);
StringBuilder sbProtocolli = new StringBuilder("<ul>");
for (String protocollo : protocolli) {
String descrizioneProtocollo = utentiHelper.getDescrizioneProtocollo(protocollo);
String webSiteProtocollo = utentiHelper.getWebSiteProtocollo(protocollo);
String labelProtocollo = utentiHelper.getLabelProtocollo(protocollo);
sbProtocolli.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
sbProtocolli.append("<li style=\"list-style-type:disc; margin-left:12px;\">");
sbProtocolli.append("<p><i>");
String linkSito = "<a href=\""+webSiteProtocollo+"\" target=\"_blank\">"+labelProtocollo+"</a>";
sbProtocolli.append(linkSito);
sbProtocolli.append("</i></p>");
sbProtocolli.append("<p>");
sbProtocolli.append(descrizioneProtocollo);
sbProtocolli.append("</p>");
sbProtocolli.append("</li>");
}
sbProtocolli.append("</ul>");
String pdMsg = "";
String pdMsgTitle= "Passaggio al "+org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLO_DI_HTML_ESCAPE+" selezionato effettuato con successo.";
if(protocolloSelezionatoUtente == null) {
pdMsg = "<p>"+org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLI_COMPACT+" disponibili:<p/>" + sbProtocolli.toString();
} else {
pdMsg = "<p>"+org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLO_COMPACT+" attuale:<p/>" + sbProtocolli.toString();
}
pd.setMessage(pdMsg, pdMsgTitle, Costanti.MESSAGE_TYPE_INFO);
pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
} else if(changeSoggetto != null) { // clic sul link cambia soggetto
String pdMsg = "";
String pdMsgTitle= "Passaggio al "+UtentiCostanti.LABEL_PARAMETRO_SOGGETTO_OPERATIVO+" selezionato effettuato con successo.";
if(soggettoSelezionatoUtente == null) {
pdMsg = "<p>"+UtentiCostanti.LABEL_PARAMETRO_SOGGETTI_COMPACT+" disponibili: " + "Tutti";
} else {
IDSoggetto idSoggettoOperativo = utentiCore.convertSoggettoSelezionatoToID(soggettoSelezionatoUtente);
pdMsg = "<p>"+UtentiCostanti.LABEL_PARAMETRO_SOGGETTO_COMPACT+" attuale: " + utentiHelper.getLabelNomeSoggetto(idSoggettoOperativo);
}
pd.setMessage(pdMsg, pdMsgTitle, Costanti.MESSAGE_TYPE_INFO);
pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
}else {
// provengo dalla maschera di modifica utente
// preparo i campi
List<DataElement> dati = new ArrayList<>();
dati.add(ServletUtils.getDataElementForEditModeFinished());
utentiHelper.addUtenteChangeToDati(dati, interfaceType, changepw, userLogin, tipoModalita,idSoggetto);
pd.setDati(dati);
}
// Reinit general data per aggiornare lo stato della barra dell'header a dx.
gd = generalHelper.initGeneralData(request);
// Refresh Menu' Preparo il menu
utentiHelper.makeMenu();
ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
return ServletUtils.getStrutsForwardEditModeFinished(mapping, UtentiCostanti.OBJECT_NAME_UTENTE, ForwardParams.CHANGE());
} catch (Exception e) {
return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
}
}
}