UtenteChange.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 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());
- }
- }
- }