UtenteChange.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */


  20. package org.openspcoop2.web.ctrlstat.servlet.utenti;

  21. import java.util.ArrayList;
  22. import java.util.Date;
  23. import java.util.List;

  24. import javax.servlet.http.HttpServletRequest;
  25. import javax.servlet.http.HttpServletResponse;
  26. import javax.servlet.http.HttpSession;

  27. import org.apache.struts.action.Action;
  28. import org.apache.struts.action.ActionForm;
  29. import org.apache.struts.action.ActionForward;
  30. import org.apache.struts.action.ActionMapping;
  31. import org.openspcoop2.core.id.IDSoggetto;
  32. import org.openspcoop2.utils.crypt.PasswordVerifier;
  33. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  34. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  35. import org.openspcoop2.web.ctrlstat.servlet.login.LoginSessionUtilities;
  36. import org.openspcoop2.web.lib.mvc.Costanti;
  37. import org.openspcoop2.web.lib.mvc.DataElement;
  38. import org.openspcoop2.web.lib.mvc.ForwardParams;
  39. import org.openspcoop2.web.lib.mvc.GeneralData;
  40. import org.openspcoop2.web.lib.mvc.PageData;
  41. import org.openspcoop2.web.lib.mvc.Parameter;
  42. import org.openspcoop2.web.lib.mvc.ServletUtils;
  43. import org.openspcoop2.web.lib.users.dao.InterfaceType;
  44. import org.openspcoop2.web.lib.users.dao.User;
  45. import org.openspcoop2.web.lib.users.dao.UserPassword;

  46. /**
  47.  * changePw
  48.  *
  49.  * @author Andrea Poli (apoli@link.it)
  50.  * @author Stefano Corallo (corallo@link.it)
  51.  * @author Sandra Giangrandi (sandra@link.it)
  52.  * @author $Author$
  53.  * @version $Rev$, $Date$
  54.  *
  55.  */
  56. public final class UtenteChange extends Action {

  57.     @Override
  58.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

  59.         HttpSession session = request.getSession(true);

  60.         // Inizializzo PageData
  61.         PageData pd = new PageData();

  62.         GeneralHelper generalHelper = new GeneralHelper(session);

  63.         // Inizializzo GeneralData
  64.         GeneralData gd = generalHelper.initGeneralData(request);

  65.         String userLogin = ServletUtils.getUserLoginFromSession(session);


  66.         try {
  67.             UtentiHelper utentiHelper = new UtentiHelper(request, pd, session);

  68.             String newpw = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_NUOVA_PW);
  69.             String tipogui = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_GUI);
  70.             String changeGui = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_GUI);
  71.             String changepw = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_PW);
  72.             String changeModalita = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_MODALITA);
  73.             String tipoModalita = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA);
  74.             String changeSoggetto = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_CHANGE_SOGGETTO);
  75.             String idSoggetto = utentiHelper.getParameter(UtentiCostanti.PARAMETRO_UTENTE_ID_SOGGETTO);

  76.             UtentiCore utentiCore = new UtentiCore();

  77.             User user = ServletUtils.getUserFromSession(request, session);

  78.             InterfaceType interfaceType = null;
  79.             if(tipogui==null) {
  80.                 interfaceType = utentiCore.getUser(user.getLogin()).getInterfaceType();
  81.             }
  82.             else {
  83.                 interfaceType = InterfaceType.convert(tipogui, true);
  84.             }

  85.             String oldProtocolloSelezionatoUtente = user.getProtocolloSelezionatoPddConsole();
  86.             String protocolloSelezionatoUtente = null;
  87.             String soggettoSelezionatoUtente = null;
  88.             boolean updateSoggetto = false;

  89.             if(changeGui == null && changeModalita==null && changeSoggetto == null) {
  90.                 // modifica del profilo passando dalla form

  91.                 User dbUser = utentiCore.getUser(userLogin);

  92.                 if(tipoModalita == null) {
  93.                     tipoModalita =  dbUser.getProtocolloSelezionatoPddConsole();
  94.                 }

  95.                 // nessun profilo selezionato imposto all
  96.                 if(tipoModalita == null) {
  97.                     tipoModalita = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  98.                 }


  99.                 if(idSoggetto == null) {
  100.                     idSoggetto = dbUser.getSoggettoSelezionatoPddConsole();
  101.                 }

  102.                 // nessun soggetto selezionato imposto all
  103.                 if(idSoggetto == null) {
  104.                     idSoggetto = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  105.                 }

  106.                 String postBackElementName = utentiHelper.getPostBackElementName();

  107.                 if (postBackElementName != null &&
  108.                     postBackElementName.equals(UtentiCostanti.PARAMETRO_UTENTE_TIPO_MODALITA)) { // cambio del profilo, reset del valore del soggetto
  109.                     idSoggetto = UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL;
  110.                 }
  111.             } else {
  112.                 // modifica del profilo utente passando dai link del menu'
  113.                 if(idSoggetto == null) {
  114.                     // prelevo il vecchio valore del protocollo
  115.                     soggettoSelezionatoUtente = user.getSoggettoSelezionatoPddConsole();
  116.                 } else {
  117.                    
  118.                     if(!idSoggetto.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL)) {
  119.                         soggettoSelezionatoUtente  = idSoggetto; // il caso all viene gestito impostando il valore del soggetto selezionato = null;
  120.                     }
  121.                 }

  122.                 if(tipoModalita == null) {
  123.                     // prelevo il vecchio valore del protocollo
  124.                     protocolloSelezionatoUtente = oldProtocolloSelezionatoUtente;
  125.                 } else {
  126.                    
  127.                     if(!tipoModalita.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL)) {
  128.                         protocolloSelezionatoUtente  = tipoModalita; // il caso ALL viene gestito impostando il valore del protocollo selezionato a null;
  129.                     }

  130.                     //  reset soggetto scelto se cambia il protocollo
  131.                     // 1. se ho messo tutti oppure se ho cambiato modalita'
  132.                     if((protocolloSelezionatoUtente == null) || !(protocolloSelezionatoUtente.equals(oldProtocolloSelezionatoUtente))) {
  133.                         soggettoSelezionatoUtente = null;
  134.                         updateSoggetto = true;
  135.                     }
  136.                 }
  137.             }
  138.             // Preparo il menu
  139.             utentiHelper.makeMenu();

  140.             // setto la barra del titolo
  141.             if(changeGui == null && changeModalita==null && changeSoggetto == null) {
  142.                 ServletUtils.setPageDataTitle(pd,
  143.                         new Parameter(UtentiCostanti.LABEL_UTENTE, null));
  144.             }

  145.             User myS = null;
  146.             // Se idhid != null, modifico i dati della porta di dominio nel db
  147.             if(!utentiHelper.isEditModeInProgress()){

  148.                 //se e' richiesta la modifica pwd allora controllo dati inseriti per modifica pwd

  149.                 if(ServletUtils.isCheckBoxEnabled(changepw)){

  150.                     // Controlli sui campi immessi
  151.                     boolean isOk = utentiHelper.changePwCheckData();
  152.                     if (!isOk) {
  153.                         // preparo i campi
  154.                         List<DataElement> dati = new ArrayList<>();

  155.                         dati.add(ServletUtils.getDataElementForEditModeFinished());

  156.                         utentiHelper.addUtenteChangeToDati(dati, interfaceType, changepw, userLogin, tipoModalita, idSoggetto);

  157.                         pd.setDati(dati);

  158.                         ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  159.                         return ServletUtils.getStrutsForwardEditModeCheckError(mapping, UtentiCostanti.OBJECT_NAME_UTENTE, ForwardParams.CHANGE());

  160.                     }else{
  161.                         //tutto ok modifico pwd
  162.                         // Cripto la nuova password
  163.                         if (!"".equals(newpw)) {
  164.                             newpw = utentiCore.getUtenzePasswordManager().crypt(newpw);

  165.                             // Modifico i dati della pw nel db
  166.                             myS = utentiCore.getUser(userLogin);


  167.                             PasswordVerifier passwordVerifier = utentiCore.getUtenzePasswordVerifier();

  168.                             // aggiornamento della password nello storico e nella data
  169.                             if(passwordVerifier.isHistory()) {
  170.                                 List<UserPassword> precedentiPassword = myS.getPrecedentiPassword();

  171.                                 UserPassword userPassword = new UserPassword();
  172.                                 userPassword.setDatePassword(user.getLastUpdatePassword());
  173.                                 userPassword.setPassword(user.getPassword());
  174.                                 precedentiPassword.add(userPassword );
  175.                             }

  176.                             myS.setLastUpdatePassword(new Date());
  177.                             myS.setPassword(newpw);

  178.                             utentiCore.performUpdateOperation(userLogin, utentiHelper.smista(), myS);

  179.                             //resetto changepwd
  180.                             changepw=null;
  181.                         }
  182.                     }
  183.                 }


  184.                 User userFromSession = ServletUtils.getUserFromSession(request, session);

  185.                 if(myS==null){
  186.                     myS = utentiCore.getUser(userLogin);
  187.                 }

  188.                 // salvataggio form profilo utente
  189.                 if(changeGui == null && changeModalita==null && changeSoggetto == null) {
  190.                     // modifica profilo utente dalla form
  191.                     myS.setProtocolloSelezionatoPddConsole(!tipoModalita.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? tipoModalita : null);
  192.                     myS.setSoggettoSelezionatoPddConsole(!idSoggetto.equals(UtentiCostanti.VALORE_PARAMETRO_MODALITA_ALL) ? idSoggetto : null);
  193.                     myS.setInterfaceType(interfaceType);
  194.                     utentiCore.performUpdateOperation(userLogin, utentiHelper.smista(), myS);

  195.                     if(utentiCore.isUtenzeModificaProfiloUtenteDaFormAggiornaSessione()) {
  196.                         LoginSessionUtilities.cleanLoginParametersSession(request, session);

  197.                         ServletUtils.setUserIntoSession(request, session, myS); // update in sessione.
  198.                         //                      utentiHelper.setTipoInterfaccia(myS.getInterfaceType()); // update InterfaceType
  199.                         LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userLogin);
  200.                     }
  201.                 }else {
  202.                     // nel caso di modifiche dai link in alto a dx, deve essere modificato solo l'oggetto in sessione
  203.                     if(changeGui != null) {
  204.                         userFromSession.setInterfaceType(interfaceType);
  205.                         ServletUtils.setUserIntoSession(request, session, userFromSession); // update in sessione.
  206.                         LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userFromSession);

  207.                         if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
  208.                             myS.setInterfaceType(interfaceType);
  209.                             utentiCore.performUpdateOperation(userLogin, utentiHelper.smista(), myS);
  210.                         }  
  211.                     } else if(changeModalita != null) {
  212.                         userFromSession.setProtocolloSelezionatoPddConsole(protocolloSelezionatoUtente);

  213.                         if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
  214.                             myS.setProtocolloSelezionatoPddConsole(protocolloSelezionatoUtente);
  215.                             utentiCore.salvaModalitaUserPddConsole(myS.getLogin(), protocolloSelezionatoUtente);
  216.                         }
  217.                         if(updateSoggetto) {
  218.                             userFromSession.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
  219.                             if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
  220.                                 myS.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
  221.                                 utentiCore.salvaSoggettoOperativoUserPddConsole(myS.getLogin(), soggettoSelezionatoUtente);
  222.                             }
  223.                         }

  224.                         ServletUtils.setUserIntoSession(request, session, userFromSession); // update in sessione.
  225.                     }  else if(changeSoggetto != null) {
  226.                         userFromSession.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
  227.                         ServletUtils.setUserIntoSession(request, session, userFromSession); // update in sessione.
  228.                         if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
  229.                             myS.setSoggettoSelezionatoPddConsole(soggettoSelezionatoUtente);
  230.                             utentiCore.salvaSoggettoOperativoUserPddConsole(myS.getLogin(), soggettoSelezionatoUtente);
  231.                         }
  232.                     }
  233.                    
  234.                     // vecchio comportamento, si aggiornava sia DB che sessione
  235.                     if(utentiCore.isUtenzeModificaProfiloUtenteDaLinkAggiornaDB()) {
  236.                         LoginSessionUtilities.cleanLoginParametersSession(request, session);

  237.                         ServletUtils.setUserIntoSession(request, session, myS); // update in sessione.
  238.                         //                  utentiHelper.setTipoInterfaccia(myS.getInterfaceType()); // update InterfaceType
  239.                         LoginSessionUtilities.setLoginParametersSession(request, session, utentiCore, userLogin);
  240.                     }
  241.                 }

  242.                 pd.setMessage("Modifiche effettuate con successo", Costanti.MESSAGE_TYPE_INFO);

  243.             }//fine modifica user interface


  244.             // se ho cliccato sul link cambia modalita interfaccia
  245.             if(changeGui != null) {
  246.                 // provengo dal link presente nell'header della pagina a dx.
  247.                 pd.setMessage("Passaggio all'interfaccia '"+interfaceType.toString().toLowerCase()+"' effettuato con successo.", Costanti.MESSAGE_TYPE_INFO_SINTETICO);

  248.                 pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);

  249.                 List<DataElement> dati = new ArrayList<>();

  250.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  251.             } else if(changeModalita != null) { // clic sul link cambia modalita gateway
  252.                 // messaggio di cambiamento del protocollo:
  253.                 List<String> protocolli = utentiCore.getProtocolli(request, session);
  254.                 StringBuilder sbProtocolli = new StringBuilder("<ul>");
  255.                 for (String protocollo : protocolli) {
  256.                     String descrizioneProtocollo = utentiHelper.getDescrizioneProtocollo(protocollo);
  257.                     String webSiteProtocollo = utentiHelper.getWebSiteProtocollo(protocollo);
  258.                     String labelProtocollo = utentiHelper.getLabelProtocollo(protocollo);

  259.                     sbProtocolli.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  260.                     sbProtocolli.append("<li style=\"list-style-type:disc; margin-left:12px;\">");
  261.                     sbProtocolli.append("<p><i>");
  262.                     String linkSito = "<a href=\""+webSiteProtocollo+"\" target=\"_blank\">"+labelProtocollo+"</a>";
  263.                     sbProtocolli.append(linkSito);
  264.                     sbProtocolli.append("</i></p>");
  265.                     sbProtocolli.append("<p>");
  266.                     sbProtocolli.append(descrizioneProtocollo);
  267.                     sbProtocolli.append("</p>");

  268.                     sbProtocolli.append("</li>");
  269.                 }
  270.                 sbProtocolli.append("</ul>");

  271.                 String pdMsg = "";
  272.                 String pdMsgTitle= "Passaggio al "+org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLO_DI_HTML_ESCAPE+" selezionato effettuato con successo.";
  273.                 if(protocolloSelezionatoUtente == null) {
  274.                     pdMsg = "<p>"+org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLI_COMPACT+" disponibili:<p/>" + sbProtocolli.toString();
  275.                 } else {
  276.                     pdMsg = "<p>"+org.openspcoop2.core.constants.Costanti.LABEL_PARAMETRO_PROTOCOLLO_COMPACT+" attuale:<p/>" + sbProtocolli.toString();
  277.                 }

  278.                 pd.setMessage(pdMsg, pdMsgTitle, Costanti.MESSAGE_TYPE_INFO);

  279.                 pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);

  280.                 List<DataElement> dati = new ArrayList<>();

  281.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  282.             } else if(changeSoggetto != null) { // clic sul link cambia soggetto

  283.                 String pdMsg = "";
  284.                 String pdMsgTitle= "Passaggio al "+UtentiCostanti.LABEL_PARAMETRO_SOGGETTO_OPERATIVO+" selezionato effettuato con successo.";
  285.                 if(soggettoSelezionatoUtente == null) {
  286.                     pdMsg = "<p>"+UtentiCostanti.LABEL_PARAMETRO_SOGGETTI_COMPACT+" disponibili: " + "Tutti";
  287.                 } else {
  288.                     IDSoggetto idSoggettoOperativo = utentiCore.convertSoggettoSelezionatoToID(soggettoSelezionatoUtente);
  289.                     pdMsg = "<p>"+UtentiCostanti.LABEL_PARAMETRO_SOGGETTO_COMPACT+" attuale: " + utentiHelper.getLabelNomeSoggetto(idSoggettoOperativo);
  290.                 }

  291.                 pd.setMessage(pdMsg, pdMsgTitle, Costanti.MESSAGE_TYPE_INFO);

  292.                 pd.setMode(Costanti.DATA_ELEMENT_EDIT_MODE_DISABLE_NAME);

  293.                 List<DataElement> dati = new ArrayList<>();

  294.                 dati.add(ServletUtils.getDataElementForEditModeFinished());
  295.             }else {
  296.                 // provengo dalla maschera di modifica utente
  297.                 // preparo i campi
  298.                 List<DataElement> dati = new ArrayList<>();

  299.                 dati.add(ServletUtils.getDataElementForEditModeFinished());

  300.                 utentiHelper.addUtenteChangeToDati(dati, interfaceType, changepw, userLogin, tipoModalita,idSoggetto);

  301.                 pd.setDati(dati);
  302.             }

  303.             // Reinit general data per aggiornare lo stato della barra dell'header a dx.
  304.             gd = generalHelper.initGeneralData(request);

  305.             // Refresh Menu' Preparo il menu
  306.             utentiHelper.makeMenu();

  307.             ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  308.             return ServletUtils.getStrutsForwardEditModeFinished(mapping, UtentiCostanti.OBJECT_NAME_UTENTE, ForwardParams.CHANGE());

  309.         } catch (Exception e) {
  310.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  311.                     UtentiCostanti.OBJECT_NAME_UTENTI, ForwardParams.CHANGE());
  312.         }
  313.     }
  314. }