SoggettiVerificaCertificati.java

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

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

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

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

  29. import org.apache.struts.action.Action;
  30. import org.apache.struts.action.ActionForm;
  31. import org.apache.struts.action.ActionForward;
  32. import org.apache.struts.action.ActionMapping;
  33. import org.openspcoop2.core.commons.Filtri;
  34. import org.openspcoop2.core.commons.Liste;
  35. import org.openspcoop2.core.id.IDSoggetto;
  36. import org.openspcoop2.core.registry.CredenzialiSoggetto;
  37. import org.openspcoop2.core.registry.ProtocolProperty;
  38. import org.openspcoop2.core.registry.Soggetto;
  39. import org.openspcoop2.core.registry.constants.PddTipologia;
  40. import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
  41. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  42. import org.openspcoop2.protocol.sdk.constants.ConsoleOperationType;
  43. import org.openspcoop2.protocol.sdk.properties.ConsoleConfiguration;
  44. import org.openspcoop2.protocol.sdk.properties.IConsoleDynamicConfiguration;
  45. import org.openspcoop2.protocol.sdk.properties.ProtocolProperties;
  46. import org.openspcoop2.protocol.sdk.registry.IConfigIntegrationReader;
  47. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  48. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  49. import org.openspcoop2.utils.UtilsException;
  50. import org.openspcoop2.utils.certificate.ArchiveLoader;
  51. import org.openspcoop2.utils.certificate.Certificate;
  52. import org.openspcoop2.web.ctrlstat.core.CertificateChecker;
  53. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  54. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  55. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  56. import org.openspcoop2.web.ctrlstat.dao.PdDControlStation;
  57. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  58. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCore;
  59. import org.openspcoop2.web.ctrlstat.servlet.config.ConfigurazioneCostanti;
  60. import org.openspcoop2.web.ctrlstat.servlet.connettori.ConnettoriCostanti;
  61. import org.openspcoop2.web.ctrlstat.servlet.pdd.PddCore;
  62. import org.openspcoop2.web.ctrlstat.servlet.protocol_properties.ProtocolPropertiesCostanti;
  63. import org.openspcoop2.web.lib.mvc.BinaryParameter;
  64. import org.openspcoop2.web.lib.mvc.Costanti;
  65. import org.openspcoop2.web.lib.mvc.DataElement;
  66. import org.openspcoop2.web.lib.mvc.DataElementType;
  67. import org.openspcoop2.web.lib.mvc.ForwardParams;
  68. import org.openspcoop2.web.lib.mvc.GeneralData;
  69. import org.openspcoop2.web.lib.mvc.PageData;
  70. import org.openspcoop2.web.lib.mvc.Parameter;
  71. import org.openspcoop2.web.lib.mvc.ServletUtils;
  72. import org.openspcoop2.web.lib.mvc.TipoOperazione;

  73. /**
  74.  * SoggettiVerificaCertificati
  75.  *
  76.  * @author Andrea Poli (poli@link.it)
  77.  * @author Giuliano Pintori (pintori@link.it)
  78.  * @author $Author$
  79.  * @version $Rev$, $Date$
  80.  *
  81.  */
  82. public class SoggettiVerificaCertificati extends Action {
  83.    
  84.     @Override
  85.     public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

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

  87.         // Inizializzo PageData
  88.         PageData pd = new PageData();

  89.         GeneralHelper generalHelper = new GeneralHelper(session);

  90.         // Inizializzo GeneralData
  91.         GeneralData gd = generalHelper.initGeneralData(request);

  92.         try {
  93.            
  94.             SoggettiHelper soggettiHelper = new SoggettiHelper(request, pd, session);
  95.            
  96.             String id = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID);
  97.             long idSogg = Long.parseLong(id);
  98.             String nomeprov = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME);
  99.             String tipoprov = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO);
  100.            
  101.             String alias = soggettiHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_SISTEMA_NODO_CLUSTER);
  102.            
  103.             // Preparo il menu
  104.             soggettiHelper.makeMenu();
  105.            
  106.             SoggettiCore soggettiCore = new SoggettiCore();
  107.             ConfigurazioneCore confCore = new ConfigurazioneCore(soggettiCore);
  108.             PddCore pddCore = new PddCore(soggettiCore);
  109.            
  110.             String verificaCertificatiFromLista = soggettiHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA);
  111.             boolean arrivoDaLista = "true".equalsIgnoreCase(verificaCertificatiFromLista);
  112.            
  113.             // Prendo la lista di aliases
  114.             List<String> aliases = confCore.getJmxPdDAliases();
  115.             if(aliases==null || aliases.isEmpty()){
  116.                 throw new Exception("Pagina non prevista, la sezione configurazione non permette di accedere a questa pagina, se la configurazione non e' corretta");
  117.             }
  118.            
  119.             Soggetto soggettoRegistry = null;
  120.             org.openspcoop2.core.config.Soggetto soggettoConfig = null;
  121.            
  122.             if(soggettiCore.isRegistroServiziLocale()){
  123.                 soggettoRegistry = soggettiCore.getSoggettoRegistro(idSogg);
  124.             }

  125.             soggettoConfig = soggettiCore.getSoggetto(idSogg);
  126.            
  127.             if(soggettiCore.isRegistroServiziLocale()){
  128.                 nomeprov = soggettoRegistry.getNome();
  129.                 tipoprov = soggettoRegistry.getTipo();
  130.             }
  131.             else{
  132.                 nomeprov = soggettoConfig.getNome();
  133.                 tipoprov = soggettoConfig.getTipo();
  134.             }

  135.             String protocollo = soggettiCore.getProtocolloAssociatoTipoSoggetto(tipoprov);
  136.            
  137.            
  138.             List<Parameter> parametersServletSoggettoChange = new ArrayList<>();
  139.             Parameter pIdSoggetto = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID, id);
  140.             Parameter pNomeSoggetto = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME, nomeprov);
  141.             Parameter pTipoSoggetto = new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO, tipoprov);
  142.             parametersServletSoggettoChange.add(pIdSoggetto);
  143.             parametersServletSoggettoChange.add(pNomeSoggetto);
  144.             parametersServletSoggettoChange.add(pTipoSoggetto);
  145.            
  146.             // setto la barra del titolo
  147.             List<Parameter> listParameter = new ArrayList<>();
  148.             listParameter.add(new Parameter(SoggettiCostanti.LABEL_SOGGETTI, SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST));
  149.            
  150.             String labelSoggetto = null;
  151.             if(soggettoRegistry!=null) {
  152.                 labelSoggetto = soggettiHelper.getLabelNomeSoggetto(protocollo, soggettoRegistry.getTipo() , soggettoRegistry.getNome());
  153.             }
  154.             else {
  155.                 labelSoggetto = tipoprov+"/"+nomeprov;
  156.             }
  157.            
  158.             if(arrivoDaLista) {
  159.                 String labelVerifica = SoggettiCostanti.LABEL_SOGGETTI_VERIFICA_CERTIFICATI_DI + labelSoggetto;
  160.                 listParameter.add(new Parameter(labelVerifica, null));
  161.             }
  162.             else {
  163.                 listParameter.add(new Parameter(labelSoggetto,
  164.                         SoggettiCostanti.SERVLET_NAME_SOGGETTI_CHANGE,
  165.                         new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_ID,soggettoRegistry.getId()+""),
  166.                         new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_NOME,soggettoRegistry.getNome()),
  167.                         new Parameter(SoggettiCostanti.PARAMETRO_SOGGETTO_TIPO,soggettoRegistry.getTipo())));
  168.                 String labelVerifica = SoggettiCostanti.LABEL_SOGGETTI_VERIFICA_CERTIFICATI;
  169.                 listParameter.add(new Parameter(labelVerifica, null));
  170.             }
  171.            
  172.             // setto la barra del titolo
  173.             ServletUtils.setPageDataTitle(pd, listParameter );
  174.            
  175.             List<DataElement> dati = new ArrayList<>();
  176.             dati.add(ServletUtils.getDataElementForEditModeFinished());
  177.            
  178.            
  179.             // -- raccolgo dati
  180.            
  181.             boolean ssl = false;
  182.             boolean sslManuale = false;
  183.             int countSsl = 0;
  184.             if(soggettoRegistry!=null) {
  185.                 for (int i = 0; i < soggettoRegistry.sizeCredenzialiList(); i++) {
  186.                     CredenzialiSoggetto c = soggettoRegistry.getCredenziali(i);
  187.                     if(org.openspcoop2.core.registry.constants.CredenzialeTipo.SSL.equals(c.getTipo())) {
  188.                         if(c.getCertificate()!=null) {
  189.                             ssl = true;
  190.                             countSsl++;
  191.                         }
  192.                         else {
  193.                             sslManuale=true;
  194.                         }
  195.                     }
  196.                 }
  197.             }
  198.             boolean piuCertificatiAssociatiEntita = countSsl>1;
  199.            
  200.             boolean verificaCertificatiEffettuata = false;
  201.            
  202.             if(!ssl) {
  203.                 if(sslManuale) {
  204.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_PRESENTE_SOLO_CONFIGURAZIONE_MANUALE,
  205.                             Costanti.MESSAGE_TYPE_INFO);
  206.                 }
  207.                 else {
  208.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_NON_PRESENTI,
  209.                             Costanti.MESSAGE_TYPE_INFO);
  210.                 }
  211.                
  212.                 pd.disableEditMode();
  213.                
  214.                 verificaCertificatiEffettuata = true;
  215.             }
  216.             else {
  217.                
  218.                 boolean sceltaClusterId = soggettiCore.isVerificaCertificatiSceltaClusterId();
  219.                
  220.                 if(aliases.size()==1 || alias!=null || !sceltaClusterId) {
  221.                    
  222.                     if(alias==null && !sceltaClusterId) {
  223.                         alias = CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI;
  224.                     }
  225.            
  226.                     // -- verifica                      
  227.                     List<String> aliasesForCheck = new ArrayList<>();
  228.                     boolean all = false;
  229.                     if(aliases.size()==1) {
  230.                         aliasesForCheck.add(aliases.get(0));
  231.                     }
  232.                     else if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)) {
  233.                         aliasesForCheck.addAll(aliases);
  234.                         all = true;
  235.                     }
  236.                     else {
  237.                         aliasesForCheck.add(alias);
  238.                     }
  239.                    
  240.                     CertificateChecker certificateChecker = null;
  241.                     if(all) {
  242.                         certificateChecker = soggettiCore.getJmxPdDCertificateChecker();
  243.                     }
  244.                     else {
  245.                         certificateChecker = soggettiCore.newJmxPdDCertificateChecker(aliasesForCheck);
  246.                     }
  247.                     StringBuilder sbDetailsError = new StringBuilder();
  248.                    
  249.                     int sogliaWarningGiorni = soggettiCore.getVerificaCertificatiWarningExpirationDays();
  250.                    
  251.                    
  252.                     String posizioneErrore = null;
  253.                     String extraErrore = null;
  254.                    
  255.                     // verifica sl
  256.                     StringBuilder sbDetailsWarningSsl = new StringBuilder();
  257.                     String posizioneWarningSsl = null;
  258.                     if(ssl) {
  259.                         certificateChecker.checkSoggetto(sbDetailsError, sbDetailsWarningSsl,
  260.                             ssl, soggettoRegistry,
  261.                             sogliaWarningGiorni);
  262.                         if(sbDetailsError.length()>0) {
  263.                             posizioneErrore = labelSoggetto;
  264.                         }
  265.                         else if(sbDetailsWarningSsl.length()>0) {
  266.                             posizioneWarningSsl = labelSoggetto;
  267.                         }
  268.                     }
  269.                    
  270.                     // analisi warning
  271.                     String warning = null;
  272.                     String posizioneWarning = null;
  273.                     String extraWarning = null;
  274.                     if(sbDetailsError.length()<=0 &&
  275.                         sbDetailsWarningSsl.length()>0) {
  276.                         warning = sbDetailsWarningSsl.toString();
  277.                         posizioneWarning = posizioneWarningSsl;
  278.                     }
  279.                    
  280.                     // esito
  281.                     List<String> formatIds = new ArrayList<>();
  282.                     soggettiCore.formatVerificaCertificatiEsito(pd, formatIds,
  283.                             (sbDetailsError.length()>0 ? sbDetailsError.toString() : null), extraErrore, posizioneErrore,
  284.                             warning, extraWarning, posizioneWarning,
  285.                             piuCertificatiAssociatiEntita);
  286.                            
  287.                     pd.disableEditMode();
  288.                    
  289.                     verificaCertificatiEffettuata = true;
  290.                    
  291.                 } else {
  292.                    
  293.                     DataElement deTestConnettivita = new DataElement();
  294.                     deTestConnettivita.setType(DataElementType.TITLE);
  295.                     deTestConnettivita.setLabel(SoggettiCostanti.LABEL_SOGGETTI_VERIFICA_CERTIFICATI);
  296.                     dati.add(deTestConnettivita);
  297.                    
  298.                     soggettiHelper.addVerificaCertificatoSceltaAlias(aliases, dati);
  299.                 }
  300.             }
  301.            
  302.             pd.setLabelBottoneInvia(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_BOTTONE);
  303.            
  304.             dati = soggettiHelper.addSoggettoHiddenToDati(dati, id,nomeprov, tipoprov);
  305.            
  306.             DataElement de = new DataElement();
  307.             de.setValue(arrivoDaLista+"");
  308.             de.setType(DataElementType.HIDDEN);
  309.             de.setName(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA);
  310.             dati.add(de);
  311.            
  312.             pd.setDati(dati);

  313.             if(verificaCertificatiEffettuata) {
  314.                
  315.                 // verifica richiesta dal link nella lista, torno alla lista
  316.                 if(arrivoDaLista) {
  317.                
  318.                     String filterDominioInterno = soggettiHelper.getParameter(SoggettiCostanti.PARAMETRO_SOGGETTO_FILTER_DOMINIO_INTERNO);
  319.                     boolean forceFilterDominioInterno = false;
  320.                     if("true".equalsIgnoreCase(filterDominioInterno)) {
  321.                         forceFilterDominioInterno = true;
  322.                     }
  323.                    
  324.                     boolean multiTenant = soggettiCore.isMultitenant();
  325.                    
  326.                     String userLogin = ServletUtils.getUserLoginFromSession(session);  
  327.                    
  328.                     ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);
  329.                    
  330.                     int idLista = Liste.SOGGETTI;
  331.                    
  332.                     // poiche' esistono filtri che hanno necessita di postback salvo in sessione
  333.                     List<Soggetto> lista = null;
  334.                     if(soggettiCore.isRegistroServiziLocale() &&
  335.                         !ServletUtils.isSearchDone(soggettiHelper)) {
  336.                         lista = ServletUtils.getRisultatiRicercaFromSession(request, session, idLista,  Soggetto.class);
  337.                     }
  338.                    
  339.                     ricerca = soggettiHelper.checkSearchParameters(idLista, ricerca);
  340.                    
  341.                     if(forceFilterDominioInterno) {
  342.                         ricerca.addFilter(idLista, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE);
  343.                     }
  344.                     else if(!multiTenant && !soggettiHelper.isModalitaCompleta()) {
  345.                         ricerca.addFilter(idLista, Filtri.FILTRO_DOMINIO, SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE);
  346.                     }
  347.                    
  348.                     if(soggettiCore.isRegistroServiziLocale()){
  349.                         if(lista==null) {
  350.                             if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  351.                                 lista = soggettiCore.soggettiRegistroList(null, ricerca);
  352.                             }else{
  353.                                 lista = soggettiCore.soggettiRegistroList(userLogin, ricerca);
  354.                             }
  355.                         }
  356.                        
  357.                         if(!soggettiHelper.isPostBackFilterElement()) {
  358.                             ServletUtils.setRisultatiRicercaIntoSession(request, session, idLista, lista); // salvo poiche' esistono filtri che hanno necessita di postback
  359.                         }
  360.                        
  361.                         soggettiHelper.prepareSoggettiList(lista, ricerca);
  362.                     }
  363.                     else{
  364.                         List<org.openspcoop2.core.config.Soggetto> listaConfig = null;
  365.                         if(soggettiCore.isVisioneOggettiGlobale(userLogin)){
  366.                             listaConfig = soggettiCore.soggettiList(null, ricerca);
  367.                         }else{
  368.                             listaConfig = soggettiCore.soggettiList(userLogin, ricerca);
  369.                         }
  370.                         soggettiHelper.prepareSoggettiConfigList(listaConfig, ricerca);
  371.                     }
  372.                    
  373.                     ServletUtils.setSearchObjectIntoSession(request, session, ricerca);
  374.                    
  375.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  376.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI_VERIFICA_CERTIFICATI, CostantiControlStation.TIPO_OPERAZIONE_VERIFICA_CERTIFICATI);
  377.                    
  378.                 }
  379.                 // verifica richiesta dal dettaglio, torno al dettaglio
  380.                 else {

  381.                     // setto la barra del titolo
  382.                     ServletUtils.setPageDataTitle_ServletChange(pd, SoggettiCostanti.LABEL_SOGGETTI,
  383.                             SoggettiCostanti.SERVLET_NAME_SOGGETTI_LIST,
  384.                             soggettiHelper.getLabelNomeSoggetto(protocollo, tipoprov , nomeprov));

  385.                     String portadom = null;
  386.                     String descr = null;
  387.                     String versioneProtocollo = null;
  388.                     String pdd = null;
  389.                     String codiceIpa = null;
  390.                     String pdUrlPrefixRewriter = null;
  391.                     String paUrlPrefixRewriter = null;
  392.                     String dominio = null;
  393.                     boolean isRouter = false;
  394.                     boolean privato = false;
  395.                     String tipoauthSoggetto = null;
  396.                     String utenteSoggetto = null;
  397.                     String passwordSoggetto = null;
  398.                     String subjectSoggetto = null;
  399.                     String issuerSoggetto = null;
  400.                     String principalSoggetto = null;
  401.                     String multipleApiKey = null;
  402.                     String appId = null;
  403.                     String apiKey = null;
  404.                     BinaryParameter tipoCredenzialiSSLFileCertificato = soggettiHelper.getBinaryParameter(ConnettoriCostanti.PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_FILE_CERTIFICATO);
  405.                     String tipoCredenzialiSSLSorgente = null;
  406.                     String tipoCredenzialiSSLAliasCertificato = null;
  407.                     String tipoCredenzialiSSLAliasCertificatoSubject= null;
  408.                     String tipoCredenzialiSSLAliasCertificatoIssuer= null;
  409.                     String tipoCredenzialiSSLAliasCertificatoType= null;
  410.                     String tipoCredenzialiSSLAliasCertificatoVersion= null;
  411.                     String tipoCredenzialiSSLAliasCertificatoSerialNumber= null;
  412.                     String tipoCredenzialiSSLAliasCertificatoSelfSigned= null;
  413.                     String tipoCredenzialiSSLAliasCertificatoNotBefore= null;
  414.                     String tipoCredenzialiSSLAliasCertificatoNotAfter = null;
  415.                     String tipoCredenzialiSSLVerificaTuttiICampi = null;
  416.                     String tipoCredenzialiSSLConfigurazioneManualeSelfSigned= null;
  417.                     org.openspcoop2.utils.certificate.ArchiveType tipoCredenzialiSSLTipoArchivio = org.openspcoop2.utils.certificate.ArchiveType.CER;
  418.                     String tipoCredenzialiSSLFileCertificatoPassword = null;
  419.                     List<String> listaAliasEstrattiCertificato = new ArrayList<>();
  420.                    
  421.                     String tipoCredenzialiSSLWizardStep = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_NO_WIZARD;
  422.                    
  423.                     String changepwd = null;
  424.                    
  425.                     boolean isSupportatoAutenticazioneSoggetti = soggettiCore.isSupportatoAutenticazioneSoggetti(protocollo);
  426.                     boolean isSupportatoCodiceIPA = soggettiCore.isSupportatoCodiceIPA(protocollo);
  427.                     boolean isSupportatoIdentificativoPorta = soggettiCore.isSupportatoIdentificativoPorta(protocollo);
  428.                    
  429.                     String nomePddGestioneLocale = null;
  430.                     if(!pddCore.isGestionePddAbilitata(soggettiHelper)){
  431.                         nomePddGestioneLocale = pddCore.getNomePddOperativa();
  432.                         if(nomePddGestioneLocale==null) {
  433.                             throw new Exception("Non è stata rilevata una pdd di tipologia 'operativo'");
  434.                         }
  435.                     }
  436.                    
  437.                     if(soggettiCore.isRegistroServiziLocale()){
  438.                         portadom = soggettoRegistry.getIdentificativoPorta();
  439.                         descr = soggettoRegistry.getDescrizione();
  440.                         pdd = soggettoRegistry.getPortaDominio();
  441.                                                
  442.                         if(!pddCore.isGestionePddAbilitata(soggettiHelper)){
  443.                             if(pddCore.isPddEsterna(pdd)) {
  444.                                 dominio = SoggettiCostanti.SOGGETTO_DOMINIO_ESTERNO_VALUE;
  445.                             }
  446.                             else {
  447.                                 dominio = SoggettiCostanti.SOGGETTO_DOMINIO_OPERATIVO_VALUE;
  448.                             }
  449.                         }
  450.                         versioneProtocollo = soggettoRegistry.getVersioneProtocollo();
  451.                         privato = soggettoRegistry.getPrivato()!=null && soggettoRegistry.getPrivato();
  452.                         codiceIpa = soggettoRegistry.getCodiceIpa();
  453.                        
  454.                         if(isSupportatoAutenticazioneSoggetti){
  455.                             if (tipoauthSoggetto == null){
  456.                                 CredenzialiSoggetto credenziali = null;
  457.                                 if(soggettoRegistry.sizeCredenzialiList()>0) {
  458.                                     credenziali = soggettoRegistry.getCredenziali(0);
  459.                                 }
  460.                                 if (credenziali != null){
  461.                                     if(credenziali.getTipo()!=null)
  462.                                         tipoauthSoggetto = credenziali.getTipo().toString();
  463.                                     utenteSoggetto = credenziali.getUser();
  464.                                     passwordSoggetto = credenziali.getPassword();
  465.                                     if(tipoauthSoggetto!=null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_BASIC.equals(tipoauthSoggetto)){
  466.                                         tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  467.                                     }
  468.                                     else if(tipoauthSoggetto!=null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_APIKEY.equals(tipoauthSoggetto)){
  469.                                         tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  470.                                         multipleApiKey = credenziali.isAppId() ? Costanti.CHECK_BOX_ENABLED : Costanti.CHECK_BOX_DISABLED;
  471.                                         appId = credenziali.getUser();
  472.                                         apiKey = credenziali.getPassword();
  473.                                     }
  474.                                     principalSoggetto = credenziali.getUser();
  475.                                    
  476.                                     if(credenziali.getCertificate() != null) {
  477.                                         tipoCredenzialiSSLFileCertificato.setValue(credenziali.getCertificate());
  478.                                         tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_UPLOAD_CERTIFICATO;
  479.                                         tipoCredenzialiSSLVerificaTuttiICampi = credenziali.isCertificateStrictVerification() ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  480.                                        
  481.                                         try {
  482.                                             Certificate cSelezionato = ArchiveLoader.load(tipoCredenzialiSSLFileCertificato.getValue());
  483.                                             tipoCredenzialiSSLAliasCertificatoIssuer = cSelezionato.getCertificate().getIssuer().getNameNormalized();
  484.                                             tipoCredenzialiSSLAliasCertificatoSubject = cSelezionato.getCertificate().getSubject().getNameNormalized();
  485.                                             tipoCredenzialiSSLAliasCertificatoSelfSigned = cSelezionato.getCertificate().isSelfSigned() ? CostantiControlStation.LABEL_SI : CostantiControlStation.LABEL_NO;
  486.                                             tipoCredenzialiSSLAliasCertificatoSerialNumber = cSelezionato.getCertificate().getSerialNumber() + "";
  487.                                             tipoCredenzialiSSLAliasCertificatoType = cSelezionato.getCertificate().getType();
  488.                                             tipoCredenzialiSSLAliasCertificatoVersion = cSelezionato.getCertificate().getVersion() + "";
  489.                                             SimpleDateFormat sdf = new SimpleDateFormat(SoggettiChangeStrutsBean.CERTIFICATE_FORMAT);
  490.                                             tipoCredenzialiSSLAliasCertificatoNotBefore = sdf.format(cSelezionato.getCertificate().getNotBefore());
  491.                                             tipoCredenzialiSSLAliasCertificatoNotAfter = sdf.format(cSelezionato.getCertificate().getNotAfter());
  492.                                         }catch(UtilsException e) {
  493.                                             pd.setMessage("Il Certificato selezionato non &egrave; valido: "+e.getMessage());
  494.                                             tipoCredenzialiSSLAliasCertificato = "";
  495.                                             tipoCredenzialiSSLAliasCertificatoSubject= "";
  496.                                             tipoCredenzialiSSLAliasCertificatoIssuer= "";
  497.                                             tipoCredenzialiSSLAliasCertificatoType= "";
  498.                                             tipoCredenzialiSSLAliasCertificatoVersion= "";
  499.                                             tipoCredenzialiSSLAliasCertificatoSerialNumber= "";
  500.                                             tipoCredenzialiSSLAliasCertificatoSelfSigned= "";
  501.                                             tipoCredenzialiSSLAliasCertificatoNotBefore= "";
  502.                                             tipoCredenzialiSSLAliasCertificatoNotAfter = "";
  503.                                         }
  504.                                     } else {
  505.                                         subjectSoggetto = credenziali.getSubject();
  506.                                         issuerSoggetto = credenziali.getIssuer();
  507.                                         tipoCredenzialiSSLSorgente = ConnettoriCostanti.VALUE_PARAMETRO_CREDENZIALI_AUTENTICAZIONE_CONFIGURAZIONE_SSL_CONFIGURAZIONE_MANUALE;
  508.                                         tipoCredenzialiSSLConfigurazioneManualeSelfSigned = ( subjectSoggetto != null && subjectSoggetto.equals(issuerSoggetto)) ? Costanti.CHECK_BOX_ENABLED :Costanti.CHECK_BOX_DISABLED;
  509.                                     }
  510.                                 }
  511.                             }
  512.                             if (tipoauthSoggetto == null) {
  513.                                 tipoauthSoggetto = ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA;
  514.                             }
  515.                         }

  516.                     }
  517.                     else{
  518.                         portadom = soggettoConfig.getIdentificativoPorta();
  519.                         descr = soggettoConfig.getDescrizione();
  520.                         isRouter = soggettoConfig.getRouter();
  521.                     }

  522.                     pdUrlPrefixRewriter = soggettoConfig.getPdUrlPrefixRewriter();
  523.                     paUrlPrefixRewriter = soggettoConfig.getPaUrlPrefixRewriter();
  524.                    
  525.                     boolean isPddEsterna = pddCore.isPddEsterna(pdd);
  526.                     if(isSupportatoAutenticazioneSoggetti &&
  527.                         isPddEsterna &&
  528.                             tipoauthSoggetto==null && ConnettoriCostanti.AUTENTICAZIONE_TIPO_NESSUNA.equals(tipoauthSoggetto)){
  529.                         tipoauthSoggetto = soggettiCore.getAutenticazione_generazioneAutomaticaPorteApplicative();
  530.                     }
  531.                    
  532.                     IDSoggetto idSoggetto = new IDSoggetto(tipoprov,nomeprov);
  533.                    
  534.                     List<String> tipiSoggetti = soggettiCore.getTipiSoggettiGestitiProtocollo(protocollo);
  535.                    
  536.                     List<String> versioniProtocollo = null;
  537.                     if(soggettiHelper.isModalitaAvanzata()){
  538.                         versioniProtocollo = soggettiCore.getVersioniProtocollo(protocollo);
  539.                     }else {
  540.                         versioniProtocollo = new ArrayList<>();
  541.                         versioneProtocollo = soggettiCore.getVersioneDefaultProtocollo(protocollo);
  542.                         versioniProtocollo.add(versioneProtocollo);
  543.                     }

  544.                     List<String> listaTipiProtocollo = soggettiCore.getProtocolli(request, session);
  545.                                    
  546.                     boolean pddOperativa = false;
  547.                     if(soggettoRegistry.getPortaDominio()!=null && !"".equals(soggettoRegistry.getPortaDominio())){
  548.                         PdDControlStation pddCtrlstat = pddCore.getPdDControlStation(soggettoRegistry.getPortaDominio());
  549.                         pddOperativa = PddTipologia.OPERATIVO.toString().equals(pddCtrlstat.getTipo());
  550.                     }
  551.                    
  552.                     String [] pddList = null;
  553.                     if(!pddOperativa && soggettoRegistry.getPortaDominio()!=null) {
  554.                         pddList = new String[1];
  555.                         pddList[0] = soggettoRegistry.getPortaDominio();
  556.                     }
  557.                     String [] pddEsterneList = null;
  558.                    
  559.                     org.openspcoop2.core.registry.Connettore connettore = null;
  560.                     if(soggettiCore.isRegistroServiziLocale()){
  561.                         connettore = soggettoRegistry.getConnettore();
  562.                     }
  563.                    
  564.                     int numPA = 0;
  565.                     int numPD = 0;
  566.                    
  567.                     ProtocolProperties protocolProperties = null;
  568.                     List<ProtocolProperty> oldProtocolPropertyList = null;
  569.                     IConsoleDynamicConfiguration consoleDynamicConfiguration = null;
  570.                     IRegistryReader registryReader = null;
  571.                     IConfigIntegrationReader configRegistryReader = null;
  572.                     ConsoleConfiguration consoleConfiguration = null;
  573.                     ConsoleOperationType consoleOperationType = ConsoleOperationType.CHANGE;
  574.                     try{
  575.                         IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName(protocollo);
  576.                         consoleDynamicConfiguration = protocolFactory.createDynamicConfigurationConsole();
  577.                         registryReader = soggettiCore.getRegistryReader(protocolFactory);
  578.                         configRegistryReader = soggettiCore.getConfigIntegrationReader(protocolFactory);
  579.                         consoleConfiguration = consoleDynamicConfiguration.getDynamicConfigSoggetto(consoleOperationType, soggettiHelper,
  580.                                 registryReader, configRegistryReader, idSoggetto);
  581.                         Soggetto soggetto = registryReader.getSoggetto(idSoggetto);
  582.                         oldProtocolPropertyList = soggetto.getProtocolPropertyList();
  583.                         protocolProperties = soggettiHelper.estraiProtocolPropertiesDaRequest(consoleConfiguration, consoleOperationType);
  584.                     }catch(RegistryNotFound r){
  585.                         // ignore
  586.                     }
  587.                    
  588.                     Properties propertiesProprietario = new Properties();
  589.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_ID_PROPRIETARIO, id);
  590.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO, ProtocolPropertiesCostanti.PARAMETRO_PP_TIPO_PROPRIETARIO_VALUE_SOGGETTO);
  591.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_NOME_PROPRIETARIO, tipoprov + "/" + nomeprov);
  592.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_URL_ORIGINALE_CHANGE, URLEncoder.encode( SoggettiCostanti.SERVLET_NAME_SOGGETTI_CHANGE + "?" + request.getQueryString(), "UTF-8"));
  593.                     propertiesProprietario.setProperty(ProtocolPropertiesCostanti.PARAMETRO_PP_PROTOCOLLO, protocollo);
  594.                    
  595.                     boolean visualizzaModificaCertificato = false;
  596.                     boolean visualizzaAddCertificato = false;
  597.                     Integer numeroCertificati = soggettoRegistry.sizeCredenzialiList();
  598.                     if(soggettoRegistry.sizeCredenzialiList()>0) {
  599.                         visualizzaAddCertificato = true;
  600.                         if(soggettoRegistry.sizeCredenzialiList() == 1) {  // se ho definito solo un certificato c'e' il link diretto alla modifica
  601.                             visualizzaModificaCertificato = true;
  602.                         }
  603.                     }
  604.                    
  605.                     String servletCredenzialiList = SoggettiCostanti.SERVLET_NAME_SOGGETTI_CREDENZIALI_LIST;
  606.                     String servletCredenzialiAdd = SoggettiCostanti.SERVLET_NAME_SOGGETTI_CREDENZIALI_ADD;
  607.                     List<Parameter> parametersServletCredenzialiList = new ArrayList<>();
  608.                     parametersServletCredenzialiList.add(pIdSoggetto);
  609.                     parametersServletCredenzialiList.add(pNomeSoggetto);
  610.                     parametersServletCredenzialiList.add(pTipoSoggetto);
  611.                    
  612.                     dati.add(ServletUtils.getDataElementForEditModeFinished());

  613.                     // update della configurazione
  614.                     consoleDynamicConfiguration.updateDynamicConfigSoggetto(consoleConfiguration, consoleOperationType, soggettiHelper, protocolProperties,
  615.                             registryReader, configRegistryReader, idSoggetto);
  616.                    
  617.                     dati = soggettiHelper.addSoggettiToDati(TipoOperazione.CHANGE, dati, nomeprov, tipoprov, portadom, descr,
  618.                             isRouter, tipiSoggetti, versioneProtocollo, privato, codiceIpa, versioniProtocollo,
  619.                             isSupportatoCodiceIPA, isSupportatoIdentificativoPorta,
  620.                             pddList,pddEsterneList,nomePddGestioneLocale,pdd,id,nomeprov,tipoprov,connettore,
  621.                             numPD,pdUrlPrefixRewriter,numPA,paUrlPrefixRewriter,listaTipiProtocollo,protocollo,
  622.                             isSupportatoAutenticazioneSoggetti,utenteSoggetto,passwordSoggetto,subjectSoggetto,principalSoggetto,tipoauthSoggetto,
  623.                             isPddEsterna,null,dominio,tipoCredenzialiSSLSorgente, tipoCredenzialiSSLTipoArchivio, tipoCredenzialiSSLFileCertificato, tipoCredenzialiSSLFileCertificatoPassword, listaAliasEstrattiCertificato,
  624.                             tipoCredenzialiSSLAliasCertificato, tipoCredenzialiSSLAliasCertificatoSubject, tipoCredenzialiSSLAliasCertificatoIssuer,
  625.                             tipoCredenzialiSSLAliasCertificatoType, tipoCredenzialiSSLAliasCertificatoVersion, tipoCredenzialiSSLAliasCertificatoSerialNumber,
  626.                             tipoCredenzialiSSLAliasCertificatoSelfSigned, tipoCredenzialiSSLAliasCertificatoNotBefore, tipoCredenzialiSSLAliasCertificatoNotAfter,
  627.                             tipoCredenzialiSSLVerificaTuttiICampi, tipoCredenzialiSSLConfigurazioneManualeSelfSigned, issuerSoggetto,tipoCredenzialiSSLWizardStep,
  628.                             changepwd,
  629.                             multipleApiKey, appId, apiKey,
  630.                             visualizzaModificaCertificato, visualizzaAddCertificato, servletCredenzialiList, parametersServletCredenzialiList, numeroCertificati, servletCredenzialiAdd, soggettoRegistry.sizeProprietaList());

  631.                     // aggiunta campi custom
  632.                     dati = soggettiHelper.addProtocolPropertiesToDatiRegistry(dati, consoleConfiguration,consoleOperationType, protocolProperties,oldProtocolPropertyList,propertiesProprietario);
  633.                    
  634.                     pd.setDati(dati);
  635.                    
  636.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  637.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI, ForwardParams.CHANGE());
  638.                    
  639.                 }
  640.             }
  641.             else {
  642.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  643.                 return ServletUtils.getStrutsForwardEditModeFinished(mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI_VERIFICA_CERTIFICATI, ForwardParams.OTHER(""));
  644.             }
  645.            
  646.         } catch (Exception e) {
  647.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping, SoggettiCostanti.OBJECT_NAME_SOGGETTI_VERIFICA_CERTIFICATI, ForwardParams.OTHER(""));
  648.         }  
  649.     }
  650. }