ServiziApplicativiVerificaCertificati.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.sa;

  21. import java.net.URLEncoder;
  22. import java.util.ArrayList;
  23. import java.util.List;
  24. import java.util.Map;
  25. import java.util.Properties;

  26. import javax.net.ssl.KeyManagerFactory;
  27. import javax.net.ssl.TrustManagerFactory;
  28. import javax.servlet.http.HttpServletRequest;
  29. import javax.servlet.http.HttpServletResponse;
  30. import javax.servlet.http.HttpSession;

  31. import org.apache.commons.lang.StringUtils;
  32. import org.apache.struts.action.Action;
  33. import org.apache.struts.action.ActionForm;
  34. import org.apache.struts.action.ActionForward;
  35. import org.apache.struts.action.ActionMapping;
  36. import org.openspcoop2.core.commons.CoreException;
  37. import org.openspcoop2.core.commons.Filtri;
  38. import org.openspcoop2.core.commons.Liste;
  39. import org.openspcoop2.core.config.Connettore;
  40. import org.openspcoop2.core.config.Credenziali;
  41. import org.openspcoop2.core.config.GenericProperties;
  42. import org.openspcoop2.core.config.InvocazioneCredenziali;
  43. import org.openspcoop2.core.config.InvocazionePorta;
  44. import org.openspcoop2.core.config.InvocazionePortaGestioneErrore;
  45. import org.openspcoop2.core.config.InvocazioneServizio;
  46. import org.openspcoop2.core.config.Property;
  47. import org.openspcoop2.core.config.ProtocolProperty;
  48. import org.openspcoop2.core.config.ServizioApplicativo;
  49. import org.openspcoop2.core.config.constants.CostantiConfigurazione;
  50. import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
  51. import org.openspcoop2.core.constants.CostantiDB;
  52. import org.openspcoop2.core.constants.TipiConnettore;
  53. import org.openspcoop2.core.constants.TransferLengthModes;
  54. import org.openspcoop2.core.controllo_traffico.ConfigurazioneGenerale;
  55. import org.openspcoop2.core.id.IDServizioApplicativo;
  56. import org.openspcoop2.core.id.IDSoggetto;
  57. import org.openspcoop2.core.registry.Soggetto;
  58. import org.openspcoop2.pdd.core.connettori.ConnettoreUtils;
  59. import org.openspcoop2.pdd.core.jmx.JMXUtils;
  60. import org.openspcoop2.pdd.core.token.PolicyNegoziazioneToken;
  61. import org.openspcoop2.pdd.core.token.TokenUtilities;
  62. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  63. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  64. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  65. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  66. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  67. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  68. import org.openspcoop2.protocol.sdk.properties.ProtocolPropertiesUtils;
  69. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  70. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  71. import org.openspcoop2.utils.UtilsException;
  72. import org.openspcoop2.utils.certificate.ArchiveLoader;
  73. import org.openspcoop2.utils.certificate.Certificate;
  74. import org.openspcoop2.utils.certificate.KeystoreParams;
  75. import org.openspcoop2.web.ctrlstat.core.CertificateChecker;
  76. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  77. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  78. import org.openspcoop2.web.ctrlstat.costanti.ConnettoreServletType;
  79. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  80. import org.openspcoop2.web.ctrlstat.plugins.ExtendedConnettore;
  81. import org.openspcoop2.web.ctrlstat.plugins.servlet.ServletExtendedConnettoreUtils;
  82. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  83. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  84. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
  85. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoreStatusParams;
  86. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  87. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriHelper;
  88. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  89. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  90. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCore;
  91. import org.openspcoop2.web.ctrlstat.servlet.soggetti.SoggettiCostanti;
  92. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  93. import org.openspcoop2.web.lib.mvc.Costanti;
  94. import org.openspcoop2.web.lib.mvc.DataElement;
  95. import org.openspcoop2.web.lib.mvc.DataElementType;
  96. import org.openspcoop2.web.lib.mvc.ForwardParams;
  97. import org.openspcoop2.web.lib.mvc.GeneralData;
  98. import org.openspcoop2.web.lib.mvc.PageData;
  99. import org.openspcoop2.web.lib.mvc.Parameter;
  100. import org.openspcoop2.web.lib.mvc.ServletUtils;
  101. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  102. /**
  103.  * ServiziApplicativiVerificaCertificati
  104.  *
  105.  * @author Andrea Poli (poli@link.it)
  106.  * @author Giuliano Pintori (pintori@link.it)
  107.  * @author $Author$
  108.  * @version $Rev$, $Date$
  109.  *
  110.  */
  111. public class ServiziApplicativiVerificaCertificati extends Action {
  112.    
  113.     @Override
  114.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  116.         // Inizializzo PageData
  117.         PageData pd = new PageData();

  118.         GeneralHelper generalHelper = new GeneralHelper(session);

  119.         // Inizializzo GeneralData
  120.         GeneralData gd = generalHelper.initGeneralData(request);

  121.         try {
  122.             ServiziApplicativiHelper saHelper = new ServiziApplicativiHelper(request, pd, session);
  123.            
  124.             ServiziApplicativiCore saCore = new ServiziApplicativiCore();
  125.             SoggettiCore soggettiCore = new SoggettiCore(saCore);
  126.             ConfigurazioneCore confCore = new ConfigurazioneCore(saCore);
  127.             PddCore pddCore = new PddCore(saCore);
  128.            
  129.             String verificaCertificatiFromLista = saHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA);
  130.             boolean arrivoDaLista = "true".equalsIgnoreCase(verificaCertificatiFromLista);
  131.            
  132.             // prelevo il flag che mi dice da quale pagina ho acceduto la sezione
  133.             Integer parentSA = ServletUtils.getIntegerAttributeFromSession(ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT, session, request);
  134.             if(parentSA == null) parentSA = ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  135.             boolean useIdSogg = (parentSA!=null && parentSA.intValue() == ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO);
  136.            
  137.             String id = saHelper.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID);
  138.             int idServizioApplicativo = Integer.parseInt(id);
  139.             String idProvider = saHelper.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  140.            
  141.             String alias = saHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_SISTEMA_NODO_CLUSTER);
  142.            
  143.             // Preparo il menu
  144.             saHelper.makeMenu();
  145.            
  146.             // Prendo la lista di aliases
  147.             List<String> aliases = confCore.getJmxPdDAliases();
  148.             if(aliases==null || aliases.isEmpty()){
  149.                 throw new CoreException("Pagina non prevista, la sezione configurazione non permette di accedere a questa pagina, se la configurazione non e' corretta");
  150.             }

  151.             // Prendo il nome e il provider del servizioApplicativo
  152.             ServizioApplicativo sa = saCore.getServizioApplicativo(idServizioApplicativo);
  153.             String nomeSA = sa.getNome();
  154.             IDSoggetto idSoggettoProprietario = new IDSoggetto(sa.getTipoSoggettoProprietario(), sa.getNomeSoggettoProprietario());
  155.             IDServizioApplicativo idServizioApplicativoTmp = new IDServizioApplicativo();
  156.             idServizioApplicativoTmp.setIdSoggettoProprietario(idSoggettoProprietario);
  157.             idServizioApplicativoTmp.setNome(nomeSA);
  158.             String tipoProtocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(sa.getTipoSoggettoProprietario());
  159.            
  160.             Soggetto soggettoProprietario = soggettiCore.getSoggettoRegistro(idSoggettoProprietario);
  161.             String dominio = pddCore.isPddEsterna(soggettoProprietario.getPortaDominio()) ? SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE : SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  162.        
  163.             boolean tokenWithHttsSupportato = false;
  164.             if(tipoProtocollo!=null) {
  165.                 ProtocolFactoryManager protocolFactoryManager = ProtocolFactoryManager.getInstance();
  166.                 tokenWithHttsSupportato = protocolFactoryManager.getProtocolFactoryByName(tipoProtocollo).createProtocolConfiguration().isSupportatoAutenticazioneApplicativiHttpsConToken();
  167.             }
  168.                        
  169.             List<Parameter> parametersServletSAChange = new ArrayList<>();
  170.             Parameter pIdSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_ID, sa.getId()+"");
  171.             parametersServletSAChange.add(pIdSA);
  172.             Parameter pIdSoggettoSA = new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER, sa.getIdSoggetto()+"");
  173.             parametersServletSAChange.add(pIdSoggettoSA);
  174.             if(dominio != null) {
  175.                 Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  176.                 parametersServletSAChange.add(pDominio);
  177.             }
  178.            
  179.             boolean modalitaCompleta = saHelper.isModalitaCompleta();
  180.             String tmpTitle = null;
  181.             String protocolloSoggetto = null;
  182.             if(useIdSogg){
  183.                 if(saCore.isRegistroServiziLocale()){
  184.                     Soggetto tmpSogg =  soggettiCore.getSoggettoRegistro(Integer.parseInt(idProvider));
  185.                     protocolloSoggetto = soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  186.                     tmpTitle = saHelper.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  187.                 }else{
  188.                     org.openspcoop2.core.config.Soggetto tmpSogg = soggettiCore.getSoggetto(Integer.parseInt(idProvider));
  189.                     protocolloSoggetto = soggettiCore.getProtocolloAssociatoTipoSoggetto(tmpSogg.getTipo());
  190.                     tmpTitle = saHelper.getLabelNomeSoggetto(protocolloSoggetto, tmpSogg.getTipo() , tmpSogg.getNome());
  191.                 }
  192.                
  193.             }
  194.            
  195.             String verificaConnettivitaS = saHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTIVITA);
  196.             boolean verificaConnettivita = "true".equalsIgnoreCase(verificaConnettivitaS);
  197.            
  198.             // setto la barra del titolo
  199.             String labelApplicativi = ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI;
  200.             String labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_DI;
  201.             if(!modalitaCompleta) {
  202.                 labelApplicativi = ServiziApplicativiCostanti.LABEL_APPLICATIVI;
  203.                 labelApplicativiDi = ServiziApplicativiCostanti.LABEL_PARAMETRO_APPLICATIVI_DI;
  204.             }
  205.            
  206.             List<Parameter> lstParam = new ArrayList<>();
  207.             if(!useIdSogg){
  208.                 lstParam.add(new Parameter(labelApplicativi, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST));
  209.             } else {
  210.                 String provider = saHelper.getParameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER);
  211.                 lstParam.add(new Parameter(ServiziApplicativiCostanti.LABEL_PARAMETRO_SERVIZI_APPLICATIVI_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST));
  212.                 lstParam.add(new Parameter(labelApplicativiDi + tmpTitle, ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_LIST, new Parameter(ServiziApplicativiCostanti.PARAMETRO_SERVIZI_APPLICATIVI_PROVIDER,provider)));
  213.             }
  214.            
  215.             String labelApplicativo = sa.getNome();
  216.            
  217.             if(arrivoDaLista) {
  218.                 String labelVerifica = (verificaConnettivita ? ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_VERIFICA_CONNETTIVITA_DI : ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI_DI)  +
  219.                         labelApplicativo;
  220.                 lstParam.add(new Parameter(labelVerifica, null));
  221.             }
  222.             else {
  223.                 lstParam.add(new Parameter(sa.getNome(), ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE, parametersServletSAChange.toArray(new Parameter[parametersServletSAChange.size()])));
  224.                 String labelVerifica = (verificaConnettivita ? ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_VERIFICA_CONNETTIVITA : ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI);
  225.                 lstParam.add(new Parameter(labelVerifica, null));
  226.             }
  227.            
  228.             // setto la barra del titolo
  229.             ServletUtils.setPageDataTitle(pd, lstParam );
  230.                        
  231.             List<DataElement> dati = new ArrayList<>();
  232.             dati.add(ServletUtils.getDataElementForEditModeFinished());

  233.            
  234.            
  235.            
  236.             // -- raccolgo dati
  237.            
  238.             // client
  239.             boolean ssl = false;
  240.             boolean sslManuale = false;
  241.             boolean piuCertificatiAssociatiEntita = false;
  242.             boolean sicurezzaMessaggioModi = false;
  243.            
  244.             // server
  245.             boolean serverHttps = false;
  246.             boolean findConnettoreHttpConPrefissoHttps = false;
  247.             String tokenPolicyNegoziazione = null;
  248.            
  249.             InvocazionePorta ip = null;
  250.             Connettore connettore = null;
  251.            
  252.             if(!verificaConnettivita) {
  253.                 int countSsl = 0;
  254.                 ip = sa.getInvocazionePorta();
  255.                 for (int i = 0; i < ip.sizeCredenzialiList(); i++) {
  256.                     Credenziali c = ip.getCredenziali(i);
  257.                     if(org.openspcoop2.core.config.constants.CredenzialeTipo.SSL.equals(c.getTipo())) {
  258.                         if(c.getCertificate()!=null) {
  259.                             ssl = true;
  260.                             countSsl++;
  261.                             }
  262.                         else {
  263.                             sslManuale=true;
  264.                         }
  265.                     }
  266.                 }
  267.                 piuCertificatiAssociatiEntita = countSsl>1;
  268.                            
  269.                 // Verifica configurazione modi di sicurezza
  270.                 boolean modi = saCore.isProfiloModIPA(tipoProtocollo);
  271.                 if(modi){
  272.                     KeystoreParams keystoreParams = org.openspcoop2.protocol.utils.ModIUtils.getApplicativoKeystoreParams(sa.getProtocolPropertyList());
  273.                     sicurezzaMessaggioModi = keystoreParams!= null;
  274.                 }
  275.                
  276.                 // connettore https
  277.                 if(ServiziApplicativiCostanti.VALUE_SERVIZI_APPLICATIVI_TIPO_SERVER.equals(sa.getTipo()) &&
  278.                     sa.getInvocazioneServizio()!=null) {
  279.                     connettore = sa.getInvocazioneServizio().getConnettore();
  280.                     TipiConnettore tipo = TipiConnettore.toEnumFromName(connettore.getTipo());
  281.                                            
  282.                     if( TipiConnettore.HTTP.equals(tipo)
  283.                             ||
  284.                         TipiConnettore.HTTPS.equals(tipo) ) {
  285.                    
  286.                         if(TipiConnettore.HTTPS.equals(tipo)) {
  287.                             serverHttps = true;
  288.                         }
  289.                         else {
  290.                             String endpoint = ConnettoreUtils.getEndpointConnettore(connettore, false);
  291.                             if(endpoint!=null) {
  292.                                 findConnettoreHttpConPrefissoHttps = endpoint.trim().startsWith("https");
  293.                             }
  294.                         }
  295.                        
  296.                         String tokenPolicy = ConnettoreUtils.getNegoziazioneTokenPolicyConnettore(connettore);
  297.                         if(tokenPolicy!=null && StringUtils.isNotEmpty(tokenPolicy)) {
  298.                             tokenPolicyNegoziazione = tokenPolicy;
  299.                         }
  300.                        
  301.                     }
  302.                 }
  303.             }
  304.             else {
  305.                 connettore = sa.getInvocazioneServizio().getConnettore();
  306.             }
  307.            
  308.            
  309.             boolean verificaCertificatiEffettuata = false;
  310.            
  311.             if(!verificaConnettivita &&
  312.                     !ssl && !sicurezzaMessaggioModi && // client
  313.                     !serverHttps && !findConnettoreHttpConPrefissoHttps && tokenPolicyNegoziazione==null
  314.                     ) {
  315.                 if(sslManuale) {
  316.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_PRESENTE_SOLO_CONFIGURAZIONE_MANUALE,
  317.                             Costanti.MESSAGE_TYPE_INFO);
  318.                 }
  319.                 else {
  320.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_NON_PRESENTI,
  321.                             Costanti.MESSAGE_TYPE_INFO);
  322.                 }
  323.                
  324.                 pd.disableEditMode();
  325.                
  326.                 verificaCertificatiEffettuata = true;
  327.             }
  328.             else {
  329.                
  330.                 boolean sceltaClusterId = true;
  331.                 if(!verificaConnettivita) {
  332.                     sceltaClusterId = soggettiCore.isVerificaCertificatiSceltaClusterId();
  333.                 }
  334.                
  335.                 if(aliases.size()==1 || alias!=null || !sceltaClusterId) {
  336.                    
  337.                     if(alias==null && !sceltaClusterId) {
  338.                         alias = CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI;
  339.                     }
  340.            
  341.                     // -- verifica      
  342.                    
  343.                     if(verificaConnettivita) {
  344.                         String aliasDescrizione = null;
  345.                         if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)){
  346.                             aliasDescrizione = aliases.get(0);
  347.                         }
  348.                         else {
  349.                             aliasDescrizione = alias!=null ? alias : aliases.get(0);
  350.                         }
  351.                         saHelper.addDescrizioneVerificaConnettivitaToDati(dati, connettore, null,
  352.                                 aliasDescrizione
  353.                                 );
  354.                        
  355.                         if (!saHelper.isEditModeInProgress()) {

  356.                             List<String> aliasesForCheck = new ArrayList<>();
  357.                             if(aliases.size()==1) {
  358.                                 aliasesForCheck.add(aliases.get(0));
  359.                             }
  360.                             else if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)) {
  361.                                 aliasesForCheck.addAll(aliases);
  362.                             }
  363.                             else {
  364.                                 aliasesForCheck.add(alias);
  365.                             }
  366.                                                        
  367.                             boolean rilevatoErrore = false;
  368.                             StringBuilder sbPerOperazioneEffettuata = new StringBuilder();
  369.                             int index = 0;
  370.                             for (String aliasForVerificaConnettore : aliasesForCheck) {
  371.                                
  372.                                 String risorsa = confCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConfigurazionePdD(aliasForVerificaConnettore);

  373.                                 StringBuilder bfExternal = new StringBuilder();
  374.                                 String descrizione = confCore.getJmxPdDDescrizione(aliasForVerificaConnettore);
  375.                                 if(aliases.size()>1) {
  376.                                     if(index>0) {
  377.                                         bfExternal.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  378.                                     }
  379.                                     bfExternal.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_SISTEMA_NODO_CLUSTER).append(" ").append(descrizione).append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  380.                                 }                      
  381.                                 try{
  382.                                     Boolean slowOperation = true; // altrimenti un eventuale connection timeout (es. 10 secondi) termina dopo il readTimeout associato all'invocazione dell'operazione via http check e quindi viene erroneamenteo ritornato un readTimeout
  383.                                     String nomeMetodo = confCore.getJmxPdDConfigurazioneSistemaNomeMetodoCheckConnettoreById(aliasForVerificaConnettore);
  384.                                     String stato = confCore.getInvoker().invokeJMXMethod(aliasForVerificaConnettore, confCore.getJmxPdDConfigurazioneSistemaType(aliasForVerificaConnettore),
  385.                                             risorsa,
  386.                                             nomeMetodo,
  387.                                             slowOperation,
  388.                                             connettore.getId()+"");
  389.                                     if(
  390.                                             JMXUtils.MSG_OPERAZIONE_EFFETTUATA_SUCCESSO.equals(stato)
  391.                                             ||
  392.                                             (stato!=null && stato.startsWith(JMXUtils.MSG_OPERAZIONE_EFFETTUATA_SUCCESSO_PREFIX))
  393.                                         ){
  394.                                         bfExternal.append(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_EFFETTUATO_CON_SUCCESSO);
  395.                                     }
  396.                                     else{
  397.                                         rilevatoErrore = true;
  398.                                         bfExternal.append(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_FALLITA);
  399.                                         if(stato!=null && stato.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)) {
  400.                                             bfExternal.append(stato.substring(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA.length()));
  401.                                         }
  402.                                         else {
  403.                                             bfExternal.append(stato);
  404.                                         }
  405.                                     }
  406.                                 }catch(Exception e){
  407.                                     ControlStationCore.logError("Errore durante la verifica del connettore (jmxResource '"+risorsa+"') (node:"+aliasForVerificaConnettore+"): "+e.getMessage(),e);
  408.                                     rilevatoErrore = true;
  409.                                     String stato = e.getMessage();
  410.                                     bfExternal.append(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_FALLITA);
  411.                                     if(stato.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)) {
  412.                                         bfExternal.append(stato.substring(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA.length()));
  413.                                     }
  414.                                     else {
  415.                                         bfExternal.append(stato);
  416.                                     }
  417.                                 }
  418.            
  419.                                 if(sbPerOperazioneEffettuata.length()>0){
  420.                                     sbPerOperazioneEffettuata.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  421.                                 }
  422.                                 sbPerOperazioneEffettuata.append(bfExternal.toString());
  423.                                
  424.                                 index++;
  425.                             }
  426.                             if(sbPerOperazioneEffettuata!=null){
  427.                                 if(rilevatoErrore)
  428.                                     pd.setMessage(sbPerOperazioneEffettuata.toString());
  429.                                 else
  430.                                     pd.setMessage(sbPerOperazioneEffettuata.toString(),Costanti.MESSAGE_TYPE_INFO);
  431.                             }
  432.            
  433.                             pd.disableEditMode();
  434.                         }
  435.                     }
  436.                     else {
  437.                    
  438.                         List<String> aliasesForCheck = new ArrayList<>();
  439.                         boolean all = false;
  440.                         if(aliases.size()==1) {
  441.                             aliasesForCheck.add(aliases.get(0));
  442.                         }
  443.                         else if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)) {
  444.                             aliasesForCheck.addAll(aliases);
  445.                             all = true;
  446.                         }
  447.                         else {
  448.                             aliasesForCheck.add(alias);
  449.                         }
  450.                                    
  451.                         CertificateChecker certificateChecker = null;
  452.                         if(all) {
  453.                             certificateChecker = soggettiCore.getJmxPdDCertificateChecker();
  454.                         }
  455.                         else {
  456.                             certificateChecker = soggettiCore.newJmxPdDCertificateChecker(aliasesForCheck);
  457.                         }
  458.                         StringBuilder sbDetailsError = new StringBuilder();
  459.                        
  460.                         int sogliaWarningGiorni = soggettiCore.getVerificaCertificatiWarningExpirationDays();
  461.                        
  462.                        
  463.                         String posizioneErrore = null;
  464.                         String extraErrore = null;
  465.                        
  466.                         // verifica ssl
  467.                         StringBuilder sbDetailsWarningSsl = new StringBuilder();
  468.                         String posizioneWarningSsl = null;
  469.                         if(ssl) {
  470.                             certificateChecker.checkApplicativo(sbDetailsError, sbDetailsWarningSsl,
  471.                                 ssl, false, false, sa,
  472.                                 sogliaWarningGiorni);
  473.                             if(sbDetailsError.length()>0) {
  474.                                 posizioneErrore = labelApplicativo;
  475.                             }
  476.                             else if(sbDetailsWarningSsl.length()>0) {
  477.                                 posizioneWarningSsl = labelApplicativo;
  478.                             }
  479.                         }
  480.                        
  481.                         // verifica modi
  482.                         StringBuilder sbDetailsWarningModi = new StringBuilder();
  483.                         String posizioneWarningModi = null;
  484.                         if(sbDetailsError.length()<=0 && sicurezzaMessaggioModi) {
  485.                             certificateChecker.checkApplicativo(sbDetailsError, sbDetailsWarningSsl,
  486.                                     false, sicurezzaMessaggioModi, false, sa,
  487.                                     sogliaWarningGiorni);
  488.                             if(sbDetailsError.length()>0) {
  489.                                 posizioneErrore = labelApplicativo;
  490.                             }
  491.                             else if(sbDetailsWarningModi.length()>0) {
  492.                                 posizioneWarningModi = labelApplicativo;
  493.                             }
  494.                         }
  495.                        
  496.                         // verifica connettore https
  497.                         StringBuilder sbDetailsWarningHttps = new StringBuilder();
  498.                         String posizioneWarningHttps = null;
  499.                         if(sbDetailsError.length()<=0 && serverHttps) {
  500.                             certificateChecker.checkApplicativo(sbDetailsError, sbDetailsWarningSsl,
  501.                                     false, false, serverHttps, sa,
  502.                                     sogliaWarningGiorni);
  503.                             if(sbDetailsError.length()>0) {
  504.                                 posizioneErrore = labelApplicativo;
  505.                             }
  506.                             else if(sbDetailsWarningHttps.length()>0) {
  507.                                 posizioneWarningHttps = labelApplicativo;
  508.                             }
  509.                         }
  510.                        
  511.                         // verifica token policy
  512.                         StringBuilder sbDetailsWarningPolicy = new StringBuilder();
  513.                         String posizioneWarningPolicy = null;
  514.                         if(sbDetailsError.length()<=0 && tokenPolicyNegoziazione!=null) {
  515.                             GenericProperties gp = confCore.getGenericProperties(tokenPolicyNegoziazione, org.openspcoop2.pdd.core.token.Costanti.TIPOLOGIA_RETRIEVE, false);
  516.                             if(gp!=null) {
  517.                                 PolicyNegoziazioneToken policyNegoziazione = TokenUtilities.convertTo(gp);
  518.                                
  519.                                 boolean https = false;
  520.                                 String endpoint = policyNegoziazione.getEndpoint();
  521.                                 if(StringUtils.isNotEmpty(endpoint)) {
  522.                                     if(policyNegoziazione.isEndpointHttps()) {
  523.                                         https = true;
  524.                                     }
  525.                                     else if(endpoint!=null && !findConnettoreHttpConPrefissoHttps) {
  526.                                         findConnettoreHttpConPrefissoHttps = endpoint.trim().startsWith("https");
  527.                                     }
  528.                                 }
  529.                                                                    
  530.                                 boolean signedJwt = false;
  531.                                 KeystoreParams keystoreParams = null;
  532.                                 try {
  533.                                     if(policyNegoziazione.isRfc7523x509Grant()) {
  534.                                         // JWS Compact              
  535.                                         keystoreParams = TokenUtilities.getSignedJwtKeystoreParams(policyNegoziazione);
  536.                                     }
  537.                                 }catch(Exception t) {
  538.                                     throw new DriverConfigurazioneException(t.getMessage(),t);
  539.                                 }
  540.                                
  541.                                 boolean riferimentoApplicativoModi = keystoreParams!=null && org.openspcoop2.pdd.core.token.Costanti.KEYSTORE_TYPE_APPLICATIVO_MODI_VALUE.equalsIgnoreCase(keystoreParams.getPath());
  542.                                 boolean riferimentoFruizioneModi = keystoreParams!=null && org.openspcoop2.pdd.core.token.Costanti.KEYSTORE_TYPE_FRUIZIONE_MODI_VALUE.equalsIgnoreCase(keystoreParams.getPath());
  543.                                 if(keystoreParams!=null &&
  544.                                         !riferimentoApplicativoModi &&
  545.                                         !riferimentoFruizioneModi) {
  546.                                     signedJwt = true;
  547.                                 }
  548.                                
  549.                                 if(https || signedJwt) {
  550.                                     certificateChecker.checkTokenPolicyNegoziazione(sbDetailsError, sbDetailsWarningPolicy,
  551.                                         https, signedJwt,
  552.                                         gp,
  553.                                         sogliaWarningGiorni);
  554.                                 }
  555.                             }
  556.                             if(sbDetailsError.length()>0) {
  557.                                 posizioneErrore = labelApplicativo;
  558.                             }
  559.                             else if(sbDetailsWarningPolicy.length()>0) {
  560.                                 posizioneWarningPolicy = labelApplicativo;
  561.                             }
  562.                         }
  563.                        
  564.                         // verifica jvm
  565.                         StringBuilder sbDetailsWarningCertificatiJvm = new StringBuilder();
  566.                         String posizioneWarningCertificatiJvm = null;
  567.                         String extraWarningCertificatiJvm = null;
  568.                         if(sbDetailsError.length()<=0 && findConnettoreHttpConPrefissoHttps) {
  569.                             certificateChecker.checkConfigurazioneJvm(sbDetailsError, sbDetailsWarningCertificatiJvm, sogliaWarningGiorni);
  570.                             if(sbDetailsError.length()>0) {
  571.                                 posizioneErrore = labelApplicativo;
  572.                                 extraErrore = "Configurazione https nella JVM";
  573.                             }
  574.                             else if(sbDetailsWarningCertificatiJvm.length()>0) {
  575.                                 posizioneWarningCertificatiJvm = labelApplicativo;
  576.                                 extraWarningCertificatiJvm = "Configurazione https nella JVM";
  577.                             }
  578.                         }
  579.                        
  580.                         // analisi warning
  581.                         String warning = null;
  582.                         String posizioneWarning = null;
  583.                         String extraWarning = null;
  584.                         if(sbDetailsError.length()<=0) {
  585.                             if(sbDetailsWarningSsl.length()>0) {
  586.                                 warning = sbDetailsWarningSsl.toString();
  587.                                 posizioneWarning = posizioneWarningSsl;
  588.                             }
  589.                             else if(sbDetailsWarningModi.length()>0) {
  590.                                 warning = sbDetailsWarningModi.toString();
  591.                                 posizioneWarning = posizioneWarningModi;
  592.                             }
  593.                             else if(sbDetailsWarningHttps.length()>0) {
  594.                                 warning = sbDetailsWarningHttps.toString();
  595.                                 posizioneWarning = posizioneWarningHttps;
  596.                             }
  597.                             else if(sbDetailsWarningPolicy.length()>0) {
  598.                                 warning = sbDetailsWarningPolicy.toString();
  599.                                 posizioneWarning = posizioneWarningPolicy;
  600.                             }
  601.                             else if(sbDetailsWarningCertificatiJvm.length()>0) {
  602.                                 warning = sbDetailsWarningCertificatiJvm.toString();
  603.                                 posizioneWarning = posizioneWarningCertificatiJvm;
  604.                                 extraWarning = extraWarningCertificatiJvm;
  605.                             }
  606.                         }
  607.                        
  608.                         // esito
  609.                         List<String> formatIds = new ArrayList<>();
  610.                         soggettiCore.formatVerificaCertificatiEsito(pd, formatIds,
  611.                                 (sbDetailsError.length()>0 ? sbDetailsError.toString() : null), extraErrore, posizioneErrore,
  612.                                 warning, extraWarning, posizioneWarning,
  613.                                 piuCertificatiAssociatiEntita);
  614.                                
  615.                         pd.disableEditMode();
  616.                    
  617.                         verificaCertificatiEffettuata = true;
  618.                        
  619.                     }
  620.                    
  621.                 } else {
  622.                
  623.                     DataElement deTestConnettivita = new DataElement();
  624.                     deTestConnettivita.setType(DataElementType.TITLE);
  625.                     deTestConnettivita.setLabel(ServiziApplicativiCostanti.LABEL_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI);
  626.                     dati.add(deTestConnettivita);
  627.                    
  628.                     saHelper.addVerificaCertificatoSceltaAlias(aliases, dati);
  629.                 }
  630.             }
  631.            
  632.             pd.setLabelBottoneInvia(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_BOTTONE);
  633.            
  634.             dati = saHelper.addServizioApplicativoHiddenToDati(dati, id, idProvider, dominio, sa.getNome());
  635.            
  636.             DataElement de = new DataElement();
  637.             de.setValue(arrivoDaLista+"");
  638.             de.setType(DataElementType.HIDDEN);
  639.             de.setName(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA);
  640.             dati.add(de);
  641.            
  642.             de = new DataElement();
  643.             de.setValue(verificaConnettivita+"");
  644.             de.setType(DataElementType.HIDDEN);
  645.             de.setName(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTIVITA);
  646.             dati.add(de);
  647.            
  648.             pd.setDati(dati);

  649.             if(verificaCertificatiEffettuata) {
  650.                
  651.                 // verifica richiesta dal link nella lista, torno alla lista
  652.                 if(arrivoDaLista) {
  653.                
  654.                     parentSA = useIdSogg ? ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_SOGGETTO : ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT_NONE;
  655.                    
  656.                     // salvo il punto di ingresso
  657.                     ServletUtils.setObjectIntoSession(request, session, parentSA, ServiziApplicativiCostanti.ATTRIBUTO_SERVIZI_APPLICATIVI_PARENT);
  658.                    
  659.                     String userLogin = ServletUtils.getUserLoginFromSession(session);
  660.                    
  661.                     // preparo lista
  662.                     ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  663.                    
  664.                     int idLista = -1;
  665.                     if(!useIdSogg){
  666.                         idLista = Liste.SERVIZIO_APPLICATIVO;
  667.                     }
  668.                     else {
  669.                         idLista = Liste.SERVIZI_APPLICATIVI_BY_SOGGETTO;
  670.                     }
  671.    
  672.                     List<ServizioApplicativo> lista = null;
  673.                                        
  674.                     // poiche' esistono filtri che hanno necessita di postback salvo in sessione
  675.                     if(!ServletUtils.isSearchDone(saHelper)) {
  676.                         lista = ServletUtils.getRisultatiRicercaFromSession(request, session, idLista,  ServizioApplicativo.class);
  677.                     }
  678.                    
  679.                     ricerca = saHelper.checkSearchParameters(idLista, ricerca);
  680.                    
  681.                     saHelper.clearFiltroSoggettoByPostBackProtocollo(0, ricerca, idLista);
  682.                    
  683.                     if(!useIdSogg){
  684.                         boolean filtroSoggetto = false;
  685.                         if(saHelper.isSoggettoMultitenantSelezionato()) {
  686.                             List<String> protocolli = saCore.getProtocolli(request, session,false);
  687.                             if(protocolli!=null && protocolli.size()==1) { // dovrebbe essere l'unico caso in cui un soggetto multitenant รจ selezionato
  688.                                 String protocollo = protocolli.get(0);
  689.                                 filtroSoggetto = !saCore.isSupportatoAutenticazioneApplicativiEsterniErogazione(protocollo);  // devono essere fatti vedere anche quelli
  690.                             }
  691.                         }
  692.                         if(filtroSoggetto) {
  693.                             ricerca.addFilter(idLista, Filtri.FILTRO_SOGGETTO, saHelper.getSoggettoMultitenantSelezionato());
  694.                         }

  695.                         if(lista==null) {
  696.                             if(saCore.isVisioneOggettiGlobale(userLogin)){
  697.                                 lista = saCore.soggettiServizioApplicativoList(null, ricerca);
  698.                             }else{
  699.                                 lista = saCore.soggettiServizioApplicativoList(userLogin, ricerca);
  700.                             }
  701.                         }
  702.                     }else {
  703.                         ricerca = saHelper.checkSearchParameters(idLista, ricerca);
  704.                        
  705.                         lista = saCore.soggettiServizioApplicativoList(ricerca,sa.getIdSoggetto());
  706.                     }
  707.                    
  708.                     if(!saHelper.isPostBackFilterElement()) {
  709.                         ServletUtils.setRisultatiRicercaIntoSession(request, session, idLista, lista); // salvo poiche' esistono filtri che hanno necessita di postback
  710.                     }
  711.    
  712.                     saHelper.prepareServizioApplicativoList(ricerca, lista, useIdSogg, false);
  713.                    
  714.                     ServletUtils.setSearchObjectIntoSession(request, session, ricerca);
  715.                    
  716.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  717.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, CostantiControlStation.TIPO_OPERAZIONE_VERIFICA_CERTIFICATI);
  718.                    
  719.                 }
  720.                
  721.                 // verifica richiesta dal dettaglio, torno al dettaglio
  722.                 else {
  723.                    
  724.                     ConsoleOperationType consoleOperationType = ConsoleOperationType.CHANGE;
  725.                     IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(tipoProtocollo);
  726.                     IConsoleDynamicConfiguration consoleDynamicConfiguration = protocolFactory.createDynamicConfigurationConsole();
  727.                     IRegistryReader registryReader = soggettiCore.getRegistryReader(protocolFactory);
  728.                     IConfigIntegrationReader configRegistryReader = soggettiCore.getConfigIntegrationReader(protocolFactory);
  729.                     ConsoleConfiguration consoleConfiguration = consoleDynamicConfiguration.getDynamicConfigServizioApplicativo(consoleOperationType, saHelper,
  730.                             registryReader, configRegistryReader, idServizioApplicativoTmp);
  731.                     List<ProtocolProperty> oldProtocolPropertyList = sa.getProtocolPropertyList();
  732.                     ProtocolProperties protocolProperties = saHelper.estraiProtocolPropertiesDaRequest(consoleConfiguration, consoleOperationType);
  733.                     ProtocolPropertiesUtils.mergeProtocolPropertiesConfig(protocolProperties, oldProtocolPropertyList, consoleOperationType);
  734.                    
  735.                     Properties propertiesProprietario = new Properties();
  736.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, idServizioApplicativo+"");
  737.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_SERVIZIO_APPLICATIVO);
  738.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, idServizioApplicativoTmp.toString());
  739.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE, URLEncoder.encode( ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE + "?" + request.getQueryString(), "UTF-8"));
  740.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, tipoProtocollo);
  741.                    
  742.                     String oldNome = sa.getNome();
  743.                     String nomeParameter = oldNome;
  744.                     String descrizione = sa.getDescrizione();
  745.                     String tipoENomeSoggetto = saHelper.getLabelNomeSoggetto(tipoProtocollo, idSoggettoProprietario.getTipo() , idSoggettoProprietario.getNome());
  746.                    
  747.                     InvocazionePortaGestioneErrore ipge = null;
  748.                     Credenziali credenziali = null;
  749.                     boolean visualizzaModificaCertificato = false;
  750.                     boolean visualizzaAddCertificato = false;
  751.                     String servletCredenzialiList = ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CREDENZIALI_LIST;
  752.                     List<Parameter> parametersServletCredenzialiList = null;
  753.                     Integer numeroCertificati = 0;
  754.                     String servletCredenzialiAdd = ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CREDENZIALI_ADD;
  755.                     if (ip != null) {
  756.                         ipge = ip.getGestioneErrore();
  757.                         numeroCertificati = ip.sizeCredenzialiList();
  758.                         if(ip.sizeCredenzialiList()>0) {
  759.                             credenziali = ip.getCredenziali(0);
  760.                            
  761.                             visualizzaAddCertificato = true;
  762.                             if(ip.sizeCredenzialiList() == 1) {  // se ho definito solo un certificato c'e' il link diretto alla modifica
  763.                                 visualizzaModificaCertificato = true;
  764.                             }
  765.                         }
  766.                     }
  767.                    
  768.                     parametersServletCredenzialiList = new ArrayList<>();
  769.                     parametersServletCredenzialiList.add(pIdSA);
  770.                     parametersServletCredenzialiList.add(pIdSoggettoSA);
  771.                    
  772.                     if(dominio != null) {
  773.                         Parameter pDominio = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_DOMINIO, dominio);
  774.                         parametersServletCredenzialiList.add(pDominio);
  775.                     }
  776.                    
  777.                     String fault = null;
  778.                     if (ipge != null &&
  779.                         ipge.getFault()!=null) {
  780.                         fault = ipge.getFault().toString();
  781.                     }
  782.                     String faultactor = null;
  783.                     if (ipge != null) {
  784.                         faultactor = ipge.getFaultActor();
  785.                     }
  786.                     String genericfault = null;
  787.                     if (ipge != null &&
  788.                         ipge.getGenericFaultCode()!=null) {
  789.                         genericfault = ipge.getGenericFaultCode().toString();
  790.                     }
  791.                     if ((genericfault == null) || "".equals(genericfault)) {
  792.                         genericfault = CostantiConfigurazione.DISABILITATO.toString();
  793.                     }
  794.                     String prefixfault = null;
  795.                     if (ipge != null) {
  796.                         prefixfault = ipge.getPrefixFaultCode();
  797.                     }
  798.                     String invrifRisposta = null;
  799.                     if (ip != null &&
  800.                         ip.getInvioPerRiferimento()!=null) {
  801.                         invrifRisposta = ip.getInvioPerRiferimento().toString();
  802.                     }
  803.                     if ((invrifRisposta == null) || "".equals(invrifRisposta)) {
  804.                         invrifRisposta = CostantiConfigurazione.DISABILITATO.toString();
  805.                     }
  806.                     String sbustamentoInformazioniProtocolloRisposta = null;
  807.                     if (ip != null &&
  808.                         ip.getSbustamentoInformazioniProtocollo()!=null) {
  809.                         sbustamentoInformazioniProtocolloRisposta = ip.getSbustamentoInformazioniProtocollo().toString();
  810.                     }
  811.                     if ((sbustamentoInformazioniProtocolloRisposta == null) || "".equals(sbustamentoInformazioniProtocolloRisposta)) {
  812.                         sbustamentoInformazioniProtocolloRisposta = CostantiConfigurazione.ABILITATO.toString();
  813.                     }
  814.                            
  815.                     String ruoloFruitore=sa.getTipologiaFruizione();
  816.                     String ruoloErogatore=sa.getTipologiaErogazione();
  817.                     String tipoSA = sa.getTipo();
  818.                     boolean useAsClient = sa.isUseAsClient();
  819.                     if(tipoSA == null)
  820.                         tipoSA = "";
  821.                    
  822.                     InvocazioneServizio is = sa.getInvocazioneServizio();
  823.                     if(is==null) {
  824.                         is = new InvocazioneServizio();
  825.                     }
  826.                     String sbustamento = null;
  827.                     if(is.getSbustamentoSoap()!=null) {
  828.                         sbustamento = is.getSbustamentoSoap().toString();
  829.                     }
  830.                     String sbustamentoInformazioniProtocolloRichiesta = null;
  831.                     if(is.getSbustamentoInformazioniProtocollo()!=null) {
  832.                         sbustamentoInformazioniProtocolloRichiesta = is.getSbustamentoInformazioniProtocollo().toString();
  833.                     }
  834.                     String getmsg = null;
  835.                     if(is.getGetMessage()!=null) {
  836.                         getmsg = is.getGetMessage().toString();
  837.                     }
  838.                     boolean integrationManagerEnabled = !saHelper.isModalitaStandard() && saCore.isIntegrationManagerEnabled();
  839.                     if(!integrationManagerEnabled && CostantiConfigurazione.ABILITATO.toString().equals(getmsg)) {
  840.                         // faccio vedere I.M. anche con interfaccia standard
  841.                         integrationManagerEnabled = true;
  842.                     }
  843.                    
  844.                     String invrifRichiesta = null;
  845.                     if(is.getInvioPerRiferimento()!=null) {
  846.                         invrifRichiesta = is.getInvioPerRiferimento().toString();
  847.                     }
  848.                     if ((invrifRichiesta == null) || "".equals(invrifRichiesta)) {
  849.                         invrifRichiesta = CostantiConfigurazione.DISABILITATO.toString();
  850.                     }
  851.                     String risprif = null;
  852.                     if(is.getRispostaPerRiferimento()!=null) {
  853.                         risprif = is.getRispostaPerRiferimento().toString();
  854.                     }
  855.                     if ((risprif == null) || "".equals(risprif)) {
  856.                         risprif = CostantiConfigurazione.DISABILITATO.toString();
  857.                     }
  858.                     String user = null;
  859.                     String password = null;
  860.                     InvocazioneCredenziali cis = is.getCredenziali();
  861.                     if ((user == null) && (cis != null)) {
  862.                         user = cis.getUser();
  863.                         password = cis.getPassword();
  864.                     }
  865.                     String endpointtype = null;
  866.                     String tipoconn = null;
  867.                     Connettore connis = is.getConnettore();
  868.                     if (endpointtype == null) {
  869.                         if ((connis!=null && connis.getCustom()!=null && connis.getCustom()) && !connis.getTipo().equals(TipiConnettore.HTTPS.toString())) {
  870.                             endpointtype = TipiConnettore.CUSTOM.toString();
  871.                             tipoconn = connis.getTipo();
  872.                         } else {
  873.                             if(connis!=null) {
  874.                                 endpointtype = connis.getTipo();
  875.                             }
  876.                         }
  877.                     }
  878.                     if(endpointtype==null){
  879.                         endpointtype=TipiConnettore.DISABILITATO.toString();
  880.                     }

  881.                     Map<String, String> props = null;
  882.                     if(connis!=null)
  883.                         props = connis.getProperties();
  884.                    
  885.                     String connettoreDebug = null;
  886.                     if(connettoreDebug==null && props!=null){
  887.                         String v = props.get(CostantiDB.CONNETTORE_DEBUG);
  888.                         if(v!=null){
  889.                             if("true".equals(v)){
  890.                                 connettoreDebug = Costanti.CHECK_BOX_ENABLED;
  891.                             }
  892.                             else{
  893.                                 connettoreDebug = Costanti.CHECK_BOX_DISABLED;
  894.                             }
  895.                         }
  896.                     }
  897.                    
  898.                     String proxyEnabled = null;
  899.                     String proxyHostname = null;
  900.                     String proxyPort = null;
  901.                     String proxyUsername = null;
  902.                     String proxyPassword = null;
  903.                     if(proxyEnabled==null && props!=null){
  904.                         String v = props.get(CostantiDB.CONNETTORE_PROXY_TYPE);
  905.                         if(v!=null && !"".equals(v)){
  906.                             proxyEnabled = Costanti.CHECK_BOX_ENABLED_TRUE;
  907.                            
  908.                             // raccolgo anche altre proprietร 
  909.                             v = props.get(CostantiDB.CONNETTORE_PROXY_HOSTNAME);
  910.                             if(v!=null && !"".equals(v)){
  911.                                 proxyHostname = v.trim();
  912.                             }
  913.                             v = props.get(CostantiDB.CONNETTORE_PROXY_PORT);
  914.                             if(v!=null && !"".equals(v)){
  915.                                 proxyPort = v.trim();
  916.                             }
  917.                             v = props.get(CostantiDB.CONNETTORE_PROXY_USERNAME);
  918.                             if(v!=null && !"".equals(v)){
  919.                                 proxyUsername = v.trim();
  920.                             }
  921.                             v = props.get(CostantiDB.CONNETTORE_PROXY_PASSWORD);
  922.                             if(v!=null && !"".equals(v)){
  923.                                 proxyPassword = v.trim();
  924.                             }
  925.                         }
  926.                     }
  927.                    
  928.                     String tempiRispostaEnabled = null;
  929.                     String tempiRispostaConnectionTimeout = null;
  930.                     String tempiRispostaReadTimeout = null;
  931.                     String tempiRispostaTempoMedioRisposta = null;
  932.                     if(tempiRispostaEnabled == null ||
  933.                             tempiRispostaConnectionTimeout==null || "".equals(tempiRispostaConnectionTimeout)
  934.                             ||
  935.                             tempiRispostaReadTimeout==null || "".equals(tempiRispostaReadTimeout)
  936.                             ||
  937.                             tempiRispostaTempoMedioRisposta==null || "".equals(tempiRispostaTempoMedioRisposta) ){
  938.                        
  939.                         ConfigurazioneCore configCore = new ConfigurazioneCore(soggettiCore);
  940.                         ConfigurazioneGenerale configGenerale = configCore.getConfigurazioneControlloTraffico();
  941.                        
  942.                         if( props!=null ) {
  943.                             if(tempiRispostaConnectionTimeout==null || "".equals(tempiRispostaConnectionTimeout) ) {
  944.                                 String v = props.get(CostantiDB.CONNETTORE_CONNECTION_TIMEOUT);
  945.                                 if(v!=null && !"".equals(v)){
  946.                                     tempiRispostaConnectionTimeout = v.trim();
  947.                                     tempiRispostaEnabled =  Costanti.CHECK_BOX_ENABLED_TRUE;
  948.                                 }
  949.                                 else {
  950.                                     tempiRispostaConnectionTimeout = configGenerale.getTempiRispostaErogazione().getConnectionTimeout().intValue()+"";
  951.                                 }
  952.                             }
  953.                                
  954.                             if(tempiRispostaReadTimeout==null || "".equals(tempiRispostaReadTimeout) ) {
  955.                                 String v = props.get(CostantiDB.CONNETTORE_READ_CONNECTION_TIMEOUT);
  956.                                 if(v!=null && !"".equals(v)){
  957.                                     tempiRispostaReadTimeout = v.trim();
  958.                                     tempiRispostaEnabled =  Costanti.CHECK_BOX_ENABLED_TRUE;
  959.                                 }
  960.                                 else {
  961.                                     tempiRispostaReadTimeout = configGenerale.getTempiRispostaErogazione().getReadTimeout().intValue()+"";
  962.                                 }
  963.                             }
  964.                            
  965.                             if(tempiRispostaTempoMedioRisposta==null || "".equals(tempiRispostaTempoMedioRisposta) ) {
  966.                                 String v = props.get(CostantiDB.CONNETTORE_TEMPO_MEDIO_RISPOSTA);
  967.                                 if(v!=null && !"".equals(v)){
  968.                                     tempiRispostaTempoMedioRisposta = v.trim();
  969.                                     tempiRispostaEnabled =  Costanti.CHECK_BOX_ENABLED_TRUE;
  970.                                 }
  971.                                 else {
  972.                                     tempiRispostaTempoMedioRisposta = configGenerale.getTempiRispostaErogazione().getTempoMedioRisposta().intValue()+"";
  973.                                 }
  974.                             }
  975.                         }
  976.                         else {
  977.                             if(tempiRispostaConnectionTimeout==null || "".equals(tempiRispostaConnectionTimeout) ) {
  978.                                 tempiRispostaConnectionTimeout = configGenerale.getTempiRispostaErogazione().getConnectionTimeout().intValue()+"";
  979.                             }
  980.                             if(tempiRispostaReadTimeout==null || "".equals(tempiRispostaReadTimeout) ) {
  981.                                 tempiRispostaReadTimeout = configGenerale.getTempiRispostaErogazione().getReadTimeout().intValue()+"";
  982.                             }
  983.                             if(tempiRispostaTempoMedioRisposta==null || "".equals(tempiRispostaTempoMedioRisposta) ) {
  984.                                 tempiRispostaTempoMedioRisposta = configGenerale.getTempiRispostaErogazione().getTempoMedioRisposta().intValue()+"";
  985.                             }
  986.                         }
  987.                     }
  988.                    
  989.                     String transferMode = null;
  990.                     String transferModeChunkSize = null;
  991.                     if(transferMode==null && props!=null){
  992.                         String v = props.get(CostantiDB.CONNETTORE_HTTP_DATA_TRANSFER_MODE);
  993.                         if(v!=null && !"".equals(v)){
  994.                            
  995.                             transferMode = v.trim();
  996.                            
  997.                             if(TransferLengthModes.TRANSFER_ENCODING_CHUNKED.getNome().equals(transferMode)){
  998.                                 // raccolgo anche altra proprietร  correlata
  999.                                 v = props.get(CostantiDB.CONNETTORE_HTTP_DATA_TRANSFER_MODE_CHUNK_SIZE);
  1000.                                 if(v!=null && !"".equals(v)){
  1001.                                     transferModeChunkSize = v.trim();
  1002.                                 }
  1003.                             }
  1004.                            
  1005.                         }
  1006.                     }
  1007.                    
  1008.                     String redirectMode = null;
  1009.                     String redirectMaxHop = null;
  1010.                     if(redirectMode==null && props!=null){
  1011.                         String v = props.get(CostantiDB.CONNETTORE_HTTP_REDIRECT_FOLLOW);
  1012.                         if(v!=null && !"".equals(v)){
  1013.                            
  1014.                             if("true".equalsIgnoreCase(v.trim()) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v.trim())){
  1015.                                 redirectMode = CostantiConfigurazione.ABILITATO.getValue();
  1016.                             }
  1017.                             else{
  1018.                                 redirectMode = CostantiConfigurazione.DISABILITATO.getValue();
  1019.                             }                  
  1020.                            
  1021.                             if(CostantiConfigurazione.ABILITATO.getValue().equals(redirectMode)){
  1022.                                 // raccolgo anche altra proprietร  correlata
  1023.                                 v = props.get(CostantiDB.CONNETTORE_HTTP_REDIRECT_MAX_HOP);
  1024.                                 if(v!=null && !"".equals(v)){
  1025.                                     redirectMaxHop = v.trim();
  1026.                                 }
  1027.                             }
  1028.                            
  1029.                         }
  1030.                     }
  1031.                    
  1032.                     String tokenPolicy = null;
  1033.                     boolean autenticazioneToken = false;
  1034.                     if(tokenPolicy==null && props!=null){
  1035.                         String v = props.get(CostantiDB.CONNETTORE_TOKEN_POLICY);
  1036.                         if(v!=null && !"".equals(v)){
  1037.                             tokenPolicy = v;
  1038.                             autenticazioneToken = true;
  1039.                         }
  1040.                     }
  1041.                    
  1042.                     String opzioniAvanzate = ConnettoriHelper.getOpzioniAvanzate(saHelper, transferMode, redirectMode);
  1043.                    
  1044.                     String autenticazioneHttp = saHelper.getAutenticazioneHttp(null, endpointtype, user);
  1045.                    
  1046.                     String apiKeyValue = null;
  1047.                     String apiKeyHeader = null;
  1048.                     String appIdValue = null;
  1049.                     String appIdHeader = null;
  1050.                     if(props!=null) {
  1051.                         apiKeyValue = props.get(CostantiDB.CONNETTORE_APIKEY);
  1052.                         apiKeyHeader = props.get(CostantiDB.CONNETTORE_APIKEY_HEADER);
  1053.                         appIdValue = props.get(CostantiDB.CONNETTORE_APIKEY_APPID);
  1054.                         appIdHeader = props.get(CostantiDB.CONNETTORE_APIKEY_APPID_HEADER);
  1055.                     }
  1056.                     String autenticazioneApiKey = saHelper.getAutenticazioneApiKey(null, endpointtype, apiKeyValue);
  1057.                     boolean useOAS3Names=true;
  1058.                     boolean useAppId=false;
  1059.                     if(ServletUtils.isCheckBoxEnabled(autenticazioneApiKey)) {
  1060.                         useOAS3Names = saHelper.isAutenticazioneApiKeyUseOAS3Names(apiKeyHeader, appIdHeader);
  1061.                         useAppId = saHelper.isAutenticazioneApiKeyUseAppId(appIdValue);
  1062.                     }
  1063.                    
  1064.                     List<Property> cp = connis!=null ? connis.getPropertyList() : null;
  1065.                     String url = null;
  1066.                     String nomeCodaJMS = null;
  1067.                     String tipoCodaJMS = null;
  1068.                     String connfact = null;
  1069.                     String sendas = null;
  1070.                     String initcont = null;
  1071.                     String urlpgk = null;
  1072.                     String provurl = null;
  1073.                     if(connis!=null) {
  1074.                         for (int i = 0; i < connis.sizePropertyList(); i++) {
  1075.                             Property singlecp = cp.get(i);
  1076.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_HTTP_LOCATION) &&
  1077.                                 url == null) {
  1078.                                 url = singlecp.getValore();
  1079.                             }
  1080.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_NOME) &&
  1081.                                 nomeCodaJMS == null) {
  1082.                                 nomeCodaJMS = singlecp.getValore();
  1083.                             }
  1084.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_TIPO) &&
  1085.                                 tipoCodaJMS == null) {
  1086.                                 tipoCodaJMS = singlecp.getValore();
  1087.                             }
  1088.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_CONNECTION_FACTORY) &&
  1089.                                 connfact == null) {
  1090.                                 connfact = singlecp.getValore();
  1091.                             }
  1092.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_SEND_AS) &&
  1093.                                 sendas == null) {
  1094.                                 sendas = singlecp.getValore();
  1095.                             }
  1096.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_CONTEXT_JAVA_NAMING_FACTORY_INITIAL) &&
  1097.                                 initcont == null) {
  1098.                                 initcont = singlecp.getValore();
  1099.                             }
  1100.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_CONTEXT_JAVA_NAMING_FACTORY_URL_PKG) &&
  1101.                                 urlpgk == null) {
  1102.                                 urlpgk = singlecp.getValore();
  1103.                             }
  1104.                             if (singlecp.getNome().equals(CostantiDB.CONNETTORE_JMS_CONTEXT_JAVA_NAMING_PROVIDER_URL) &&
  1105.                                 provurl == null) {
  1106.                                 provurl = singlecp.getValore();
  1107.                             }
  1108.                         }
  1109.                     }

  1110.                     String httpstipologia = null;
  1111.                     String httpsurl = null;
  1112.                     String httpshostverifyS = null;
  1113.                     boolean httpshostverify = false;
  1114.                     String httpsTrustVerifyCertS = null;
  1115.                     boolean httpsTrustVerifyCert = false;
  1116.                     String httpspath = null;
  1117.                     String httpstipo = null;
  1118.                     String httpspwd = null;
  1119.                     String httpsalgoritmo = null;
  1120.                     String httpspwdprivatekeytrust = null;
  1121.                     String httpspathkey = null;
  1122.                     String httpstipokey = null;
  1123.                     String httpspwdkey = null;
  1124.                     String httpspwdprivatekey = null;
  1125.                     String httpsalgoritmokey = null;
  1126.                     String httpsKeyAlias = null;
  1127.                     String httpsTrustStoreCRLs = null;
  1128.                     String httpsTrustStoreOCSPPolicy = null;
  1129.                     String httpsKeyStoreBYOKPolicy = null;
  1130.                     boolean httpsstato = false;
  1131.                     String httpskeystore = null;
  1132.                     if (httpstipologia == null && props!=null) {
  1133.                         httpsurl = props.get(CostantiDB.CONNETTORE_HTTPS_LOCATION);
  1134.                         httpstipologia = props.get(CostantiDB.CONNETTORE_HTTPS_SSL_TYPE);
  1135.                         httpshostverifyS = props.get(CostantiDB.CONNETTORE_HTTPS_HOSTNAME_VERIFIER);
  1136.                         if(httpshostverifyS!=null){
  1137.                             httpshostverify = Boolean.valueOf(httpshostverifyS);
  1138.                         }
  1139.                         httpsTrustVerifyCertS = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_ALL_CERTS);
  1140.                         if(httpsTrustVerifyCertS!=null){
  1141.                             httpsTrustVerifyCert = !Boolean.valueOf(httpsTrustVerifyCertS);
  1142.                         }
  1143.                         else {
  1144.                             httpsTrustVerifyCert = true; // backward compatibility
  1145.                         }
  1146.                         httpspath = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_LOCATION);
  1147.                         httpstipo = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_TYPE);
  1148.                         httpspwd = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_PASSWORD);
  1149.                         httpsalgoritmo = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_MANAGEMENT_ALGORITM);
  1150.                         httpspwdprivatekeytrust = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_PASSWORD);
  1151.                         httpspathkey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_LOCATION);
  1152.                         httpstipokey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_TYPE);
  1153.                         httpspwdkey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_PASSWORD);
  1154.                         httpspwdprivatekey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_PASSWORD);
  1155.                         httpsalgoritmokey = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_MANAGEMENT_ALGORITM);
  1156.                         httpsKeyAlias = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_ALIAS);
  1157.                         httpsTrustStoreCRLs = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_CRLS);
  1158.                         httpsTrustStoreOCSPPolicy = props.get(CostantiDB.CONNETTORE_HTTPS_TRUST_STORE_OCSP_POLICY);
  1159.                         httpsKeyStoreBYOKPolicy = props.get(CostantiDB.CONNETTORE_HTTPS_KEY_STORE_BYOK_POLICY);
  1160.                         if (httpspathkey == null) {
  1161.                             httpsstato = false;
  1162.                             httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_DEFAULT;
  1163.                         } else {
  1164.                             httpsstato = true;
  1165.                             if (httpspathkey.equals(httpspath) &&
  1166.                                     httpstipokey.equals(httpstipo) &&
  1167.                                     (
  1168.                                         (httpspwdkey!=null && httpspwdkey.equals(httpspwd))
  1169.                                         ||
  1170.                                         (httpspwdkey==null && httpspwd==null)
  1171.                                     )
  1172.                                 )
  1173.                                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_DEFAULT;
  1174.                             else
  1175.                                 httpskeystore = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_KEYSTORE_CLIENT_AUTH_MODE_RIDEFINISCI;
  1176.                         }
  1177.                     }
  1178.                    
  1179.                     // default
  1180.                     if(httpsalgoritmo==null || "".equals(httpsalgoritmo)){
  1181.                         httpsalgoritmo = TrustManagerFactory.getDefaultAlgorithm();
  1182.                     }
  1183.                     if(httpsalgoritmokey==null || "".equals(httpsalgoritmokey)){
  1184.                         httpsalgoritmokey = KeyManagerFactory.getDefaultAlgorithm();
  1185.                     }
  1186.                     if(httpstipologia==null || "".equals(httpstipologia)){
  1187.                         httpstipologia = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TYPE;
  1188.                     }
  1189.                     if(httpshostverifyS==null || "".equals(httpshostverifyS)){
  1190.                         httpshostverifyS = Costanti.CHECK_BOX_ENABLED_TRUE;
  1191.                         httpshostverify = ServletUtils.isCheckBoxEnabled(httpshostverifyS);
  1192.                     }
  1193.                     if(httpsTrustVerifyCertS==null || "".equals(httpsTrustVerifyCertS)){
  1194.                         httpsTrustVerifyCertS = ConnettoriCostanti.DEFAULT_CONNETTORE_HTTPS_TRUST_VERIFY_CERTS ? Costanti.CHECK_BOX_ENABLED_TRUE : Costanti.CHECK_BOX_DISABLED;
  1195.                         httpsTrustVerifyCert = ServletUtils.isCheckBoxEnabled(httpsTrustVerifyCertS);
  1196.                     }
  1197.                    
  1198.                     // file
  1199.                     String responseInputMode = null;
  1200.                     String requestOutputFileName = null;
  1201.                     String requestOutputFileNamePermissions = null;
  1202.                     String requestOutputFileNameHeaders = null;
  1203.                     String requestOutputFileNameHeadersPermissions = null;
  1204.                     String requestOutputParentDirCreateIfNotExists = null;
  1205.                     String requestOutputOverwriteIfExists = null;
  1206.                     String responseInputFileName = null;
  1207.                     String responseInputFileNameHeaders = null;
  1208.                     String responseInputDeleteAfterRead = null;
  1209.                     String responseInputWaitTime = null;
  1210.                     if(responseInputMode==null && props!=null){
  1211.                        
  1212.                         requestOutputFileName = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_FILE);  
  1213.                         requestOutputFileNamePermissions = saHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_FILE_NAME_PERMISSIONS);
  1214.                         requestOutputFileNameHeaders = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_FILE_HEADERS);
  1215.                         requestOutputFileNameHeadersPermissions = saHelper.getParameter(ConnettoriCostanti.PARAMETRO_CONNETTORE_FILE_REQUEST_OUTPUT_FILE_NAME_HEADERS_PERMISSIONS);
  1216.                         String v = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_AUTO_CREATE_DIR);
  1217.                         if(v!=null && !"".equals(v) &&
  1218.                             ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1219.                             ){
  1220.                             requestOutputParentDirCreateIfNotExists = Costanti.CHECK_BOX_ENABLED_TRUE;
  1221.                         }                  
  1222.                         v = props.get(CostantiDB.CONNETTORE_FILE_REQUEST_OUTPUT_OVERWRITE_FILE);
  1223.                         if(v!=null && !"".equals(v) &&
  1224.                             ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1225.                             ){
  1226.                             requestOutputOverwriteIfExists = Costanti.CHECK_BOX_ENABLED_TRUE;
  1227.                         }  
  1228.                        
  1229.                         v = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_MODE);
  1230.                         if(v!=null && !"".equals(v) &&
  1231.                             ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1232.                             ){
  1233.                             responseInputMode = CostantiConfigurazione.ABILITATO.getValue();
  1234.                         }
  1235.                         if(CostantiConfigurazione.ABILITATO.getValue().equals(responseInputMode)){                      
  1236.                             responseInputFileName = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_FILE);
  1237.                             responseInputFileNameHeaders = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_FILE_HEADERS);
  1238.                             v = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_FILE_DELETE_AFTER_READ);
  1239.                             if(v!=null && !"".equals(v) &&
  1240.                                 ("true".equalsIgnoreCase(v) || CostantiConfigurazione.ABILITATO.getValue().equalsIgnoreCase(v) )
  1241.                                 ){
  1242.                                 responseInputDeleteAfterRead = Costanti.CHECK_BOX_ENABLED_TRUE;
  1243.                             }                      
  1244.                             responseInputWaitTime = props.get(CostantiDB.CONNETTORE_FILE_RESPONSE_INPUT_WAIT_TIME);                    
  1245.                         }
  1246.                        
  1247.                     }
  1248.                    
  1249.                     // status
  1250.                     ConnettoreStatusParams connettoreStatusParams = ConnettoreStatusParams.fillFrom(props);
  1251.                    
  1252.                     Boolean isConnettoreCustomUltimaImmagineSalvata = connis!=null ? connis.getCustom() : null;
  1253.                    
  1254.                     Boolean contaListe = ServletUtils.getContaListeFromSession(session);
  1255.                    
  1256.                     String provider = sa.getIdSoggetto()+"";
  1257.                    
  1258.                     String tipoauthSA = null;
  1259.                     String utenteSA = null;
  1260.                     String passwordSA = null;
  1261.                     String subjectSA = null;
  1262.                     String issuerSA = null;
  1263.                     String principalSA = null;
  1264.                     String multipleApiKey = null;
  1265.                     String appId = null;
  1266.                     String apiKey = null;
  1267.                     String tokenPolicySA = null;
  1268.                     String tokenClientIdSA = null;
  1269.                     boolean tokenWithHttpsEnabledByConfigSA = false;
  1270.                     BinaryParameter tipoCredenzialiSSLFileCertificato = saHelper.getBinaryParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO);
  1271.                     String tipoCredenzialiSSLSorgente = null;
  1272.                     String tipoCredenzialiSSLAliasCertificato = null;
  1273.                     String tipoCredenzialiSSLAliasCertificatoSubject= null;
  1274.                     String tipoCredenzialiSSLAliasCertificatoIssuer= null;
  1275.                     String tipoCredenzialiSSLAliasCertificatoType= null;
  1276.                     String tipoCredenzialiSSLAliasCertificatoVersion= null;
  1277.                     String tipoCredenzialiSSLAliasCertificatoSerialNumber= null;
  1278.                     String tipoCredenzialiSSLAliasCertificatoSelfSigned= null;
  1279.                     String tipoCredenzialiSSLAliasCertificatoNotBefore= null;
  1280.                     String tipoCredenzialiSSLAliasCertificatoNotAfter = null;
  1281.                     String tipoCredenzialiSSLVerificaTuttiICampi = null;
  1282.                     String tipoCredenzialiSSLConfigurazioneManualeSelfSigned= null;
  1283.                     org.openspcoop2.utils.certificate.ArchiveType tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.CER;
  1284.                     String tipoCredenzialiSSLFileCertificatoPassword = null;
  1285.                     List<String> listaAliasEstrattiCertificato = new ArrayList<>();
  1286.                    
  1287.                     String tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  1288.                    
  1289.                     if(credenziali!=null && credenziali.getTipo()!=null) {
  1290.                         tipoauthSA = credenziali.getTipo().getValue();
  1291.                         if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(tipoauthSA)) {
  1292.                             utenteSA = credenziali.getUser();
  1293.                             passwordSA = credenziali.getPassword();
  1294.                             tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  1295.                         }
  1296.                         if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(tipoauthSA)) {
  1297.                             utenteSA = credenziali.getUser();
  1298.                             passwordSA = credenziali.getPassword();
  1299.                             tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  1300.                             multipleApiKey = credenziali.isAppId() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  1301.                             appId = credenziali.getUser();
  1302.                             apiKey = credenziali.getPassword();
  1303.                         }
  1304.                         if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_PRINCIPAL.equals(tipoauthSA)) {
  1305.                             principalSA = credenziali.getUser();
  1306.                         }
  1307.                        
  1308.                         if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_TOKEN.equals(tipoauthSA)) {
  1309.                             tokenClientIdSA = credenziali.getUser();
  1310.                             tokenPolicySA = credenziali.getTokenPolicy();
  1311.                         }
  1312.                         else if(ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL.equals(tipoauthSA) && tokenWithHttsSupportato) {
  1313.                             tokenClientIdSA = credenziali.getUser();
  1314.                             tokenPolicySA = credenziali.getTokenPolicy();
  1315.                             tokenWithHttpsEnabledByConfigSA = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL.equals(tipoauthSA) && StringUtils.isNotEmpty(tokenClientIdSA);
  1316.                         }
  1317.                         tokenWithHttpsEnabledByConfigSA = ConnettoriCostanti.AUTENTICAZIONE_TIPO_SSL.equals(tipoauthSA) && StringUtils.isNotEmpty(tokenClientIdSA);
  1318.                        
  1319.                     }
  1320.                    
  1321.                     if(credenziali!=null) {
  1322.                        
  1323.                         if(credenziali.getCertificate() != null) {
  1324.                        
  1325.                             tipoCredenzialiSSLFileCertificato.setValue(credenziali.getCertificate());
  1326.                             tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO;
  1327.                             tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  1328.                            
  1329.                             try {
  1330.                                 Certificate cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLFileCertificato.getValue());
  1331.                                 tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  1332.                                 tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  1333.                                 tipoCredenzialiSSLAliasCertificatoSelfSigned = cSelezionato.getCertificate().isSelfSigned() ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO;
  1334.                                 tipoCredenzialiSSLAliasCertificatoSerialNumber = cSelezionato.getCertificate().getSerialNumber() + "";
  1335.                                 tipoCredenzialiSSLAliasCertificatoType = cSelezionato.getCertificate().getType();
  1336.                                 tipoCredenzialiSSLAliasCertificatoVersion = cSelezionato.getCertificate().getVersion() + "";
  1337.                                 tipoCredenzialiSSLAliasCertificatoNotBefore = saHelper.getSdfCredenziali().format(cSelezionato.getCertificate().getNotBefore());
  1338.                                 tipoCredenzialiSSLAliasCertificatoNotAfter = saHelper.getSdfCredenziali().format(cSelezionato.getCertificate().getNotAfter());
  1339.                             }catch(UtilsException e) {
  1340.                                 pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  1341.                                 tipoCredenzialiSSLAliasCertificato = "";
  1342.                                 tipoCredenzialiSSLAliasCertificatoSubject= "";
  1343.                                 tipoCredenzialiSSLAliasCertificatoIssuer= "";
  1344.                                 tipoCredenzialiSSLAliasCertificatoType= "";
  1345.                                 tipoCredenzialiSSLAliasCertificatoVersion= "";
  1346.                                 tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  1347.                                 tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  1348.                                 tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  1349.                                 tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  1350.                             }
  1351.                            
  1352.                         } else {
  1353.                             subjectSA = credenziali.getSubject();
  1354.                             issuerSA = credenziali.getIssuer();
  1355.                             tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE;
  1356.                             tipoCredenzialiSSLConfigurazioneManualeSelfSigned = ( subjectSA != null && subjectSA.equals(issuerSA)) ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  1357.                         }
  1358.                        
  1359.                     }
  1360.                    
  1361.                     String changepwd = null;

  1362.                     List<ExtendedConnettore> listExtendedConnettore =
  1363.                             ServletExtendedConnettoreUtils.getExtendedConnettore(connis, ConnettoreServletType.SERVIZIO_APPLICATIVO_CHANGE, saHelper,
  1364.                                     (endpointtype==null), endpointtype); // uso endpointtype per capire se รจ la prima volta che entro
  1365.                    
  1366.                     dati.add(ServletUtils.getDataElementForEditModeFinished());

  1367.                     consoleDynamicConfiguration.updateDynamicConfigServizioApplicativo(consoleConfiguration, consoleOperationType, saHelper, protocolProperties,
  1368.                             registryReader, configRegistryReader, idServizioApplicativoTmp);
  1369.                    
  1370.                     dati = saHelper.addServizioApplicativoToDati(dati, oldNome, nomeParameter, descrizione, tipoENomeSoggetto, fault,
  1371.                             TipoOperazione.CHANGE, idServizioApplicativo, contaListe,null,null,provider,dominio,
  1372.                             utenteSA,passwordSA,subjectSA,principalSA,tipoauthSA,faultactor,genericfault,prefixfault,invrifRisposta,
  1373.                             sbustamentoInformazioniProtocolloRisposta,
  1374.                             ServiziApplicativiCostanti.SERVLET_NAME_SERVIZI_APPLICATIVI_CHANGE,id,tipoProtocollo,
  1375.                             ruoloFruitore,ruoloErogatore,
  1376.                             sbustamento, sbustamentoInformazioniProtocolloRichiesta, getmsg,
  1377.                             invrifRichiesta, risprif,
  1378.                             endpointtype, autenticazioneHttp, url, nomeCodaJMS, tipoCodaJMS,
  1379.                             user, password, initcont, urlpgk,
  1380.                             provurl, connfact, sendas,
  1381.                             httpsurl, httpstipologia, httpshostverify,
  1382.                             httpsTrustVerifyCert, httpspath, httpstipo, httpspwd,
  1383.                             httpsalgoritmo, httpsstato, httpskeystore,
  1384.                             httpspwdprivatekeytrust, httpspathkey,
  1385.                             httpstipokey, httpspwdkey,
  1386.                             httpspwdprivatekey, httpsalgoritmokey,
  1387.                             httpsKeyAlias, httpsTrustStoreCRLs, httpsTrustStoreOCSPPolicy, httpsKeyStoreBYOKPolicy,
  1388.                             tipoconn, connettoreDebug,
  1389.                             isConnettoreCustomUltimaImmagineSalvata,
  1390.                             proxyEnabled, proxyHostname, proxyPort, proxyUsername, proxyPassword,
  1391.                             tempiRispostaEnabled, tempiRispostaConnectionTimeout, tempiRispostaReadTimeout, tempiRispostaTempoMedioRisposta,
  1392.                             opzioniAvanzate, transferMode, transferModeChunkSize, redirectMode, redirectMaxHop,
  1393.                             requestOutputFileName, requestOutputFileNamePermissions, requestOutputFileNameHeaders, requestOutputFileNameHeadersPermissions,
  1394.                             requestOutputParentDirCreateIfNotExists,requestOutputOverwriteIfExists,
  1395.                             responseInputMode, responseInputFileName, responseInputFileNameHeaders, responseInputDeleteAfterRead, responseInputWaitTime,
  1396.                             tipoProtocollo, null, listExtendedConnettore,tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword, listaAliasEstrattiCertificato,
  1397.                             tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  1398.                             tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  1399.                             tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  1400.                             tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuerSA,tipoCredenzialiSSLWizardStep,
  1401.                             changepwd,
  1402.                             multipleApiKey, appId, apiKey,
  1403.                             autenticazioneToken,tokenPolicy,tipoSA, useAsClient,
  1404.                             integrationManagerEnabled,
  1405.                             visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd,
  1406.                             tokenPolicySA, tokenClientIdSA, tokenWithHttpsEnabledByConfigSA,
  1407.                             autenticazioneApiKey, useOAS3Names, useAppId, apiKeyHeader, apiKeyValue, appIdHeader, appIdValue,
  1408.                             connettoreStatusParams);

  1409.                     // aggiunta campi custom
  1410.                     dati = saHelper.addProtocolPropertiesToDatiConfig(dati, consoleConfiguration,consoleOperationType, protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  1411.                                
  1412.                     pd.setDati(dati);
  1413.                    
  1414.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  1415.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI, ForwardParams.CHANGE());
  1416.                    
  1417.                 }
  1418.             }
  1419.             else {
  1420.                
  1421.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  1422.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, ForwardParams.OTHER(""));
  1423.             }
  1424.            
  1425.         } catch (Exception e) {
  1426.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping, ServiziApplicativiCostanti.OBJECT_NAME_SERVIZI_APPLICATIVI_VERIFICA_CERTIFICATI, ForwardParams.OTHER(""));
  1427.         }  
  1428.     }
  1429. }