SoggettiChange.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.soggetti;

  21. import java.net.URLEncoder;
  22. import java.text.MessageFormat;
  23. import java.util.ArrayList;
  24. import java.util.Collections;
  25. import java.util.List;
  26. import java.util.Properties;

  27. import javax.servlet.http.HttpServletRequest;
  28. import javax.servlet.http.HttpServletResponse;
  29. import javax.servlet.http.HttpSession;

  30. import org.apache.commons.lang.StringUtils;
  31. import org.apache.struts.action.Action;
  32. import org.apache.struts.action.ActionForm;
  33. import org.apache.struts.action.ActionForward;
  34. import org.apache.struts.action.ActionMapping;
  35. import org.openspcoop2.core.commons.Filtri;
  36. import org.openspcoop2.core.commons.Liste;
  37. import org.openspcoop2.core.id.IDSoggetto;
  38. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  39. import org.openspcoop2.core.registry.ProtocolProperty;
  40. import org.openspcoop2.core.registry.Soggetto;
  41. import org.openspcoop2.core.registry.constants.CredenzialeTipo;
  42. import org.openspcoop2.core.registry.constants.PddTipologia;
  43. import org.openspcoop2.pdd.core.autenticazione.ApiKey;
  44. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  45. import org.openspcoop2.protocol.sdk.ProtocolException;
  46. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  47. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  48. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  49. import org.openspcoop2.utils.UtilsException;
  50. import org.openspcoop2.utils.certificate.ArchiveLoader;
  51. import org.openspcoop2.utils.certificate.ArchiveType;
  52. import org.openspcoop2.utils.certificate.Certificate;
  53. import org.openspcoop2.utils.certificate.KeystoreType;
  54. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  55. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  56. import org.openspcoop2.web.ctrlstat.core.ControlStationCoreException;
  57. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  58. import org.openspcoop2.web.ctrlstat.dao.PdDControlStation;
  59. import org.openspcoop2.web.ctrlstat.dao.SoggettoCtrlStat;
  60. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  61. import org.openspcoop2.web.ctrlstat.servlet.OggettoDialogEnum;
  62. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
  63. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  64. import org.openspcoop2.web.ctrlstat.servlet.pa.PorteApplicativeCore;
  65. import org.openspcoop2.web.ctrlstat.servlet.pd.PorteDelegateCore;
  66. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  67. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  68. import org.openspcoop2.web.ctrlstat.servlet.sa.ServiziApplicativiCore;
  69. import org.openspcoop2.web.ctrlstat.servlet.utenti.UtentiCore;
  70. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  71. import org.openspcoop2.web.lib.mvc.Costanti;
  72. import org.openspcoop2.web.lib.mvc.DataElement;
  73. import org.openspcoop2.web.lib.mvc.DataElementType;
  74. import org.openspcoop2.web.lib.mvc.ForwardParams;
  75. import org.openspcoop2.web.lib.mvc.GeneralData;
  76. import org.openspcoop2.web.lib.mvc.MessageType;
  77. import org.openspcoop2.web.lib.mvc.PageData;
  78. import org.openspcoop2.web.lib.mvc.Parameter;
  79. import org.openspcoop2.web.lib.mvc.ServletUtils;
  80. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  81. import org.openspcoop2.web.lib.users.dao.User;

  82. /**
  83.  * soggettiChange
  84.  *
  85.  * @author Andrea Poli (apoli@link.it)
  86.  * @author Stefano Corallo (corallo@link.it)
  87.  * @author Sandra Giangrandi (sandra@link.it)
  88.  * @author $Author$
  89.  * @version $Rev$, $Date$
  90.  *
  91.  */
  92. public final class SoggettiChange extends Action {
  93.    
  94.     @Override
  95.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  97.         // Inizializzo PageData
  98.         PageData pd = new PageData();

  99.         GeneralHelper generalHelper = new GeneralHelper(session);

  100.         // Inizializzo GeneralData
  101.         GeneralData gd = generalHelper.initGeneralData(request);

  102.         SoggettiChangeStrutsBean strutsBean = new SoggettiChangeStrutsBean();
  103.        
  104.         // Parametri Protocol Properties relativi al tipo di operazione e al tipo di visualizzazione
  105.         strutsBean.consoleOperationType = ConsoleOperationType.CHANGE;
  106.        
  107.         // Parametri relativi al tipo operazione
  108.         TipoOperazione tipoOp = TipoOperazione.CHANGE;
  109.         List<ProtocolProperty> oldProtocolPropertyList = null;
  110.         try {
  111.             SoggettiHelper soggettiHelper = new SoggettiHelper(request, pd, session);
  112.            
  113.             strutsBean.id = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID);
  114.             if(strutsBean.id==null) {
  115.                 throw new ControlStationCoreException("Identificativo soggetto non fornito");
  116.             }
  117.             long idSogg = Long.parseLong(strutsBean.id);
  118.             strutsBean.nomeprov = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME);
  119.             strutsBean.tipoprov = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO);
  120.             strutsBean.portadom = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_CODICE_PORTA);
  121.             strutsBean.descr = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DESCRIZIONE);
  122.             strutsBean.versioneProtocollo = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_VERSIONE_PROTOCOLLO);
  123.             strutsBean.pdd = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_PDD);
  124.             String isRouterParameter = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_IS_ROUTER);
  125.             strutsBean.isRouter = ServletUtils.isCheckBoxEnabled(isRouterParameter);
  126.             strutsBean.dominio = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO);
  127.             String isPrivatoParameter = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_IS_PRIVATO);
  128.             strutsBean.privato = ServletUtils.isCheckBoxEnabled(isPrivatoParameter);
  129.             strutsBean.codiceIpa = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_CODICE_IPA);
  130.             strutsBean.pd_url_prefix_rewriter = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_PD_URL_PREFIX_REWRITER);
  131.             strutsBean.pa_url_prefix_rewriter = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_PA_URL_PREFIX_REWRITER);

  132.             strutsBean.editMode = soggettiHelper.getParameter(Costanti.DATA_ELEMENT_EDIT_MODE_NAME);
  133.             strutsBean.protocolPropertiesSet = soggettiHelper.getParameter(ProtocolPropertiesCostanti.PARAMETRO_PP_SET);
  134.            
  135.             strutsBean.tipoauthSoggetto = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE);
  136.             strutsBean.utenteSoggetto = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_USERNAME);
  137.             strutsBean.passwordSoggetto = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PASSWORD);
  138.             strutsBean.subjectSoggetto = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_SUBJECT);
  139.             strutsBean.principalSoggetto = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_PRINCIPAL);
  140.            
  141.             String changepwd = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CHANGE_PASSWORD);
  142.                        
  143.             String tipoCredenzialiSSLSorgente = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL);
  144.             if(tipoCredenzialiSSLSorgente == null) {
  145.                 tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO;
  146.             }
  147.             String tipoCredenzialiSSLTipoArchivioS = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_TIPO_ARCHIVIO);
  148.             org.openspcoop2.utils.certificate.ArchiveType tipoCredenzialiSSLTipoArchivio= null;
  149.             if(tipoCredenzialiSSLTipoArchivioS == null) {
  150.                 tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.CER;
  151.             } else {
  152.                 tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.valueOf(tipoCredenzialiSSLTipoArchivioS);
  153.             }
  154.             BinaryParameter tipoCredenzialiSSLFileCertificato = soggettiHelper.getBinaryParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO);
  155.             String tipoCredenzialiSSLFileCertificatoPassword = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO_PASSWORD);
  156.             List<String> listaAliasEstrattiCertificato = new ArrayList<>();
  157.             String tipoCredenzialiSSLAliasCertificato = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO);
  158.             if (tipoCredenzialiSSLAliasCertificato == null) {
  159.                 tipoCredenzialiSSLAliasCertificato = "";
  160.             }
  161.             String tipoCredenzialiSSLAliasCertificatoSubject= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_SUBJECT);
  162.             String tipoCredenzialiSSLAliasCertificatoIssuer= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_ISSUER);
  163.             String tipoCredenzialiSSLAliasCertificatoType= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_TYPE);
  164.             String tipoCredenzialiSSLAliasCertificatoVersion= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_VERSION);
  165.             String tipoCredenzialiSSLAliasCertificatoSerialNumber= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_SERIAL_NUMBER);
  166.             String tipoCredenzialiSSLAliasCertificatoSelfSigned= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_SELF_SIGNED);
  167.             String tipoCredenzialiSSLAliasCertificatoNotBefore= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_NOT_BEFORE);
  168.             String tipoCredenzialiSSLAliasCertificatoNotAfter = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO_NOT_AFTER);
  169.             String tipoCredenzialiSSLVerificaTuttiICampi = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI);
  170.             if ( ((tipoCredenzialiSSLVerificaTuttiICampi == null || StringUtils.isEmpty(tipoCredenzialiSSLVerificaTuttiICampi))
  171.                     ||
  172.                      SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO.equalsIgnoreCase(soggettiHelper.getPostBackElementName())
  173.                      ||
  174.                      SoggettiCostanti.PARAMETRO_SOGGETTO_TIPOLOGIA.equalsIgnoreCase(soggettiHelper.getPostBackElementName())
  175.                     ) &&
  176.                 (soggettiHelper.isEditModeInProgress() && soggettiHelper.getPostBackElementName()==null)
  177.                 ){ // prima volta
  178.                 tipoCredenzialiSSLVerificaTuttiICampi = ConnettoriCostanti.DEFAULT_VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI;
  179.             }
  180.             String tipoCredenzialiSSLConfigurazioneManualeSelfSigned= soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_MANUALE_SELF_SIGNED);
  181.             if (tipoCredenzialiSSLConfigurazioneManualeSelfSigned == null) {
  182.                 tipoCredenzialiSSLConfigurazioneManualeSelfSigned = Costanti.CHECK_BOX_DISABLED;
  183.             }
  184.             String issuerSoggetto = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_ISSUER);

  185.             String tipoCredenzialiSSLWizardStep = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP);
  186.             if (tipoCredenzialiSSLWizardStep == null) {
  187.                 tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  188.             }
  189.             String oldTipoCredenzialiSSLWizardStep = tipoCredenzialiSSLWizardStep;
  190.            
  191.             String multipleApiKey = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_MULTIPLE_API_KEYS);
  192.             String appId = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_APP_ID);
  193.             String apiKey = soggettiHelper.getParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_API_KEY);
  194.            
  195.             boolean visualizzaModificaCertificato = false;
  196.             boolean visualizzaAddCertificato = false;
  197.             String servletCredenzialiList = SoggettiCostanti.SERVLET_NAME_SOGGETTI_CREDENZIALI_LIST;
  198.             List<Parameter> parametersServletCredenzialiList = null;
  199.             Integer numeroCertificati = 0;
  200.             String servletCredenzialiAdd = SoggettiCostanti.SERVLET_NAME_SOGGETTI_CREDENZIALI_ADD;
  201.            
  202.             strutsBean.modificaOperativo = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_MODIFICA_OPERATIVO);
  203.            
  204.             String resetElementoCacheS = soggettiHelper.getParameter(CostantiControlStation.PARAMETRO_ELIMINA_ELEMENTO_DALLA_CACHE);
  205.             boolean resetElementoCache = ServletUtils.isCheckBoxEnabled(resetElementoCacheS);
  206.    
  207.             // Preparo il menu
  208.             soggettiHelper.makeMenu();

  209.             // Prendo i vecchi nome e tipo
  210.             String oldnomeprov = "";
  211.             String oldtipoprov = "";
  212.             String oldpdd = null;

  213.             Boolean contaListe = ServletUtils.getContaListeFromSession(session);
  214.             String userLogin = ServletUtils.getUserLoginFromSession(session);

  215.             Soggetto soggettoRegistry = null;
  216.             org.openspcoop2.core.config.Soggetto soggettoConfig = null;
  217.             List<String> tipiSoggetti = null;
  218.             int numPA = 0;
  219.             int numPD = 0;
  220.             int numSA = 0;
  221.             String[] pddList = null;
  222.             String[] pddEsterneList = null;
  223.             List<String> versioniProtocollo = null;

  224.             SoggettiCore soggettiCore = new SoggettiCore();
  225.             PddCore pddCore = new PddCore(soggettiCore);
  226.             PorteDelegateCore porteDelegateCore = new PorteDelegateCore(soggettiCore);
  227.             PorteApplicativeCore porteApplicativeCore = new PorteApplicativeCore(soggettiCore);
  228.             ServiziApplicativiCore saCore = new ServiziApplicativiCore(soggettiCore);
  229.             UtentiCore utentiCore = new UtentiCore(soggettiCore);

  230.             String nomePddGestioneLocale = null;
  231.             if(!pddCore.isGestionePddAbilitata(soggettiHelper)){
  232.                 nomePddGestioneLocale = pddCore.getNomePddOperativa();
  233.                 if(nomePddGestioneLocale==null) {
  234.                     throw new ControlStationCoreException("Non รจ stata rilevata una pdd di tipologia 'operativo'");
  235.                 }
  236.             }

  237.             if(soggettiCore.isRegistroServiziLocale()){
  238.                 soggettoRegistry = soggettiCore.getSoggettoRegistro(idSogg);// core.getSoggettoRegistro(new
  239.             }

  240.             soggettoConfig = soggettiCore.getSoggetto(idSogg);// core.getSoggetto(new

  241.             if(soggettiCore.isRegistroServiziLocale()){
  242.                 oldnomeprov = soggettoRegistry.getNome();
  243.                 oldtipoprov = soggettoRegistry.getTipo();
  244.                 oldpdd = soggettoRegistry.getPortaDominio();
  245.             }
  246.             else{
  247.                 oldnomeprov = soggettoConfig.getNome();
  248.                 oldtipoprov = soggettoConfig.getTipo();
  249.             }
  250.            
  251.            
  252.             Parameter pIdSoggetto = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID, strutsBean.id);
  253.             Parameter pNomeSoggetto = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME, oldnomeprov);
  254.             Parameter pTipoSoggetto = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO, oldtipoprov);
  255.             parametersServletCredenzialiList = new ArrayList<>();
  256.             parametersServletCredenzialiList.add(pIdSoggetto);
  257.             parametersServletCredenzialiList.add(pNomeSoggetto);
  258.             parametersServletCredenzialiList.add(pTipoSoggetto);

  259.             boolean encryptOldPlainPwd = false;
  260.             if(soggettoRegistry!=null && soggettoRegistry.sizeCredenzialiList()>0 &&
  261.                     org.openspcoop2.core.registry.constants.CredenzialeTipo.BASIC.equals(soggettoRegistry.getCredenziali(0).getTipo())) {
  262.                 encryptOldPlainPwd = !soggettoRegistry.getCredenziali(0).isCertificateStrictVerification() && soggettiCore.isSoggettiPasswordEncryptEnabled();
  263.             }
  264.            
  265.             // Tipi protocollo supportati
  266.             List<String> listaTipiProtocollo = soggettiCore.getProtocolli(request, session);
  267.             //tipiSoggetti = soggettiCore.getTipiSoggettiGestiti(versioneProtocollo); // all tipi soggetti gestiti
  268.             // Nella change non e' piu' possibile cambiare il protocollo
  269.             strutsBean.protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(strutsBean.tipoprov);
  270.             tipiSoggetti = soggettiCore.getTipiSoggettiGestitiProtocollo(strutsBean.protocollo);

  271.             if(soggettiHelper.isModalitaAvanzata()){
  272.                 versioniProtocollo = soggettiCore.getVersioniProtocollo(strutsBean.protocollo);
  273.             }else {
  274.                 versioniProtocollo = new ArrayList<>();
  275.                 strutsBean.versioneProtocollo = soggettiCore.getVersioneDefaultProtocollo(strutsBean.protocollo);
  276.                 versioniProtocollo.add(strutsBean.versioneProtocollo);
  277.             }
  278.             boolean isSupportatoAutenticazioneSoggetti = soggettiCore.isSupportatoAutenticazioneSoggetti(strutsBean.protocollo);

  279.             boolean isSupportatoCodiceIPA = soggettiCore.isSupportatoCodiceIPA(strutsBean.protocollo);
  280.             boolean isSupportatoIdentificativoPorta = soggettiCore.isSupportatoIdentificativoPorta(strutsBean.protocollo);


  281.             boolean isPddEsterna = pddCore.isPddEsterna(strutsBean.pdd);
  282.             if(isSupportatoAutenticazioneSoggetti &&
  283.                 isPddEsterna &&
  284.                     strutsBean.tipoauthSoggetto==null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA.equals(strutsBean.tipoauthSoggetto)){
  285.                 strutsBean.tipoauthSoggetto = soggettiCore.getAutenticazione_generazioneAutomaticaPorteApplicative();
  286.             }
  287.            
  288.             if (contaListe!=null && contaListe.booleanValue()) {
  289.                 // Conto il numero di porte applicative
  290.                 IDSoggetto soggetto = new IDSoggetto(soggettoConfig.getTipo(),soggettoConfig.getNome());
  291.                 ConsoleSearch searchForCount = new ConsoleSearch(true,1);
  292.                 porteApplicativeCore.porteAppList(idSogg, searchForCount);
  293.                 numPA = searchForCount.getNumEntries(Liste.PORTE_APPLICATIVE_BY_SOGGETTO);
  294.                 porteDelegateCore.porteDelegateList(idSogg, searchForCount);
  295.                 numPD = searchForCount.getNumEntries(Liste.PORTE_DELEGATE_BY_SOGGETTO);
  296.                 saCore.servizioApplicativoList(soggetto, searchForCount);
  297.                 numSA = searchForCount.getNumEntries(Liste.SERVIZIO_APPLICATIVO);
  298.             }

  299.             if(soggettiCore.isSinglePdD() &&
  300.                 (soggettiCore.isRegistroServiziLocale())
  301.                 ){
  302.                 // Prendo la lista di pdd e la metto in un array
  303.                 // In pratica se un soggetto e' associato ad una PdD Operativa,
  304.                 // e possiede gia' delle PD o PA o SA,
  305.                 // non e' piu' possibile cambiargli la porta di dominio in una esterna.

  306.                 boolean pddOperativa = false;
  307.                 if(soggettoRegistry.getPortaDominio()!=null && !"".equals(soggettoRegistry.getPortaDominio())){
  308.                     PdDControlStation pddCtrlstat = pddCore.getPdDControlStation(soggettoRegistry.getPortaDominio());
  309.                     pddOperativa = PddTipologia.OPERATIVO.toString().equals(pddCtrlstat.getTipo());
  310.                 }

  311.                 List<PdDControlStation> lista = new ArrayList<>();
  312.                 if( (numPA<=0 && numPD<=0 && numSA<=0) || !pddOperativa ){
  313.                    
  314.                     List<String> pddEsterne = new ArrayList<>();
  315.                     pddEsterne.add("-");
  316.                    
  317.                     // aggiungo un elemento di comodo
  318.                     PdDControlStation tmp = new PdDControlStation();
  319.                     tmp.setNome("-");
  320.                     lista.add(tmp);
  321.                     // aggiungo gli altri elementi
  322.                     if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  323.                         lista.addAll(pddCore.pddList(null, new ConsoleSearch(true)));
  324.                     }else{
  325.                         lista.addAll(pddCore.pddList(userLogin, new ConsoleSearch(true)));
  326.                     }
  327.                     pddList = new String[lista.size()];
  328.                     int i = 0;
  329.                     for (PdDControlStation pddTmp : lista) {
  330.                         pddList[i] = pddTmp.getNome();
  331.                         i++;
  332.                        
  333.                         if(PddTipologia.ESTERNO.toString().equals(pddTmp.getTipo())){
  334.                             pddEsterne.add(pddTmp.getNome());
  335.                         }
  336.                     }
  337.                    
  338.                     pddEsterneList = pddEsterne.toArray(new String[1]);
  339.                 }
  340.                 else{
  341.                     // non posso modificare la pdd. Lascio solo quella operativa
  342.                     pddList = new String[1];
  343.                     pddList[0] = soggettoRegistry.getPortaDominio();
  344.                 }
  345.             }

  346.             org.openspcoop2.core.registry.Connettore connettore = null;
  347.             if(soggettiCore.isRegistroServiziLocale()){
  348.                 connettore = soggettoRegistry.getConnettore();
  349.             }


  350.             IDSoggetto idSoggetto = new IDSoggetto(oldtipoprov,oldnomeprov);
  351.             // Protocol Properties  
  352.             strutsBean.protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(strutsBean.protocollo);
  353.             strutsBean.consoleDynamicConfiguration =  strutsBean.protocolFactory.createDynamicConfigurationConsole();
  354.             strutsBean.registryReader = soggettiCore.getRegistryReader(strutsBean.protocolFactory);
  355.             strutsBean.configRegistryReader = soggettiCore.getConfigIntegrationReader(strutsBean.protocolFactory);
  356.             strutsBean.consoleConfiguration = strutsBean.consoleDynamicConfiguration.getDynamicConfigSoggetto(strutsBean.consoleOperationType, soggettiHelper,
  357.                     strutsBean.registryReader, strutsBean.configRegistryReader, idSoggetto);
  358.             strutsBean.protocolProperties = soggettiHelper.estraiProtocolPropertiesDaRequest(strutsBean.consoleConfiguration, strutsBean.consoleOperationType);
  359.            
  360.             CredenzialiSoggetto oldCredenziali = null;
  361.             try{
  362.                 Soggetto soggetto = strutsBean.registryReader.getSoggetto(idSoggetto);
  363.                 oldProtocolPropertyList = soggetto.getProtocolPropertyList();
  364.                 numeroCertificati = soggetto.sizeCredenzialiList();
  365.                 if(soggetto.sizeCredenzialiList()>0) {
  366.                     oldCredenziali = soggetto.getCredenziali(0);
  367.                    
  368.                     visualizzaAddCertificato = true;
  369.                     if(soggetto.sizeCredenzialiList() == 1) {  // se ho definito solo un certificato c'e' il link diretto alla modifica
  370.                         visualizzaModificaCertificato = true;
  371.                     }
  372.                 }
  373.             }catch(RegistryNotFound r){
  374.                 // ignore
  375.             }

  376.             Properties propertiesProprietario = new Properties();
  377.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, strutsBean.id);
  378.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_SOGGETTO);
  379.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, oldtipoprov + "/" + oldnomeprov);
  380.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE, URLEncoder.encode( SoggettiCostanti.SERVLET_NAME_SOGGETTI_CHANGE + "?" + request.getQueryString(), "UTF-8"));
  381.             propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, strutsBean.protocollo);
  382.            
  383.             String postBackElementName = soggettiHelper.getPostBackElementName();
  384.             String labelButtonSalva = Costanti.LABEL_MONITOR_BUTTON_INVIA;

  385.             // Controllo se ho modificato il protocollo, ricalcolo il default della versione del protocollo
  386.             boolean postBackTipoAuthSoggetto = false;
  387.             if(postBackElementName != null ){
  388.                 // tipo autenticazione
  389.                 if(postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_TIPO_AUTENTICAZIONE)){
  390.                    
  391.                     postBackTipoAuthSoggetto = true;
  392.                    
  393.                     if(strutsBean.tipoauthSoggetto != null && strutsBean.tipoauthSoggetto.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL)) {
  394.                        
  395.                         if(oldCredenziali!=null && oldCredenziali.getTipo()!=null && oldCredenziali.getTipo().getValue().equals(strutsBean.tipoauthSoggetto)){
  396.                            
  397.                             tipoCredenzialiSSLWizardStep  = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  398.                            
  399.                             // il certificato non e' cambiato
  400.                             if(tipoCredenzialiSSLAliasCertificatoSubject==null || StringUtils.isEmpty(tipoCredenzialiSSLAliasCertificatoSubject)) {
  401.                                 if(oldCredenziali.getCertificate()!=null) {
  402.                                     try {
  403.                                         Certificate cSelezionato = ArchiveLoader.load(oldCredenziali.getCertificate());
  404.                                         tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  405.                                         tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  406.                                         tipoCredenzialiSSLAliasCertificatoSelfSigned = cSelezionato.getCertificate().isSelfSigned() ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO;
  407.                                         tipoCredenzialiSSLAliasCertificatoSerialNumber = cSelezionato.getCertificate().getSerialNumber() + "";
  408.                                         tipoCredenzialiSSLAliasCertificatoType = cSelezionato.getCertificate().getType();
  409.                                         tipoCredenzialiSSLAliasCertificatoVersion = cSelezionato.getCertificate().getVersion() + "";
  410.                                         tipoCredenzialiSSLAliasCertificatoNotBefore = soggettiHelper.getSdfCredenziali().format(cSelezionato.getCertificate().getNotBefore());
  411.                                         tipoCredenzialiSSLAliasCertificatoNotAfter = soggettiHelper.getSdfCredenziali().format(cSelezionato.getCertificate().getNotAfter());
  412.                                     }catch(UtilsException e) {
  413.                                         pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  414.                                         tipoCredenzialiSSLAliasCertificato = "";
  415.                                         tipoCredenzialiSSLAliasCertificatoSubject= "";
  416.                                         tipoCredenzialiSSLAliasCertificatoIssuer= "";
  417.                                         tipoCredenzialiSSLAliasCertificatoType= "";
  418.                                         tipoCredenzialiSSLAliasCertificatoVersion= "";
  419.                                         tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  420.                                         tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  421.                                         tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  422.                                         tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  423.                                     }
  424.                                 }
  425.                                 tipoCredenzialiSSLVerificaTuttiICampi = oldCredenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  426.                             }
  427.                         }
  428.                         else {
  429.                        
  430.                             // reset impostazioni sezione ssl
  431.                             tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO;
  432.                             tipoCredenzialiSSLTipoArchivio = ArchiveType.CER;
  433.                             tipoCredenzialiSSLVerificaTuttiICampi = ConnettoriCostanti.DEFAULT_VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI;
  434.                             tipoCredenzialiSSLAliasCertificato = "";
  435.                             tipoCredenzialiSSLAliasCertificatoSubject= "";
  436.                             tipoCredenzialiSSLAliasCertificatoIssuer= "";
  437.                             tipoCredenzialiSSLAliasCertificatoType= "";
  438.                             tipoCredenzialiSSLAliasCertificatoVersion= "";
  439.                             tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  440.                             tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  441.                             tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  442.                             tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  443.                             listaAliasEstrattiCertificato = new ArrayList<>();
  444.                             tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO;
  445.                            
  446.                         }
  447.                            
  448.                     } else {
  449.                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  450.                        
  451.                         if(oldCredenziali!=null && oldCredenziali.getTipo()!=null) {
  452.                             if(oldCredenziali.getTipo().getValue().equals(strutsBean.tipoauthSoggetto)) {
  453.                                 if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(strutsBean.tipoauthSoggetto)) {
  454.                                     strutsBean.utenteSoggetto = oldCredenziali.getUser();
  455.                                     strutsBean.passwordSoggetto = oldCredenziali.getPassword();
  456.                                     tipoCredenzialiSSLVerificaTuttiICampi = oldCredenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  457.                                 }
  458.                                 if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(strutsBean.tipoauthSoggetto)) {
  459.                                     strutsBean.utenteSoggetto = oldCredenziali.getUser();
  460.                                     strutsBean.passwordSoggetto = oldCredenziali.getPassword();
  461.                                     tipoCredenzialiSSLVerificaTuttiICampi = oldCredenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  462.                                     multipleApiKey = oldCredenziali.isAppId() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  463.                                     appId = oldCredenziali.getUser();
  464.                                     apiKey = oldCredenziali.getPassword();
  465.                                 }
  466.                                 if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_PRINCIPAL.equals(strutsBean.tipoauthSoggetto)) {
  467.                                     strutsBean.principalSoggetto = oldCredenziali.getUser();
  468.                                 }
  469.                             }
  470.                             else {
  471.                                 if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(strutsBean.tipoauthSoggetto) ||
  472.                                         ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(strutsBean.tipoauthSoggetto)) {
  473.                                     tipoCredenzialiSSLVerificaTuttiICampi = Costanti.CHECK_BOX_DISABLED; // dovrร  essere re-effettuata la cifratura
  474.                                 }
  475.                             }
  476.                         }

  477.                     }
  478.                 }

  479.                 // tipo di configurazione SSL
  480.                 if(postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL) ||
  481.                         postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO_LINK_MODIFICA)) {
  482.                     listaAliasEstrattiCertificato = new ArrayList<>();
  483.                     tipoCredenzialiSSLTipoArchivio = ArchiveType.CER;
  484.                     tipoCredenzialiSSLVerificaTuttiICampi = ConnettoriCostanti.DEFAULT_VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI;
  485.                     tipoCredenzialiSSLAliasCertificato = "";
  486.                     tipoCredenzialiSSLAliasCertificatoSubject= "";
  487.                     tipoCredenzialiSSLAliasCertificatoIssuer= "";
  488.                     tipoCredenzialiSSLAliasCertificatoType= "";
  489.                     tipoCredenzialiSSLAliasCertificatoVersion= "";
  490.                     tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  491.                     tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  492.                     tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  493.                     tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  494.                     soggettiHelper.deleteBinaryParameters(tipoCredenzialiSSLFileCertificato);
  495.                     tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO;

  496.                     if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE)) {
  497.                         strutsBean.subjectSoggetto = "";
  498.                         issuerSoggetto = "";
  499.                         tipoCredenzialiSSLConfigurazioneManualeSelfSigned = Costanti.CHECK_BOX_DISABLED;
  500.                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  501.                     }
  502.                 }

  503.                 // cambio il tipo archivio butto via il vecchio certificato            
  504.                 if(postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_TIPO_ARCHIVIO)) {
  505.                     soggettiHelper.deleteBinaryParameters(tipoCredenzialiSSLFileCertificato);
  506.                     tipoCredenzialiSSLAliasCertificato = "";
  507.                     tipoCredenzialiSSLAliasCertificatoSubject= "";
  508.                     tipoCredenzialiSSLAliasCertificatoIssuer= "";
  509.                     tipoCredenzialiSSLAliasCertificatoType= "";
  510.                     tipoCredenzialiSSLAliasCertificatoVersion= "";
  511.                     tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  512.                     tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  513.                     tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  514.                     tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  515.                     listaAliasEstrattiCertificato = new ArrayList<>();
  516.                     tipoCredenzialiSSLVerificaTuttiICampi = ConnettoriCostanti.DEFAULT_VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI;
  517.                     tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO;
  518.                 }

  519.                 // selezione alias
  520.                 if(postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO)) {
  521.                     if(StringUtils.isNotEmpty(tipoCredenzialiSSLAliasCertificato)) {
  522.                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CERTIFICATO_OK;
  523.                     } else {
  524.                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ALIAS_NON_SCELTO;
  525.                     }
  526.                     tipoCredenzialiSSLAliasCertificatoSubject= "";
  527.                     tipoCredenzialiSSLAliasCertificatoIssuer= "";
  528.                     tipoCredenzialiSSLAliasCertificatoType= "";
  529.                     tipoCredenzialiSSLAliasCertificatoVersion= "";
  530.                     tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  531.                     tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  532.                     tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  533.                     tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  534.                 }
  535.                
  536.                 // Change Password basic/api
  537.                 if(postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CHANGE_PASSWORD)) {
  538.                     if(!ServletUtils.isCheckBoxEnabled(changepwd)) {
  539.                         if (oldCredenziali != null){
  540.                             if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(strutsBean.tipoauthSoggetto)) {
  541.                                 strutsBean.passwordSoggetto = oldCredenziali.getPassword();
  542.                                 tipoCredenzialiSSLVerificaTuttiICampi = oldCredenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  543.                             }
  544.                             if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(strutsBean.tipoauthSoggetto)) {
  545.                                 strutsBean.passwordSoggetto = oldCredenziali.getPassword();
  546.                                 tipoCredenzialiSSLVerificaTuttiICampi = oldCredenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  547.                                 multipleApiKey = oldCredenziali.isAppId() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  548.                                 appId = oldCredenziali.getUser();
  549.                                 apiKey = oldCredenziali.getPassword();
  550.                             }
  551.                         }
  552.                     }
  553.                     else {
  554.                         appId = null;
  555.                         apiKey = null;
  556.                     }
  557.                 }
  558.                
  559.                 // apikey
  560.                 if(postBackElementName.equalsIgnoreCase(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_MULTIPLE_API_KEYS)) {
  561.                     appId = null;
  562.                     apiKey = null;
  563.                 }
  564.             }
  565.             if(postBackTipoAuthSoggetto) {
  566.                 // nop
  567.             }
  568.            
  569.             // reset elemento dalla cache
  570.             if(resetElementoCache) {
  571.                
  572.                 // Uso lo stessoAlias
  573.                 List<String> aliases = soggettiCore.getJmxPdDAliases();
  574.                 String alias = null;
  575.                 if(aliases!=null && !aliases.isEmpty()) {
  576.                     alias = aliases.get(0);
  577.                 }
  578.                 String labelSoggetto = soggettiHelper.getLabelNomeSoggetto(strutsBean.protocollo, oldtipoprov , oldnomeprov);
  579.                 soggettiCore.invokeJmxMethodAllNodesAndSetResult(pd, soggettiCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConfigurazionePdD(alias),
  580.                         soggettiCore.getJmxPdDConfigurazioneSistemaNomeMetodoRipulisciRiferimentiCacheSoggetto(alias),
  581.                         MessageFormat.format(CostantiControlStation.LABEL_ELIMINATO_CACHE_SUCCESSO,labelSoggetto),
  582.                         MessageFormat.format(CostantiControlStation.LABEL_ELIMINATO_CACHE_FALLITO_PREFIX,labelSoggetto),
  583.                         idSogg);                
  584.                
  585.                 String resetFromLista = soggettiHelper.getParameter(CostantiControlStation.PARAMETRO_RESET_CACHE_FROM_LISTA);
  586.                 boolean arrivoDaLista = "true".equalsIgnoreCase(resetFromLista);
  587.                
  588.                 if(arrivoDaLista) {
  589.                    
  590.                     // preparo lista
  591.                    
  592.                     String filterDominioInterno = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_FILTER_DOMINIO_INTERNO);
  593.                     boolean forceFilterDominioInterno = false;
  594.                     if("true".equalsIgnoreCase(filterDominioInterno)) {
  595.                         forceFilterDominioInterno = true;
  596.                     }
  597.                    
  598.                     boolean multiTenant = soggettiCore.isMultitenant();
  599.                    
  600.                     ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  601.                    
  602.                     int idLista = Liste.SOGGETTI;
  603.                    
  604.                     // poiche' esistono filtri che hanno necessita di postback salvo in sessione
  605.                     List<Soggetto> lista = null;
  606.                     if(soggettiCore.isRegistroServiziLocale() &&
  607.                         !ServletUtils.isSearchDone(soggettiHelper)) {
  608.                         lista = ServletUtils.getRisultatiRicercaFromSession(request, session, idLista,  Soggetto.class);
  609.                     }
  610.                    
  611.                     ricerca = soggettiHelper.checkSearchParameters(idLista, ricerca);
  612.                    
  613.                     if(forceFilterDominioInterno) {
  614.                         ricerca.addFilter(idLista, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE);
  615.                     }
  616.                     else if(!multiTenant && !soggettiHelper.isModalitaCompleta()) {
  617.                         ricerca.addFilter(idLista, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE);
  618.                     }
  619.                    
  620.                     if(soggettiCore.isRegistroServiziLocale()){
  621.                         if(lista==null) {
  622.                             if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  623.                                 lista = soggettiCore.soggettiRegistroList(null, ricerca);
  624.                             }else{
  625.                                 lista = soggettiCore.soggettiRegistroList(userLogin, ricerca);
  626.                             }
  627.                         }
  628.                        
  629.                         if(!soggettiHelper.isPostBackFilterElement()) {
  630.                             ServletUtils.setRisultatiRicercaIntoSession(request, session, idLista, lista); // salvo poiche' esistono filtri che hanno necessita di postback
  631.                         }
  632.                        
  633.                         soggettiHelper.prepareSoggettiList(lista, ricerca);
  634.                     }
  635.                     else{
  636.                         List<org.openspcoop2.core.config.Soggetto> listaSoggetti = null;
  637.                         if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  638.                             listaSoggetti = soggettiCore.soggettiList(null, ricerca);
  639.                         }else{
  640.                             listaSoggetti = soggettiCore.soggettiList(userLogin, ricerca);
  641.                         }
  642.                         soggettiHelper.prepareSoggettiConfigList(listaSoggetti, ricerca);
  643.                     }
  644.                        
  645.                     ServletUtils.setSearchObjectIntoSession(request, session, ricerca);
  646.                    
  647.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  648.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI, ForwardParams.CHANGE());
  649.                 }
  650.             }
  651.            
  652.             boolean checkWizard = false;
  653.             if(
  654.                     //!postBackTipoAuthSoggetto &&  // Fix: non veniva attivato il wizard quando da una credenziale diversa da https (anche nessuna) si impostava https  
  655.                     strutsBean.tipoauthSoggetto != null && strutsBean.tipoauthSoggetto.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL)) {
  656.                
  657.                 boolean changeTipoDominio = false;
  658.                 if(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO.equalsIgnoreCase(postBackElementName)) {
  659.                     changeTipoDominio = true;
  660.                 }
  661.                
  662.                 if(!changeTipoDominio && tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO) &&
  663.                         !ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_VERIFICA_TUTTI_CAMPI.equals(postBackElementName)) {
  664.                     if(tipoCredenzialiSSLFileCertificato.getValue() != null && tipoCredenzialiSSLFileCertificato.getValue().length > 0) {
  665.                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ALIAS_NON_SCELTO;
  666.                         if(!tipoCredenzialiSSLTipoArchivio.equals(ArchiveType.CER)) {
  667.                             if(StringUtils.isNotEmpty(tipoCredenzialiSSLFileCertificatoPassword) ||
  668.                                     (KeystoreType.JKS.isType(tipoCredenzialiSSLTipoArchivio.name()) && !soggettiCore.isLoadCertificateWizardJksPasswordRequiredRequired()) ||
  669.                                     (KeystoreType.PKCS12.isType(tipoCredenzialiSSLTipoArchivio.name()) && !soggettiCore.isLoadCertificateWizardPkcs12PasswordRequiredRequired())
  670.                                     ) {
  671.                                 try {
  672.                                     listaAliasEstrattiCertificato = ArchiveLoader.readAliases(tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato.getValue(), tipoCredenzialiSSLFileCertificatoPassword);
  673.                                     Collections.sort(listaAliasEstrattiCertificato);
  674.    
  675.                                     //se ho un solo alias lo imposto
  676.                                     if(!listaAliasEstrattiCertificato.isEmpty() && listaAliasEstrattiCertificato.size() == 1) {
  677.                                         tipoCredenzialiSSLAliasCertificato = listaAliasEstrattiCertificato.get(0);
  678.                                     }
  679.                                    
  680.                                     // ho appena caricato il file devo solo far vedere la form senza segnalare il messaggio di errore
  681.                                     if(oldTipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO)
  682.                                             ||oldTipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_PASSWORD_NON_PRESENTE)
  683.                                             || oldTipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ERRORE_LETTURA_CERTIFICATO)) {
  684.                                         checkWizard = true;
  685.                                         if(listaAliasEstrattiCertificato.size() > 1) {
  686.                                             pd.setMessage("Il file caricato contiene pi&ugrave; certificati, selezionare un'"+ConnettoriCostanti.LABEL_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_ALIAS_CERTIFICATO, MessageType.INFO);
  687.                                         }  
  688.                                     }
  689.                                 }catch(UtilsException e) {
  690.                                     pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  691.                                     tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ERRORE_LETTURA_CERTIFICATO;
  692.                                     tipoCredenzialiSSLAliasCertificato = "";
  693.                                     tipoCredenzialiSSLAliasCertificatoSubject= "";
  694.                                     tipoCredenzialiSSLAliasCertificatoIssuer= "";
  695.                                     tipoCredenzialiSSLAliasCertificatoType= "";
  696.                                     tipoCredenzialiSSLAliasCertificatoVersion= "";
  697.                                     tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  698.                                     tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  699.                                     tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  700.                                     tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  701.                                 }
  702.    
  703.                                 if(!listaAliasEstrattiCertificato.isEmpty() && StringUtils.isNotEmpty(tipoCredenzialiSSLAliasCertificato)) {
  704.                                     try {
  705.                                         Certificate cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato.getValue(), tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLFileCertificatoPassword);
  706.                                         tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  707.                                         tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  708.                                         tipoCredenzialiSSLAliasCertificatoSelfSigned = cSelezionato.getCertificate().isSelfSigned() ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO;
  709.                                         tipoCredenzialiSSLAliasCertificatoSerialNumber = cSelezionato.getCertificate().getSerialNumber() + "";
  710.                                         tipoCredenzialiSSLAliasCertificatoType = cSelezionato.getCertificate().getType();
  711.                                         tipoCredenzialiSSLAliasCertificatoVersion = cSelezionato.getCertificate().getVersion() + "";
  712.                                         tipoCredenzialiSSLAliasCertificatoNotBefore = strutsBean.sdf.format(cSelezionato.getCertificate().getNotBefore());
  713.                                         tipoCredenzialiSSLAliasCertificatoNotAfter = strutsBean.sdf.format(cSelezionato.getCertificate().getNotAfter());
  714.                                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CERTIFICATO_OK;
  715.                                     }catch(UtilsException e) {
  716.                                         pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  717.                                         tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ERRORE_LETTURA_CERTIFICATO;
  718.                                         tipoCredenzialiSSLAliasCertificato = "";
  719.                                         tipoCredenzialiSSLAliasCertificatoSubject= "";
  720.                                         tipoCredenzialiSSLAliasCertificatoIssuer= "";
  721.                                         tipoCredenzialiSSLAliasCertificatoType= "";
  722.                                         tipoCredenzialiSSLAliasCertificatoVersion= "";
  723.                                         tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  724.                                         tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  725.                                         tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  726.                                         tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  727.                                     }
  728.                                 }
  729.                             } else {
  730.                                 tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_PASSWORD_NON_PRESENTE;
  731.                             }
  732.                         } else {
  733.                             try {
  734.                                 Certificate cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLFileCertificato.getValue());
  735.                                 tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  736.                                 tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  737.                                 tipoCredenzialiSSLAliasCertificatoSelfSigned = cSelezionato.getCertificate().isSelfSigned() ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO;
  738.                                 tipoCredenzialiSSLAliasCertificatoSerialNumber = cSelezionato.getCertificate().getSerialNumber() + "";
  739.                                 tipoCredenzialiSSLAliasCertificatoType = cSelezionato.getCertificate().getType();
  740.                                 tipoCredenzialiSSLAliasCertificatoVersion = cSelezionato.getCertificate().getVersion() + "";
  741.                                 tipoCredenzialiSSLAliasCertificatoNotBefore = strutsBean.sdf.format(cSelezionato.getCertificate().getNotBefore());
  742.                                 tipoCredenzialiSSLAliasCertificatoNotAfter = strutsBean.sdf.format(cSelezionato.getCertificate().getNotAfter());
  743.                                
  744.                                 // dalla seconda volta che passo, posso salvare, la prima mostro il recap del certificato estratto
  745.                                
  746.                                 if(oldTipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CERTIFICATO_OK_TIPO_CER)||
  747.                                         oldTipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CERTIFICATO_OK)) {
  748.                                     tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CERTIFICATO_OK;
  749.                                 } else {
  750.                                     tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CERTIFICATO_OK_TIPO_CER;
  751.                                     checkWizard = true;
  752.                                 }
  753.                             }catch(UtilsException e) {
  754.                                 pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  755.                                 tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ERRORE_LETTURA_CERTIFICATO;
  756.                                 tipoCredenzialiSSLAliasCertificato = "";
  757.                                 tipoCredenzialiSSLAliasCertificatoSubject= "";
  758.                                 tipoCredenzialiSSLAliasCertificatoIssuer= "";
  759.                                 tipoCredenzialiSSLAliasCertificatoType= "";
  760.                                 tipoCredenzialiSSLAliasCertificatoVersion= "";
  761.                                 tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  762.                                 tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  763.                                 tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  764.                                 tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  765.                             }
  766.                         }
  767.                     } else {
  768.                         if(tipoCredenzialiSSLAliasCertificatoSubject==null || StringUtils.isEmpty(tipoCredenzialiSSLAliasCertificatoSubject)) {
  769.                             tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO;
  770.                         }
  771.                     }
  772.                 }
  773.                
  774.                 if(StringUtils.isNotEmpty(tipoCredenzialiSSLWizardStep) && ( tipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_CARICA_CERTIFICATO)
  775.                         ||tipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_PASSWORD_NON_PRESENTE)
  776.                         || tipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_WIZARD_STEP_ERRORE_LETTURA_CERTIFICATO)
  777.                         )) {
  778.                     if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO)) {
  779.                         labelButtonSalva = ConnettoriCostanti.LABEL_BUTTON_INVIA_CARICA_CERTIFICATO;
  780.                     }
  781.                 }
  782.                 else {
  783.                     labelButtonSalva = Costanti.LABEL_MONITOR_BUTTON_INVIA;
  784.                 }
  785.             } else {
  786.                 labelButtonSalva = Costanti.LABEL_MONITOR_BUTTON_INVIA;
  787.             }
  788.            
  789.             if(postBackElementName == null && oldTipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD))
  790.                 tipoCredenzialiSSLWizardStep  = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  791.            
  792.             if(labelButtonSalva!= null) {
  793.                 pd.setLabelBottoneInvia(labelButtonSalva);
  794.             }
  795.            
  796.             boolean multipleApiKeysEnabled = false;
  797.             boolean appIdModificabile = ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_APP_ID_MODIFICABILE;
  798.             if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(strutsBean.tipoauthSoggetto)) {
  799.                 multipleApiKeysEnabled = ServletUtils.isCheckBoxEnabled(multipleApiKey);
  800.                 if(appIdModificabile && multipleApiKeysEnabled) {
  801.                     boolean soggettoDefined =
  802.                             idSoggetto!=null &&
  803.                             idSoggetto.getTipo()!=null && !"".equals(idSoggetto.getTipo()) &&
  804.                             idSoggetto.getNome()!=null && !"".equals(idSoggetto.getNome());
  805.                     if( (appId==null || "".equals(appId))
  806.                             &&
  807.                         soggettoDefined){
  808.                         appId = soggettiCore.toAppId(strutsBean.protocollo, idSoggetto, multipleApiKeysEnabled);
  809.                     }
  810.                 }
  811.             }
  812.            
  813.             boolean modificataTipoAutenticazione = false;
  814.             if(oldCredenziali!=null && oldCredenziali.getTipo()!=null) {
  815.                 if(!oldCredenziali.getTipo().getValue().equals(strutsBean.tipoauthSoggetto)) {
  816.                     modificataTipoAutenticazione = true;
  817.                 }
  818.             }
  819.             else {
  820.                 if(strutsBean.tipoauthSoggetto!=null && !"".equals(strutsBean.tipoauthSoggetto) && !ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA.equals(strutsBean.tipoauthSoggetto)) {
  821.                     modificataTipoAutenticazione = true;
  822.                 }
  823.             }
  824.            
  825.             // Se nomehid = null, devo visualizzare la pagina per la modifica dati
  826.             if(ServletUtils.isEditModeInProgress(strutsBean.editMode) || checkWizard){

  827.                 // setto la barra del titolo
  828.                 ServletUtils.setPageDataTitle_ServletChange(pd, SoggettiCostanti.LABEL_SOGGETTI,
  829.                         SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST,
  830.                         soggettiHelper.getLabelNomeSoggetto(strutsBean.protocollo, oldtipoprov , oldnomeprov));

  831.                 if (isRouterParameter == null)
  832.                     strutsBean.isRouter = soggettoConfig.getRouter();
  833.                 if(soggettiCore.isRegistroServiziLocale()){
  834.                     if(strutsBean.portadom==null){
  835.                         strutsBean.portadom = soggettoRegistry.getIdentificativoPorta();
  836.                     }else{
  837.                         String oldProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(oldtipoprov);
  838.                         if(!oldProtocollo.equals(strutsBean.protocollo)){
  839.                             // e' cambiato il protocollo: setto a empty il portadom
  840.                             strutsBean.portadom = null;
  841.                         }
  842.                     }
  843.                     if(strutsBean.descr==null)
  844.                         strutsBean.descr = soggettoRegistry.getDescrizione();
  845.                     if(strutsBean.pdd==null)
  846.                         strutsBean.pdd = soggettoRegistry.getPortaDominio();
  847.                     if(!pddCore.isGestionePddAbilitata(soggettiHelper)){
  848.                         if(strutsBean.dominio==null) {
  849.                             if(pddCore.isPddEsterna(strutsBean.pdd)) {
  850.                                 strutsBean.dominio = SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE;
  851.                             }
  852.                             else {
  853.                                 strutsBean.dominio = SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  854.                             }
  855.                         }
  856.                         else {
  857.                             if(SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE.equals(strutsBean.dominio)) {
  858.                                 strutsBean.pdd = nomePddGestioneLocale;
  859.                             }
  860.                             else {
  861.                                 strutsBean.pdd = null;
  862.                             }
  863.                         }
  864.                     }
  865.                     if(strutsBean.versioneProtocollo==null)
  866.                         strutsBean.versioneProtocollo = soggettoRegistry.getVersioneProtocollo();
  867.                     if(soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_IS_PRIVATO) == null){
  868.                         strutsBean.privato = soggettoRegistry.getPrivato()!=null && soggettoRegistry.getPrivato();
  869.                     }
  870.                     if(strutsBean.codiceIpa==null){
  871.                         strutsBean.codiceIpa = soggettoRegistry.getCodiceIpa();
  872.                     }
  873.                     if(isSupportatoAutenticazioneSoggetti){
  874.                         if (strutsBean.tipoauthSoggetto == null){
  875.                             CredenzialiSoggetto credenziali = null;
  876.                             if(soggettoRegistry.sizeCredenzialiList()>0) {
  877.                                 credenziali = soggettoRegistry.getCredenziali(0);
  878.                             }
  879.                             if (credenziali != null){
  880.                                 if(credenziali.getTipo()!=null)
  881.                                     strutsBean.tipoauthSoggetto = credenziali.getTipo().toString();
  882.                                 strutsBean.utenteSoggetto = credenziali.getUser();
  883.                                 strutsBean.passwordSoggetto = credenziali.getPassword();
  884.                                 if(strutsBean.tipoauthSoggetto!=null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(strutsBean.tipoauthSoggetto)){
  885.                                     tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  886.                                 }
  887.                                 else if(strutsBean.tipoauthSoggetto!=null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(strutsBean.tipoauthSoggetto)){
  888.                                     tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  889.                                     multipleApiKey = credenziali.isAppId() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  890.                                     appId = credenziali.getUser();
  891.                                     apiKey = credenziali.getPassword();
  892.                                 }
  893.                                 strutsBean.principalSoggetto = credenziali.getUser();
  894.                                
  895.                                 if(credenziali.getCertificate() != null) {
  896.                                     tipoCredenzialiSSLFileCertificato.setValue(credenziali.getCertificate());
  897.                                     tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO;
  898.                                     tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  899.                                    
  900.                                     try {
  901.                                         Certificate cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLFileCertificato.getValue());
  902.                                         tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  903.                                         tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  904.                                         tipoCredenzialiSSLAliasCertificatoSelfSigned = cSelezionato.getCertificate().isSelfSigned() ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO;
  905.                                         tipoCredenzialiSSLAliasCertificatoSerialNumber = cSelezionato.getCertificate().getSerialNumber() + "";
  906.                                         tipoCredenzialiSSLAliasCertificatoType = cSelezionato.getCertificate().getType();
  907.                                         tipoCredenzialiSSLAliasCertificatoVersion = cSelezionato.getCertificate().getVersion() + "";
  908.                                         tipoCredenzialiSSLAliasCertificatoNotBefore = strutsBean.sdf.format(cSelezionato.getCertificate().getNotBefore());
  909.                                         tipoCredenzialiSSLAliasCertificatoNotAfter = strutsBean.sdf.format(cSelezionato.getCertificate().getNotAfter());
  910.                                     }catch(UtilsException e) {
  911.                                         pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  912.                                         tipoCredenzialiSSLAliasCertificato = "";
  913.                                         tipoCredenzialiSSLAliasCertificatoSubject= "";
  914.                                         tipoCredenzialiSSLAliasCertificatoIssuer= "";
  915.                                         tipoCredenzialiSSLAliasCertificatoType= "";
  916.                                         tipoCredenzialiSSLAliasCertificatoVersion= "";
  917.                                         tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  918.                                         tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  919.                                         tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  920.                                         tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  921.                                     }
  922.                                 } else {
  923.                                     strutsBean.subjectSoggetto = credenziali.getSubject();
  924.                                     issuerSoggetto = credenziali.getIssuer();
  925.                                     tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE;
  926.                                     tipoCredenzialiSSLConfigurazioneManualeSelfSigned = ( strutsBean.subjectSoggetto != null && strutsBean.subjectSoggetto.equals(issuerSoggetto)) ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  927.                                 }
  928.                             }
  929.                         }
  930.                         if (strutsBean.tipoauthSoggetto == null) {
  931.                             strutsBean.tipoauthSoggetto = ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA;
  932.                         }
  933.                     }

  934.                 }
  935.                 else{
  936.                     if(strutsBean.portadom==null){
  937.                         strutsBean.portadom = soggettoConfig.getIdentificativoPorta();
  938.                     }else{
  939.                         String oldProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(oldtipoprov);
  940.                         if(!oldProtocollo.equals(strutsBean.protocollo)){
  941.                             // e' cambiato il protocollo: setto a empty il portadom
  942.                             strutsBean.portadom = null;
  943.                         }
  944.                     }
  945.                     if(strutsBean.descr==null)
  946.                         strutsBean.descr = soggettoConfig.getDescrizione();
  947.                     if (isRouterParameter == null)
  948.                         strutsBean.isRouter = soggettoConfig.getRouter();
  949.                 }

  950.                 if(strutsBean.pd_url_prefix_rewriter==null){
  951.                     strutsBean.pd_url_prefix_rewriter = soggettoConfig.getPdUrlPrefixRewriter();
  952.                 }
  953.                 if(strutsBean.pa_url_prefix_rewriter==null){
  954.                     strutsBean.pa_url_prefix_rewriter = soggettoConfig.getPaUrlPrefixRewriter();
  955.                 }
  956.                 if(strutsBean.tipoprov==null){
  957.                     strutsBean.tipoprov=oldtipoprov;
  958.                 }
  959.                 if(strutsBean.nomeprov==null){
  960.                     strutsBean.nomeprov=oldnomeprov;
  961.                 }
  962.                 idSoggetto = new IDSoggetto(strutsBean.tipoprov,strutsBean.nomeprov);
  963.                
  964.                 try{
  965.                     Soggetto soggetto = strutsBean.registryReader.getSoggetto(idSoggetto);
  966.                     oldProtocolPropertyList = soggetto.getProtocolPropertyList();
  967.                 }catch(RegistryNotFound r){
  968.                     // ignore
  969.                 }
  970.                
  971.                 // Inizializzazione delle properties da db al primo accesso alla pagina
  972.                 if(strutsBean.protocolPropertiesSet == null){
  973.                     ProtocolPropertiesUtils.mergeProtocolPropertiesRegistry(strutsBean.protocolProperties, oldProtocolPropertyList, strutsBean.consoleOperationType);
  974.                 }

  975.                 // preparo i campi
  976.                 List<DataElement> dati = new ArrayList<>();

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


  978.                 // update della configurazione
  979.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigSoggetto(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, soggettiHelper, strutsBean.protocolProperties,
  980.                         strutsBean.registryReader, strutsBean.configRegistryReader, idSoggetto);
  981.                
  982.                 dati = soggettiHelper.addSoggettiToDati(tipoOp,dati, strutsBean.nomeprov, strutsBean.tipoprov, strutsBean.portadom, strutsBean.descr,
  983.                         strutsBean.isRouter, tipiSoggetti, strutsBean.versioneProtocollo, strutsBean.privato, strutsBean.codiceIpa, versioniProtocollo,
  984.                         isSupportatoCodiceIPA, isSupportatoIdentificativoPorta,
  985.                         pddList,pddEsterneList,nomePddGestioneLocale,strutsBean.pdd,strutsBean.id,oldnomeprov,oldtipoprov,connettore,
  986.                         numPD,strutsBean.pd_url_prefix_rewriter,numPA,strutsBean.pa_url_prefix_rewriter,listaTipiProtocollo,strutsBean.protocollo,
  987.                         isSupportatoAutenticazioneSoggetti,strutsBean.utenteSoggetto,strutsBean.passwordSoggetto,strutsBean.subjectSoggetto,strutsBean.principalSoggetto,strutsBean.tipoauthSoggetto,
  988.                         isPddEsterna,null,strutsBean.dominio,tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword, listaAliasEstrattiCertificato,
  989.                         tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  990.                         tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  991.                         tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  992.                         tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuerSoggetto,tipoCredenzialiSSLWizardStep,
  993.                         changepwd,
  994.                         multipleApiKey, appId, apiKey,
  995.                         visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd, soggettoRegistry.sizeProprietaList());

  996.                 // aggiunta campi custom
  997.                 dati = soggettiHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);

  998.                 // aggiunta opzione per modifica soggetto da configurazione
  999.                 if(strutsBean.modificaOperativo!=null && !"".equals(strutsBean.modificaOperativo)) {
  1000.                     DataElement de = new DataElement();
  1001.                     de.setName(SoggettiCostanti.PARAMETRO_SOGGETTO_MODIFICA_OPERATIVO);
  1002.                     de.setType(DataElementType.HIDDEN);
  1003.                     de.setValue(strutsBean.modificaOperativo);
  1004.                     dati.add(de);
  1005.                 }
  1006.                
  1007.                 pd.setDati(dati);

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

  1009.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI, ForwardParams.CHANGE());

  1010.             }

  1011.             // Controlli sui campi immessi
  1012.             boolean isOk = SoggettiUtilities.soggettiCheckData(
  1013.                     soggettiCore, soggettiHelper,
  1014.                     org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE,
  1015.                     oldnomeprov, oldtipoprov, strutsBean.privato,
  1016.                     tipoOp, strutsBean.id, strutsBean.tipoprov, strutsBean.nomeprov, strutsBean.codiceIpa, strutsBean.pd_url_prefix_rewriter, strutsBean.pa_url_prefix_rewriter,
  1017.                     soggettoRegistry, isSupportatoAutenticazioneSoggetti, strutsBean.descr, strutsBean.pdd);

  1018.             // updateDynamic
  1019.             if(isOk) {
  1020.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigSoggetto(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, soggettiHelper, strutsBean.protocolProperties,
  1021.                         strutsBean.registryReader, strutsBean.configRegistryReader, idSoggetto);        
  1022.             }
  1023.            
  1024.             // Validazione base dei parametri custom
  1025.             if(isOk){
  1026.                 try{
  1027.                     soggettiHelper.validaProtocolProperties(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, strutsBean.protocolProperties);
  1028.                 }catch(ProtocolException e){
  1029.                     ControlStationCore.getLog().error(e.getMessage(),e);
  1030.                     pd.setMessage(e.getMessage());
  1031.                     isOk = false;
  1032.                 }
  1033.             }

  1034.             // Valido i parametri custom se ho gia' passato tutta la validazione prevista
  1035.             if(isOk){
  1036.                 try{
  1037.                     //validazione campi dinamici
  1038.                     strutsBean.consoleDynamicConfiguration.validateDynamicConfigSoggetto(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, soggettiHelper, strutsBean.protocolProperties,
  1039.                             strutsBean.registryReader, strutsBean.configRegistryReader, idSoggetto);
  1040.                 }catch(ProtocolException e){
  1041.                     ControlStationCore.getLog().error(e.getMessage(),e);
  1042.                     pd.setMessage(e.getMessage());
  1043.                     isOk = false;
  1044.                 }
  1045.             }

  1046.             if (!isOk) {

  1047.                 // setto la barra del titolo
  1048.                 ServletUtils.setPageDataTitle_ServletChange(pd, SoggettiCostanti.LABEL_SOGGETTI,
  1049.                         SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST,
  1050.                         soggettiHelper.getLabelNomeSoggetto(strutsBean.protocollo, oldtipoprov , oldnomeprov));

  1051.                 // preparo i campi
  1052.                 List<DataElement> dati = new ArrayList<>();

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

  1054.                 // update della configurazione
  1055.                 strutsBean.consoleDynamicConfiguration.updateDynamicConfigSoggetto(strutsBean.consoleConfiguration, strutsBean.consoleOperationType, soggettiHelper, strutsBean.protocolProperties,
  1056.                         strutsBean.registryReader, strutsBean.configRegistryReader, idSoggetto);

  1057.                 dati = soggettiHelper.addSoggettiToDati(tipoOp,dati, strutsBean.nomeprov, strutsBean.tipoprov, strutsBean.portadom, strutsBean.descr,
  1058.                         strutsBean.isRouter, tipiSoggetti, strutsBean.versioneProtocollo, strutsBean.privato, strutsBean.codiceIpa, versioniProtocollo,
  1059.                         isSupportatoCodiceIPA, isSupportatoIdentificativoPorta,
  1060.                         pddList,pddEsterneList,nomePddGestioneLocale,strutsBean.pdd,strutsBean.id,oldnomeprov,oldtipoprov,connettore,
  1061.                         numPD,strutsBean.pd_url_prefix_rewriter,numPA,strutsBean.pa_url_prefix_rewriter,listaTipiProtocollo,strutsBean.protocollo,
  1062.                         isSupportatoAutenticazioneSoggetti,strutsBean.utenteSoggetto,strutsBean.passwordSoggetto,strutsBean.subjectSoggetto,strutsBean.principalSoggetto,strutsBean.tipoauthSoggetto,
  1063.                         isPddEsterna,null,strutsBean.dominio,tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword, listaAliasEstrattiCertificato,
  1064.                         tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  1065.                         tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  1066.                         tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  1067.                         tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuerSoggetto,tipoCredenzialiSSLWizardStep,
  1068.                         changepwd,
  1069.                         multipleApiKey, appId, apiKey,
  1070.                         visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd, soggettoRegistry.sizeProprietaList());

  1071.                 // aggiunta campi custom
  1072.                 dati = soggettiHelper.addProtocolPropertiesToDatiRegistry(dati, strutsBean.consoleConfiguration,strutsBean.consoleOperationType, strutsBean.protocolProperties,oldProtocolPropertyList,propertiesProprietario);

  1073.                 pd.setDati(dati);

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

  1075.                 return ServletUtils.getStrutsForwardEditModeCheckError(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI, ForwardParams.CHANGE());

  1076.             }

  1077.             // Modifico i dati del soggetto nel db

  1078.             // Se portadom = "", lo imposto
  1079.             // se identificativo porta e' di default allora aggiorno il nome
  1080.             String identificativoPortaCalcolato = null;
  1081.             String identificativoPortaAttuale = strutsBean.portadom;
  1082.             if(!soggettiCore.isRegistroServiziLocale()){
  1083.                 identificativoPortaAttuale = soggettoConfig.getIdentificativoPorta();
  1084.             }
  1085.             idSoggetto = new IDSoggetto(strutsBean.tipoprov,strutsBean.nomeprov);
  1086.             if(strutsBean.portadom!=null && !strutsBean.portadom.equals("")){

  1087.                 IDSoggetto oldSoggetto = new IDSoggetto(oldtipoprov,oldnomeprov);
  1088.                 String oldIdentificativoPorta = soggettiCore.getIdentificativoPortaDefault(strutsBean.protocollo, oldSoggetto);
  1089.                 if (oldIdentificativoPorta.equals(strutsBean.portadom)) {
  1090.                     // gli identificativi porta sono rimasti invariati
  1091.                     // setto l identificativo porta di default (in caso sia
  1092.                     // cambiato il nome)
  1093.                     identificativoPortaCalcolato = soggettiCore.getIdentificativoPortaDefault(strutsBean.protocollo, idSoggetto);
  1094.                 } else {                    
  1095.                     // in questo caso ho cambiato l'identificativo porta
  1096.                     // e il valore inserito nel campo va inserito
  1097.                     identificativoPortaCalcolato = identificativoPortaAttuale;
  1098.                 }
  1099.             }else{
  1100.                 identificativoPortaCalcolato = soggettiCore.getIdentificativoPortaDefault(strutsBean.protocollo, idSoggetto);
  1101.             }

  1102.             boolean secret = false;
  1103.             String secretPassword  = null;
  1104.             String secretUser = null;
  1105.             boolean secretAppId = false;
  1106.            
  1107.             if(soggettiCore.isRegistroServiziLocale()){

  1108.                 soggettoRegistry.setIdentificativoPorta(identificativoPortaCalcolato);
  1109.                 soggettoRegistry.setNome(strutsBean.nomeprov);
  1110.                 soggettoRegistry.setTipo(strutsBean.tipoprov);
  1111.                 if(oldtipoprov!=null && oldnomeprov!=null){
  1112.                     soggettoRegistry.setOldIDSoggettoForUpdate(new IDSoggetto(oldtipoprov, oldnomeprov));
  1113.                 }
  1114.                 soggettoRegistry.setDescrizione(strutsBean.descr);
  1115.                 soggettoRegistry.setVersioneProtocollo(strutsBean.versioneProtocollo);
  1116.                 soggettoRegistry.setPrivato(strutsBean.privato);
  1117.                 soggettoRegistry.setPortaDominio(strutsBean.pdd);

  1118.                 if(isSupportatoAutenticazioneSoggetti){
  1119.                     if(strutsBean.tipoauthSoggetto!=null && !"".equals(strutsBean.tipoauthSoggetto) && !ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA.equals(strutsBean.tipoauthSoggetto)){
  1120.                         CredenzialiSoggetto credenziali = new CredenzialiSoggetto();
  1121.                         credenziali.setTipo(CredenzialeTipo.toEnumConstant(strutsBean.tipoauthSoggetto));
  1122.                         credenziali.setUser(strutsBean.utenteSoggetto);
  1123.                         if(strutsBean.principalSoggetto!=null && !"".equals(strutsBean.principalSoggetto)){
  1124.                             credenziali.setUser(strutsBean.principalSoggetto); // al posto di user
  1125.                         }
  1126.                         credenziali.setPassword(strutsBean.passwordSoggetto);
  1127.                        
  1128.                         ApiKey apiKeyGenerated = null;
  1129.                        
  1130.                         if(strutsBean.tipoauthSoggetto!=null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(strutsBean.tipoauthSoggetto)){
  1131.                             if(ServletUtils.isCheckBoxEnabled(changepwd) || modificataTipoAutenticazione) {
  1132.                                 credenziali.setCertificateStrictVerification(false); // se รจ abilitata la cifratura, verrร  impostata a true nel perform update
  1133.                                 if(soggettiCore.isSoggettiPasswordEncryptEnabled()) {
  1134.                                     secret = true;
  1135.                                 }
  1136.                             }
  1137.                             else if(encryptOldPlainPwd) {
  1138.                                 secret = true;
  1139.                             }
  1140.                             else {
  1141.                                 credenziali.setCertificateStrictVerification(ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLVerificaTuttiICampi));
  1142.                             }
  1143.                         }  
  1144.                         else if(strutsBean.tipoauthSoggetto!=null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(strutsBean.tipoauthSoggetto)){
  1145.                             credenziali.setAppId(multipleApiKeysEnabled);
  1146.                             credenziali.setUser(appId);
  1147.                             credenziali.setPassword(apiKey);
  1148.                             if(ServletUtils.isCheckBoxEnabled(changepwd) || modificataTipoAutenticazione) {
  1149.                                 credenziali.setCertificateStrictVerification(false); // se รจ abilitata la cifratura, verrร  impostata a true nel perform update
  1150.                                 if(multipleApiKeysEnabled) {
  1151.                                     apiKeyGenerated = soggettiCore.newMultipleApiKey();
  1152.                                     if(!appIdModificabile) {
  1153.                                         appId = soggettiCore.toAppId(strutsBean.protocollo, idSoggetto, multipleApiKeysEnabled);
  1154.                                     }
  1155.                                 }
  1156.                                 else {
  1157.                                     appId = soggettiCore.toAppId(strutsBean.protocollo, idSoggetto, multipleApiKeysEnabled);
  1158.                                     apiKeyGenerated = soggettiCore.newApiKey(strutsBean.protocollo, idSoggetto);
  1159.                                 }
  1160.                                 credenziali.setUser(appId);
  1161.                                 credenziali.setPassword(apiKeyGenerated.getPassword());
  1162.                                 if(soggettiCore.isSoggettiPasswordEncryptEnabled()) {
  1163.                                     secret = true;
  1164.                                 }
  1165.                             }
  1166.                             else {
  1167.                                 credenziali.setCertificateStrictVerification(ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLVerificaTuttiICampi));
  1168.                             }
  1169.                         }
  1170.                         else if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL.equals(strutsBean.tipoauthSoggetto)) {
  1171.                             if(tipoCredenzialiSSLSorgente.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO)) {
  1172.                                 Certificate cSelezionato = null;
  1173.                                
  1174.                                 // il certificato non e' cambiato
  1175.                                 if(tipoCredenzialiSSLWizardStep.equals(ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD)) {
  1176.                                     cSelezionato = ArchiveLoader.load(oldCredenziali.getCertificate());
  1177.                                 } else {
  1178.                                     if(tipoCredenzialiSSLTipoArchivio.equals(ArchiveType.CER)) {
  1179.                                         cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLFileCertificato.getValue());
  1180.                                     }else {
  1181.                                         cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato.getValue(), tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLFileCertificatoPassword);
  1182.                                     }
  1183.                                 }
  1184.                                
  1185.                                 credenziali.setCnIssuer(cSelezionato.getCertificate().getIssuer().getCN());
  1186.                                 credenziali.setCnSubject(cSelezionato.getCertificate().getSubject().getCN());
  1187.                                 credenziali.setCertificate(cSelezionato.getCertificate().getCertificate().getEncoded());
  1188.                                 credenziali.setCertificateStrictVerification(ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLVerificaTuttiICampi));
  1189.                             } else { // configurazione manuale
  1190.                                 credenziali.setSubject(strutsBean.subjectSoggetto);
  1191.                                 if(ServletUtils.isCheckBoxEnabled(tipoCredenzialiSSLConfigurazioneManualeSelfSigned)) {
  1192.                                     credenziali.setIssuer(strutsBean.subjectSoggetto);
  1193.                                 } else {
  1194.                                     credenziali.setIssuer(issuerSoggetto);
  1195.                                 }
  1196.                             }
  1197.                         }
  1198.                         else if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_PRINCIPAL.equals(strutsBean.tipoauthSoggetto)) {
  1199.                             credenziali.setUser(strutsBean.principalSoggetto);
  1200.                         }
  1201.                        
  1202.                         if(secret) {
  1203.                             secretUser = credenziali.getUser();
  1204.                             if (apiKeyGenerated!=null) {
  1205.                                 secretPassword = apiKeyGenerated.getApiKey();
  1206.                             }
  1207.                             else {
  1208.                                 secretPassword = credenziali.getPassword();
  1209.                             }
  1210.                             secretAppId = credenziali.isAppId();
  1211.                         }
  1212.                        
  1213.                         if (strutsBean.tipoauthSoggetto!=null && strutsBean.tipoauthSoggetto.equals(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL)) {
  1214.                             if(soggettoRegistry.sizeCredenzialiList()>0) {
  1215.                                 soggettoRegistry.removeCredenziali(0);
  1216.                             }
  1217.                         }
  1218.                         else {
  1219.                             if(soggettoRegistry.getCredenzialiList()!=null) {
  1220.                                 soggettoRegistry.getCredenzialiList().clear();
  1221.                             }
  1222.                         }
  1223.                        
  1224.                         if(soggettoRegistry.getCredenzialiList()==null) {
  1225.                             soggettoRegistry.setCredenzialiList(new ArrayList<>());
  1226.                         }
  1227.                         if(soggettoRegistry.getCredenzialiList().isEmpty()) {
  1228.                             soggettoRegistry.getCredenzialiList().add(credenziali);
  1229.                         }
  1230.                         else {
  1231.                             soggettoRegistry.getCredenzialiList().add(0,credenziali);
  1232.                         }
  1233.                     }
  1234.                     else{
  1235.                         soggettoRegistry.getCredenzialiList().clear();
  1236.                     }
  1237.                 }
  1238.                
  1239.             }

  1240.             if(soggettiCore.isRegistroServiziLocale()){
  1241.                 if ((strutsBean.codiceIpa != null && !"".equals(strutsBean.codiceIpa))) {
  1242.                     String oldCodiceIpa = soggettiCore.getCodiceIPADefault(strutsBean.protocollo, new IDSoggetto(oldtipoprov,oldnomeprov), false);
  1243.                     if (oldCodiceIpa.equals(strutsBean.codiceIpa)) {
  1244.                         // il codice ipa e' rimasto invariato
  1245.                         // setto il codice ipa di default (in caso sia cambiato il nome)
  1246.                         soggettoRegistry.setCodiceIpa(soggettiCore.getCodiceIPADefault(strutsBean.protocollo, new IDSoggetto(strutsBean.tipoprov,strutsBean.nomeprov), false));
  1247.                     } else {
  1248.                         // in questo caso ho cambiato il codice ipa e il valore inserito nel campo va inserito
  1249.                         soggettoRegistry.setCodiceIpa(strutsBean.codiceIpa);
  1250.                     }
  1251.                 } else {
  1252.                     strutsBean.codiceIpa = soggettiCore.getCodiceIPADefault(strutsBean.protocollo, new IDSoggetto(strutsBean.tipoprov,strutsBean.nomeprov), false);
  1253.                     soggettoRegistry.setCodiceIpa(strutsBean.codiceIpa);
  1254.                 }
  1255.             }
  1256.        
  1257.             if(!pddCore.isGestionePddAbilitata(soggettiHelper)){
  1258.                 if(SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE.equals(strutsBean.dominio)) {
  1259.                     strutsBean.pdd = nomePddGestioneLocale;
  1260.                 }
  1261.                 else {
  1262.                     strutsBean.pdd = null;
  1263.                 }
  1264.             }
  1265.            
  1266.             if(soggettiCore.isRegistroServiziLocale()){
  1267.                 if(soggettiCore.isSinglePdD()){
  1268.                     if (strutsBean.pdd==null || strutsBean.pdd.equals("-"))
  1269.                         soggettoRegistry.setPortaDominio(null);
  1270.                     else
  1271.                         soggettoRegistry.setPortaDominio(strutsBean.pdd);
  1272.                 }else{
  1273.                     soggettoRegistry.setPortaDominio(strutsBean.pdd);
  1274.                 }
  1275.             }

  1276.             if(oldtipoprov!=null && oldnomeprov!=null){
  1277.                 soggettoConfig.setOldIDSoggettoForUpdate(new IDSoggetto(oldtipoprov, oldnomeprov));
  1278.             }
  1279.             soggettoConfig.setDescrizione(strutsBean.descr);
  1280.             soggettoConfig.setTipo(strutsBean.tipoprov);
  1281.             soggettoConfig.setNome(strutsBean.nomeprov);
  1282.             soggettoConfig.setDescrizione(strutsBean.descr);
  1283.             soggettoConfig.setIdentificativoPorta(identificativoPortaCalcolato);
  1284.             soggettoConfig.setRouter(strutsBean.isRouter);
  1285.             soggettoConfig.setPdUrlPrefixRewriter(strutsBean.pd_url_prefix_rewriter);
  1286.             soggettoConfig.setPaUrlPrefixRewriter(strutsBean.pa_url_prefix_rewriter);

  1287.             //imposto properties custom
  1288.             soggettoRegistry.setProtocolPropertyList(ProtocolPropertiesUtils.toProtocolPropertiesRegistry(strutsBean.protocolProperties, strutsBean.consoleOperationType, oldProtocolPropertyList));

  1289.             SoggettoCtrlStat sog = new SoggettoCtrlStat(soggettoRegistry, soggettoConfig);
  1290.             sog.setOldNomeForUpdate(oldnomeprov);
  1291.             sog.setOldTipoForUpdate(oldtipoprov);

  1292.             // eseguo l'aggiornamento
  1293.             List<Object> listOggettiDaAggiornare = SoggettiUtilities.getOggettiDaAggiornare(soggettiCore, oldnomeprov, strutsBean.nomeprov, oldtipoprov, strutsBean.tipoprov, sog);
  1294.             soggettiCore.performUpdateOperation(userLogin, soggettiHelper.smista(), listOggettiDaAggiornare.toArray());

  1295.             // sistemo utenze dopo l'aggiornamento
  1296.             // se la pdd รจ diventata esterna o se sono cambiati i dati identificativi
  1297.             IDSoggetto idSoggettoSelezionato = new IDSoggetto(oldtipoprov, oldnomeprov);
  1298.             if(oldpdd!=null && !oldpdd.equals(strutsBean.pdd) && pddCore.isPddEsterna(strutsBean.pdd)) {
  1299.                 utentiCore.modificaSoggettoUtilizzatoConsole(idSoggettoSelezionato.toString(), null); // annullo selezione
  1300.             }
  1301.             else if(!strutsBean.tipoprov.equals(oldtipoprov) || !strutsBean.nomeprov.equals(oldnomeprov)) {
  1302.                 IDSoggetto idNuovoSoggettoSelezionato = new IDSoggetto(strutsBean.tipoprov, strutsBean.nomeprov);
  1303.                 utentiCore.modificaSoggettoUtilizzatoConsole(idSoggettoSelezionato.toString(), idNuovoSoggettoSelezionato.toString()); // modifico i dati
  1304.             }
  1305.            
  1306.             soggettiHelper.deleteBinaryParameters(tipoCredenzialiSSLFileCertificato);
  1307.            
  1308.             // preparo lista
  1309.             ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  1310.                        
  1311.             if (  (oldnomeprov!=null && !oldnomeprov.equals(strutsBean.nomeprov))
  1312.                     ||
  1313.                   (oldtipoprov!=null && !oldtipoprov.equals(strutsBean.tipoprov))
  1314.                  ) {
  1315.                 ServletUtils.removeRisultatiRicercaFromSession(request, session, Liste.SOGGETTI);
  1316.                
  1317.                 User user = ServletUtils.getUserFromSession(request, session);
  1318.                 String oldSog = oldtipoprov+"/"+oldnomeprov;
  1319.                 if(user!=null && oldSog.equals(user.getSoggettoSelezionatoPddConsole())) {
  1320.                     user.setSoggettoSelezionatoPddConsole(strutsBean.tipoprov+"/"+strutsBean.nomeprov);
  1321.                     ricerca.clearFilter(Liste.SERVIZI, Filtri.FILTRO_SOGGETTO); // re-inizializzo per far vedere il nuovo nome
  1322.                 }
  1323.             }
  1324.            
  1325.             // Messaggio 'Please Copy'
  1326.             if(secret) {
  1327.                 soggettiHelper.setSecretPleaseCopy(secretPassword, secretUser, secretAppId, strutsBean.tipoauthSoggetto, OggettoDialogEnum.SOGGETTO, sog.getNome());
  1328.             }
  1329.            
  1330.             if(strutsBean.modificaOperativo!=null && !"".equals(strutsBean.modificaOperativo)) {
  1331.                
  1332.                 List<DataElement> dati = new ArrayList<>();
  1333.                
  1334.                 pd.setDati(dati);
  1335.                
  1336.                 pd.setMessage(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_SOGGETTO_CON_SUCCESSO, Costanti.MESSAGE_TYPE_INFO);

  1337.                 pd.disableEditMode();
  1338.                
  1339.                 // sempre, anche quando passo da operativo ad esterno
  1340.                 generalHelper = new GeneralHelper(session);
  1341.                 gd = generalHelper.initGeneralData(request); // re-inizializzo per ricalcolare il menu in alto a destra
  1342.                
  1343.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  1344.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping,
  1345.                         ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_GENERALE,
  1346.                         ConfigurazioneCostanti.TIPO_OPERAZIONE_CONFIGURAZIONE_GENERALE);
  1347.                
  1348.             }
  1349.             else {
  1350.            
  1351.                 if(soggettiCore.isRegistroServiziLocale()){
  1352.                     List<Soggetto> listaSoggetti = null;
  1353.                     if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  1354.                         listaSoggetti = soggettiCore.soggettiRegistroList(null, ricerca);
  1355.                     }else{
  1356.                         listaSoggetti = soggettiCore.soggettiRegistroList(userLogin, ricerca);
  1357.                     }
  1358.                     soggettiHelper.prepareSoggettiList(listaSoggetti, ricerca);
  1359.                 }
  1360.                 else{
  1361.                     List<org.openspcoop2.core.config.Soggetto> listaSoggetti = null;
  1362.                     if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  1363.                         listaSoggetti = soggettiCore.soggettiList(null, ricerca);
  1364.                     }else{
  1365.                         listaSoggetti = soggettiCore.soggettiList(userLogin, ricerca);
  1366.                     }
  1367.                     soggettiHelper.prepareSoggettiConfigList(listaSoggetti, ricerca);
  1368.                 }

  1369.                 // sempre, anche quando passo da operativo ad esterno
  1370.                 generalHelper = new GeneralHelper(session);
  1371.                 gd = generalHelper.initGeneralData(request); // re-inizializzo per ricalcolare il menu in alto a destra
  1372.                
  1373.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);

  1374.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI, ForwardParams.CHANGE());
  1375.                
  1376.             }

  1377.         } catch (Exception e) {
  1378.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping,
  1379.                     SoggettiCostanti.OBJECT_NAME_SOGGETTI, ForwardParams.CHANGE());
  1380.         }
  1381.     }
  1382. }