ConfigurazionePolicyGestioneTokenVerificaCertificati.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.config;

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

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

  28. import org.apache.struts.action.Action;
  29. import org.apache.struts.action.ActionForm;
  30. import org.apache.struts.action.ActionForward;
  31. import org.apache.struts.action.ActionMapping;
  32. import org.openspcoop2.core.commons.CoreException;
  33. import org.openspcoop2.core.commons.Liste;
  34. import org.openspcoop2.core.config.GenericProperties;
  35. import org.openspcoop2.core.config.GestioneToken;
  36. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  37. import org.openspcoop2.core.config.constants.StatoFunzionalitaConWarning;
  38. import org.openspcoop2.core.mvc.properties.Config;
  39. import org.openspcoop2.core.mvc.properties.utils.ConfigManager;
  40. import org.openspcoop2.core.mvc.properties.utils.PropertiesSourceConfiguration;
  41. import org.openspcoop2.pdd.config.ConfigurazionePdDReader;
  42. import org.openspcoop2.pdd.core.jmx.JMXUtils;
  43. import org.openspcoop2.pdd.core.token.PolicyGestioneToken;
  44. import org.openspcoop2.pdd.core.token.PolicyNegoziazioneToken;
  45. import org.openspcoop2.pdd.core.token.TokenUtilities;
  46. import org.openspcoop2.pdd.core.token.attribute_authority.AttributeAuthorityUtilities;
  47. import org.openspcoop2.pdd.core.token.attribute_authority.PolicyAttributeAuthority;
  48. import org.openspcoop2.protocol.registry.RegistroServiziReader;
  49. import org.openspcoop2.utils.certificate.KeystoreParams;
  50. import org.openspcoop2.web.ctrlstat.core.CertificateChecker;
  51. import org.openspcoop2.web.ctrlstat.core.ConsoleSearch;
  52. import org.openspcoop2.web.ctrlstat.core.ControlStationCore;
  53. import org.openspcoop2.web.ctrlstat.core.ControlStationCoreException;
  54. import org.openspcoop2.web.ctrlstat.costanti.CostantiControlStation;
  55. import org.openspcoop2.web.ctrlstat.servlet.GeneralHelper;
  56. import org.openspcoop2.web.lib.mvc.Costanti;
  57. import org.openspcoop2.web.lib.mvc.DataElement;
  58. import org.openspcoop2.web.lib.mvc.DataElementType;
  59. import org.openspcoop2.web.lib.mvc.ForwardParams;
  60. import org.openspcoop2.web.lib.mvc.GeneralData;
  61. import org.openspcoop2.web.lib.mvc.PageData;
  62. import org.openspcoop2.web.lib.mvc.Parameter;
  63. import org.openspcoop2.web.lib.mvc.ServletUtils;
  64. import org.openspcoop2.web.lib.mvc.TipoOperazione;
  65. import org.openspcoop2.web.lib.mvc.properties.beans.ConfigBean;

  66. /**
  67.  * ConfigurazionePolicyGestioneTokenVerificaCertificati
  68.  *
  69.  * @author Andrea Poli (poli@link.it)
  70.  * @author Giuliano Pintori (pintori@link.it)
  71.  * @author $Author$
  72.  * @version $Rev$, $Date$
  73.  *
  74.  */
  75. public class ConfigurazionePolicyGestioneTokenVerificaCertificati extends Action {

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

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

  79.         // Inizializzo PageData
  80.         PageData pd = new PageData();

  81.         GeneralHelper generalHelper = new GeneralHelper(session);

  82.         // Inizializzo GeneralData
  83.         GeneralData gd = generalHelper.initGeneralData(request);

  84.         try {
  85.             ConfigurazioneHelper confHelper = new ConfigurazioneHelper(request, pd, session);
  86.            
  87.             String id = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_ID);
  88.             String infoType = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE);
  89.             if(infoType==null) {
  90.                 infoType = ServletUtils.getObjectFromSession(request, session, String.class, ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE);
  91.             }
  92.             boolean attributeAuthority = ConfigurazioneCostanti.isConfigurazioneAttributeAuthority(infoType);
  93.            
  94.             String alias = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_SISTEMA_NODO_CLUSTER);
  95.            
  96.             // Preparo il menu
  97.             confHelper.makeMenu();
  98.            
  99.             ConfigurazioneCore confCore = new ConfigurazioneCore();
  100.            
  101.             String verificaCertificatiFromLista = confHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA);
  102.             boolean arrivoDaLista = "true".equalsIgnoreCase(verificaCertificatiFromLista);
  103.            
  104.             // Prendo la lista di aliases
  105.             List<String> aliases = confCore.getJmxPdDAliases();
  106.             if(aliases==null || aliases.isEmpty()){
  107.                 throw new ControlStationCoreException("Pagina non prevista, la sezione configurazione non permette di accedere a questa pagina, se la configurazione non e' corretta");
  108.             }
  109.            
  110.             GenericProperties genericProperties = confCore.getGenericProperties(Long.parseLong(id));
  111.            
  112.             PropertiesSourceConfiguration propertiesSourceConfiguration = attributeAuthority ?
  113.                     confCore.getAttributeAuthorityPropertiesSourceConfiguration() :
  114.                     confCore.getPolicyGestioneTokenPropertiesSourceConfiguration();
  115.            
  116.             ConfigManager configManager = ConfigManager.getinstance(ControlStationCore.getLog());
  117.             configManager.leggiConfigurazioni(propertiesSourceConfiguration, true);

  118.             String verificaConnettivitaS = confHelper.getParameter(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTIVITA);
  119.             boolean verificaConnettivita = "true".equalsIgnoreCase(verificaConnettivitaS);
  120.            
  121.             // setto la barra del titolo
  122.             List<Parameter> lstParam = new ArrayList<>();

  123.             String label = attributeAuthority ?
  124.                     ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY :
  125.                     ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN;
  126.            
  127.             lstParam.add(new Parameter(label, ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_LIST));
  128.            
  129.             if(arrivoDaLista) {
  130.                 String labelVerifica =
  131.                         (verificaConnettivita ? ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CONNETTIVITA_DI : ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CERTIFICATI_DI)
  132.                                 + genericProperties.getNome();
  133.                 lstParam.add(new Parameter(labelVerifica, null));
  134.             }
  135.             else {
  136.                 Parameter pPolicyId = new Parameter(ConfigurazioneCostanti.PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_ID, genericProperties.getId() + "");
  137.                 Parameter pInfoType = new Parameter(ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE, infoType);
  138.                
  139.                 lstParam.add(new Parameter(genericProperties.getNome(),
  140.                         ConfigurazioneCostanti.SERVLET_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_CHANGE,
  141.                         pInfoType, pPolicyId));
  142.                
  143.                 String labelVerifica = (verificaConnettivita ? ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CONNETTIVITA : ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CERTIFICATI);
  144.                 lstParam.add(new Parameter(labelVerifica, null));
  145.             }

  146.             // setto la barra del titolo
  147.             ServletUtils.setPageDataTitle(pd, lstParam );
  148.            
  149.             List<DataElement> dati = new ArrayList<>();
  150.             dati.add(ServletUtils.getDataElementForEditModeFinished());

  151.             // -- raccolgo dati
  152.                        
  153.             boolean validazione = false;
  154.             boolean negoziazione = false;
  155.             if(!attributeAuthority) {
  156.                 validazione = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_GESTIONE_POLICY_TOKEN.equals(genericProperties.getTipologia());
  157.                 negoziazione = ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_RETRIEVE_POLICY_TOKEN.equals(genericProperties.getTipologia());
  158.             }
  159.            
  160.             boolean httpsDynamicDiscovery = false;
  161.             boolean httpsValidazioneJWT = false;
  162.             boolean httpsIntrospection = false;
  163.             boolean httpsUserInfo = false;
  164.             boolean validazioneJwt = false;
  165.             boolean forwardToJwt = false;
  166.             boolean https = false;
  167.             boolean signedJwt = false;
  168.             boolean jwtRichiesta = false;
  169.             boolean jwtRisposta = false;
  170.            
  171.             boolean verificaCertificatiPossibile = false;
  172.            
  173.             boolean riferimentoApplicativoModi = false;
  174.             boolean riferimentoFruizioneModi = false;
  175.            
  176.             if(!verificaConnettivita) {
  177.                 if(attributeAuthority) {
  178.                     PolicyAttributeAuthority policy = AttributeAuthorityUtilities.convertTo(genericProperties);
  179.                     https = policy.isEndpointHttps();
  180.                     if(policy.isRequestJws()) {
  181.                         KeystoreParams keystoreParams = AttributeAuthorityUtilities.getRequestJwsKeystoreParams(policy);
  182.                         if(keystoreParams!=null) {
  183.                             jwtRichiesta = true;
  184.                         }
  185.                     }
  186.                     if(policy.isResponseJws()) {
  187.                         KeystoreParams keystoreParams = AttributeAuthorityUtilities.getResponseJwsKeystoreParams(policy);
  188.                         if(keystoreParams!=null) {
  189.                             jwtRisposta = true;
  190.                         }
  191.                     }
  192.                     verificaCertificatiPossibile = https || jwtRichiesta || jwtRisposta;
  193.                 }
  194.                 else {
  195.                     if(validazione) {
  196.                         GestioneToken gestioneToken = new GestioneToken();
  197.                         gestioneToken.setIntrospection(StatoFunzionalitaConWarning.ABILITATO);
  198.                         gestioneToken.setUserInfo(StatoFunzionalitaConWarning.ABILITATO);
  199.                         gestioneToken.setValidazione(StatoFunzionalitaConWarning.ABILITATO);
  200.                         gestioneToken.setForward(StatoFunzionalita.ABILITATO);
  201.                         PolicyGestioneToken policyGestioneToken = TokenUtilities.convertTo(genericProperties, gestioneToken);
  202.                         if(policyGestioneToken.isDynamicDiscovery()) {
  203.                             httpsDynamicDiscovery = policyGestioneToken.isEndpointHttps(false, false);
  204.                         }
  205.                         if(!policyGestioneToken.isDynamicDiscovery()) {
  206.                             if(policyGestioneToken.isValidazioneJWT() && policyGestioneToken.isValidazioneJWTLocationHttp()) {
  207.                                 httpsValidazioneJWT = policyGestioneToken.isEndpointHttps(false, false);
  208.                             }
  209.                             if(policyGestioneToken.isIntrospection()) {
  210.                                 httpsIntrospection = policyGestioneToken.isEndpointHttps(true, false);
  211.                             }
  212.                             if(policyGestioneToken.isUserInfo()) {
  213.                                 httpsUserInfo = policyGestioneToken.isEndpointHttps(false, true);
  214.                             }
  215.                             if(policyGestioneToken.isValidazioneJWT()) {
  216.                                 String tokenType = policyGestioneToken.getTipoToken();
  217.                                 KeystoreParams keystoreParams = null;
  218.                                 if(org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_TYPE_JWS.equals(tokenType) ||
  219.                                         org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_TYPE_JWE.equals(tokenType)) {
  220.                                     keystoreParams = TokenUtilities.getValidazioneJwtKeystoreParams(policyGestioneToken);
  221.                                 }
  222.                                 if(keystoreParams!=null) {
  223.                                     validazioneJwt = true;
  224.                                 }
  225.                             }
  226.                         }
  227.                         if(policyGestioneToken.isForwardToken() && policyGestioneToken.isForwardTokenInformazioniRaccolte()) {
  228.                             String forwardInformazioniRaccolteMode = policyGestioneToken.getForwardTokenInformazioniRaccolteMode();
  229.                             KeystoreParams keystoreParams = null;
  230.                             if(org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_OP2_JWS.equals(forwardInformazioniRaccolteMode) ||
  231.                                     org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWS.equals(forwardInformazioniRaccolteMode) ||
  232.                                     org.openspcoop2.pdd.core.token.Costanti.POLICY_TOKEN_FORWARD_INFO_RACCOLTE_MODE_JWE.equals(forwardInformazioniRaccolteMode)) {
  233.                                 keystoreParams = TokenUtilities.getForwardToJwtKeystoreParams(policyGestioneToken);
  234.                             }
  235.                             if(keystoreParams!=null) {
  236.                                 forwardToJwt = true;
  237.                             }
  238.                         }  
  239.                         verificaCertificatiPossibile = httpsDynamicDiscovery || httpsValidazioneJWT || httpsIntrospection || httpsUserInfo || validazioneJwt || forwardToJwt;
  240.                     }
  241.                     else if(negoziazione) {
  242.                         PolicyNegoziazioneToken policy = TokenUtilities.convertTo(genericProperties);
  243.                         https = policy.isEndpointHttps();
  244.                         if(policy.isRfc7523x509Grant()) {
  245.                             KeystoreParams keystoreParams = TokenUtilities.getSignedJwtKeystoreParams(policy);
  246.                             riferimentoApplicativoModi = keystoreParams!=null && org.openspcoop2.pdd.core.token.Costanti.KEYSTORE_TYPE_APPLICATIVO_MODI_VALUE.equalsIgnoreCase(keystoreParams.getPath());
  247.                             riferimentoFruizioneModi = keystoreParams!=null && org.openspcoop2.pdd.core.token.Costanti.KEYSTORE_TYPE_FRUIZIONE_MODI_VALUE.equalsIgnoreCase(keystoreParams.getPath());
  248.                             if(keystoreParams!=null &&
  249.                                     !riferimentoApplicativoModi &&
  250.                                     !riferimentoFruizioneModi) {
  251.                                 signedJwt = true;      
  252.                             }
  253.                         }
  254.                         verificaCertificatiPossibile = https || signedJwt;
  255.                     }
  256.                     else {
  257.                         throw new CoreException("Tipologia '"+genericProperties.getTipologia()+"' non gestita");
  258.                     }
  259.                 }
  260.             }
  261.            
  262.             boolean verificaCertificatiEffettuata = false;
  263.            
  264.            

  265.            
  266.             if(!verificaConnettivita && !verificaCertificatiPossibile) {
  267.                
  268.                 if(riferimentoApplicativoModi) {
  269.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_DEFINITI_IN_MODI_APPLICATIVO,
  270.                             Costanti.MESSAGE_TYPE_INFO);
  271.                 }
  272.                 else if(riferimentoFruizioneModi) {
  273.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_DEFINITI_IN_MODI_FRUIZIONE,
  274.                             Costanti.MESSAGE_TYPE_INFO);
  275.                 }
  276.                 else {
  277.                     pd.setMessage(CostantiControlStation.LABEL_VERIFICA_CERTIFICATI_NON_PRESENTI,
  278.                             Costanti.MESSAGE_TYPE_INFO);
  279.                 }
  280.                
  281.                 pd.disableEditMode();
  282.                
  283.                 verificaCertificatiEffettuata = true;
  284.             }
  285.             else {
  286.                
  287.                 boolean sceltaClusterId = true;
  288.                 if(!verificaConnettivita) {
  289.                     sceltaClusterId = confCore.isVerificaCertificatiSceltaClusterId();
  290.                 }
  291.                
  292.                 if(aliases.size()==1 || alias!=null || !sceltaClusterId) {
  293.                    
  294.                     if(alias==null && !sceltaClusterId) {
  295.                         alias = CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI;
  296.                     }
  297.            
  298.                     // -- verifica                      
  299.            
  300.                     if(verificaConnettivita) {
  301.                         String aliasDescrizione = null;
  302.                         if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)){
  303.                             aliasDescrizione = aliases.get(0);
  304.                         }
  305.                         else {
  306.                             aliasDescrizione = alias!=null ? alias : aliases.get(0);
  307.                         }
  308.                        
  309.                         confHelper.addDescrizioneVerificaConnettivitaToDati(dati, genericProperties, null, false,
  310.                                 aliasDescrizione
  311.                                 );
  312.                        
  313.                         if (!confHelper.isEditModeInProgress()) {

  314.                             List<String> aliasesForCheck = new ArrayList<>();
  315.                             if(aliases.size()==1) {
  316.                                 aliasesForCheck.add(aliases.get(0));
  317.                             }
  318.                             else if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)) {
  319.                                 aliasesForCheck.addAll(aliases);
  320.                             }
  321.                             else {
  322.                                 aliasesForCheck.add(alias);
  323.                             }
  324.                                                        
  325.                             boolean rilevatoErrore = false;
  326.                             StringBuilder sbPerOperazioneEffettuata = new StringBuilder();
  327.                             int index = 0;
  328.                             for (String aliasForVerificaConnettore : aliasesForCheck) {
  329.                                
  330.                                 String risorsa = confCore.getJmxPdDConfigurazioneSistemaNomeRisorsaConfigurazionePdD(aliasForVerificaConnettore);

  331.                                 StringBuilder bfExternal = new StringBuilder();
  332.                                 String descrizione = confCore.getJmxPdDDescrizione(aliasForVerificaConnettore);
  333.                                 if(aliases.size()>1) {
  334.                                     if(index>0) {
  335.                                         bfExternal.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  336.                                     }
  337.                                     bfExternal.append(ConfigurazioneCostanti.LABEL_PARAMETRO_CONFIGURAZIONE_SISTEMA_NODO_CLUSTER).append(" ").append(descrizione).append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  338.                                 }                      
  339.                                 try{
  340.                                     String nomeMetodo = null;
  341.                                     if(attributeAuthority) {
  342.                                         nomeMetodo = confCore.getJmxPdDConfigurazioneSistemaNomeMetodoCheckConnettoreAttributeAuthority(aliasForVerificaConnettore);
  343.                                     }
  344.                                     else if(validazione) {
  345.                                         nomeMetodo = confCore.getJmxPdDConfigurazioneSistemaNomeMetodoCheckConnettoreTokenPolicyValidazione(aliasForVerificaConnettore);
  346.                                     }
  347.                                     else if(negoziazione) {
  348.                                         nomeMetodo = confCore.getJmxPdDConfigurazioneSistemaNomeMetodoCheckConnettoreTokenPolicyNegoziazione(aliasForVerificaConnettore);
  349.                                     }
  350.                                     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
  351.                                     String stato = confCore.getInvoker().invokeJMXMethod(aliasForVerificaConnettore, confCore.getJmxPdDConfigurazioneSistemaType(aliasForVerificaConnettore),
  352.                                             risorsa,
  353.                                             nomeMetodo,
  354.                                             slowOperation,
  355.                                             genericProperties.getNome());
  356.                                     if(
  357.                                             JMXUtils.MSG_OPERAZIONE_EFFETTUATA_SUCCESSO.equals(stato)
  358.                                             ||
  359.                                             (stato!=null && stato.startsWith(JMXUtils.MSG_OPERAZIONE_EFFETTUATA_SUCCESSO_PREFIX))
  360.                                             ){
  361.                                         bfExternal.append(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_EFFETTUATO_CON_SUCCESSO);
  362.                                     }
  363.                                     else{
  364.                                         rilevatoErrore = true;
  365.                                         bfExternal.append(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_FALLITA);
  366.                                         if(stato!=null && stato.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)) {
  367.                                             bfExternal.append(stato.substring(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA.length()));
  368.                                         }
  369.                                         else {
  370.                                             bfExternal.append(stato);
  371.                                         }
  372.                                     }
  373.                                 }catch(Exception e){
  374.                                     ControlStationCore.logError("Errore durante la verifica del connettore (jmxResource '"+risorsa+"') (node:"+aliasForVerificaConnettore+"): "+e.getMessage(),e);
  375.                                     rilevatoErrore = true;
  376.                                     String stato = e.getMessage();
  377.                                     bfExternal.append(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_FALLITA);
  378.                                     if(stato.startsWith(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA)) {
  379.                                         bfExternal.append(stato.substring(JMXUtils.MSG_OPERAZIONE_NON_EFFETTUATA.length()));
  380.                                     }
  381.                                     else {
  382.                                         bfExternal.append(stato);
  383.                                     }
  384.                                 }
  385.            
  386.                                 if(sbPerOperazioneEffettuata.length()>0){
  387.                                     sbPerOperazioneEffettuata.append(org.openspcoop2.core.constants.Costanti.WEB_NEW_LINE);
  388.                                 }
  389.                                 sbPerOperazioneEffettuata.append(bfExternal.toString());
  390.                                
  391.                                 index++;
  392.                             }
  393.                             if(sbPerOperazioneEffettuata!=null){
  394.                                 if(rilevatoErrore)
  395.                                     pd.setMessage(sbPerOperazioneEffettuata.toString());
  396.                                 else
  397.                                     pd.setMessage(sbPerOperazioneEffettuata.toString(),Costanti.MESSAGE_TYPE_INFO);
  398.                             }
  399.            
  400.                             pd.disableEditMode();
  401.                         }
  402.                     }
  403.                     else {
  404.                    
  405.                         List<String> aliasesForCheck = new ArrayList<>();
  406.                         boolean all = false;
  407.                         if(aliases.size()==1) {
  408.                             aliasesForCheck.add(aliases.get(0));
  409.                         }
  410.                         else if(CostantiControlStation.LABEL_VERIFICA_CONNETTORE_TUTTI_I_NODI.equals(alias)) {
  411.                             aliasesForCheck.addAll(aliases);
  412.                             all = true;
  413.                         }
  414.                         else {
  415.                             aliasesForCheck.add(alias);
  416.                         }
  417.                        
  418.                         CertificateChecker certificateChecker = null;
  419.                         if(all) {
  420.                             certificateChecker = confCore.getJmxPdDCertificateChecker();
  421.                         }
  422.                         else {
  423.                             certificateChecker = confCore.newJmxPdDCertificateChecker(aliasesForCheck);
  424.                         }
  425.                         StringBuilder sbDetailsError = new StringBuilder();
  426.                        
  427.                         int sogliaWarningGiorni = confCore.getVerificaCertificatiWarningExpirationDays();
  428.                        
  429.                         String labelPolicy = genericProperties.getNome();
  430.                        
  431.                         String posizioneErrore = null;
  432.                         String extraErrore = null;
  433.                        
  434.                         // verifica
  435.                         StringBuilder sbDetailsWarningPolicy = new StringBuilder();
  436.                         String posizioneWarningPolicy = null;
  437.                         if(attributeAuthority) {
  438.                             certificateChecker.checkAttributeAuthority(sbDetailsError, sbDetailsWarningPolicy,
  439.                                 https, jwtRichiesta, jwtRisposta,
  440.                                 genericProperties,
  441.                                 sogliaWarningGiorni);
  442.                         }
  443.                         else if(validazione) {
  444.                             certificateChecker.checkTokenPolicyValidazione(sbDetailsError, sbDetailsWarningPolicy,
  445.                                 httpsDynamicDiscovery, httpsValidazioneJWT, httpsIntrospection, httpsUserInfo,
  446.                                 validazioneJwt, forwardToJwt,
  447.                                 genericProperties,
  448.                                 sogliaWarningGiorni);
  449.                         }
  450.                         else if(negoziazione) {
  451.                             certificateChecker.checkTokenPolicyNegoziazione(sbDetailsError, sbDetailsWarningPolicy,
  452.                                     https, signedJwt,
  453.                                     genericProperties,
  454.                                     sogliaWarningGiorni);
  455.                         }
  456.                         if(sbDetailsError.length()>0) {
  457.                             posizioneErrore = labelPolicy;
  458.                         }
  459.                         else if(sbDetailsWarningPolicy.length()>0) {
  460.                             posizioneWarningPolicy = labelPolicy;
  461.                         }
  462.                        
  463.                        
  464.                         // analisi warning
  465.                         String warning = null;
  466.                         String posizioneWarning = null;
  467.                         String extraWarning = null;
  468.                         if(sbDetailsError.length()<=0 &&
  469.                             sbDetailsWarningPolicy.length()>0) {
  470.                             warning = sbDetailsWarningPolicy.toString();
  471.                             posizioneWarning = posizioneWarningPolicy;
  472.                         }
  473.                        
  474.                         // esito
  475.                         List<String> formatIds = new ArrayList<>();
  476.                         formatIds.add(RegistroServiziReader.ID_CONFIGURAZIONE_CONNETTORE_HTTPS);
  477.                         formatIds.add(ConfigurazionePdDReader.ID_CONFIGURAZIONE_TOKEN_VALIDAZIONE_JWT);
  478.                         formatIds.add(ConfigurazionePdDReader.ID_CONFIGURAZIONE_TOKEN_VALIDAZIONE_FORWARD_TO_JWT);
  479.                         formatIds.add(ConfigurazionePdDReader.ID_CONFIGURAZIONE_TOKEN_NEGOZIAZIONE_SIGNED_JWT);
  480.                         formatIds.add(ConfigurazionePdDReader.ID_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY_JWT_RICHIESTA);
  481.                         formatIds.add(ConfigurazionePdDReader.ID_CONFIGURAZIONE_ATTRIBUTE_AUTHORITY_JWT_RISPOSTA);
  482.                         confCore.formatVerificaCertificatiEsito(pd, formatIds,
  483.                                 (sbDetailsError.length()>0 ? sbDetailsError.toString() : null), extraErrore, posizioneErrore,
  484.                                 warning, extraWarning, posizioneWarning,
  485.                                 false);
  486.                                
  487.                         pd.disableEditMode();
  488.                        
  489.                         verificaCertificatiEffettuata = true;

  490.                     }
  491.                    
  492.                 }
  493.                
  494.                 else {
  495.                
  496.                     DataElement deTestConnettivita = new DataElement();
  497.                     deTestConnettivita.setType(DataElementType.TITLE);
  498.                     if(verificaConnettivita) {
  499.                         deTestConnettivita.setLabel(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CONNETTIVITA);
  500.                     }
  501.                     else {
  502.                         deTestConnettivita.setLabel(ConfigurazioneCostanti.LABEL_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CERTIFICATI);
  503.                     }
  504.                     dati.add(deTestConnettivita);
  505.                    
  506.                     confHelper.addVerificaCertificatoSceltaAlias(aliases, dati);
  507.                    
  508.                 }
  509.             }
  510.            
  511.             pd.setLabelBottoneInvia(CostantiControlStation.LABEL_CONFIGURAZIONE_VERIFICA_CONNETTORE_BOTTONE);

  512.             dati = confHelper.addTokenPolicyHiddenToDati(dati, id, infoType);

  513.             DataElement de = new DataElement();
  514.             de.setValue(arrivoDaLista+"");
  515.             de.setType(DataElementType.HIDDEN);
  516.             de.setName(CostantiControlStation.PARAMETRO_VERIFICA_CERTIFICATI_FROM_LISTA);
  517.             dati.add(de);
  518.            
  519.             de = new DataElement();
  520.             de.setValue(verificaConnettivita+"");
  521.             de.setType(DataElementType.HIDDEN);
  522.             de.setName(CostantiControlStation.PARAMETRO_VERIFICA_CONNETTIVITA);
  523.             dati.add(de);
  524.            
  525.             pd.setDati(dati);
  526.            
  527.             if(verificaCertificatiEffettuata) {
  528.                
  529.                 // verifica richiesta dal link nella lista, torno alla lista
  530.                 if(arrivoDaLista) {
  531.                    
  532.                     ConsoleSearch ricerca = (ConsoleSearch) ServletUtils.getSearchObjectFromSession(request, session, ConsoleSearch.class);

  533.                     String infoTypeA = confHelper.getParameter(ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE);
  534.                     String infoTypeSession = ServletUtils.getObjectFromSession(request, session, String.class, ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE);
  535.                     if(infoTypeA==null) {
  536.                         infoTypeA = infoTypeSession;
  537.                     }
  538.                     else {
  539.                         ServletUtils.setObjectIntoSession(request, session, infoTypeA, ConfigurazioneCostanti.PARAMETRO_TOKEN_POLICY_TIPOLOGIA_INFORMAZIONE);
  540.                     }
  541.                     attributeAuthority = ConfigurazioneCostanti.isConfigurazioneAttributeAuthority(infoTypeA);
  542.                    
  543.                     // reset di eventuali configurazioni salvate in sessione
  544.                     Properties mapId = attributeAuthority ?
  545.                             confCore.getAttributeAuthorityTipologia() :
  546.                             confCore.getTokenPolicyTipologia();
  547.                     if(mapId!=null && !mapId.isEmpty()) {
  548.                         propertiesSourceConfiguration = attributeAuthority ?
  549.                                 confCore.getAttributeAuthorityPropertiesSourceConfiguration() :
  550.                                 confCore.getPolicyGestioneTokenPropertiesSourceConfiguration();
  551.                         configManager.leggiConfigurazioni(propertiesSourceConfiguration, true);
  552.                         for (Object oTipo : mapId.keySet()) {
  553.                             if(oTipo instanceof String) {
  554.                                 String ti = (String) oTipo;
  555.                                 Config config = configManager.getConfigurazione(propertiesSourceConfiguration, ti);
  556.                                 ServletUtils.removeConfigurazioneBeanFromSession(request, session, config.getId());
  557.                             }
  558.                         }
  559.                     }
  560.                    
  561.                     int idLista = attributeAuthority ? Liste.CONFIGURAZIONE_GESTIONE_ATTRIBUTE_AUTHORITY : Liste.CONFIGURAZIONE_GESTIONE_POLICY_TOKEN;
  562.                    
  563.                     ricerca = confHelper.checkSearchParameters(idLista, ricerca);

  564.                     List<String> tipologie = new ArrayList<>();
  565.                     if(attributeAuthority) {
  566.                         tipologie.add(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_ATTRIBUTE_AUTHORITY);
  567.                     }
  568.                     else {
  569.                         tipologie.add(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_GESTIONE_POLICY_TOKEN);
  570.                         tipologie.add(ConfigurazioneCostanti.DEFAULT_VALUE_PARAMETRO_CONFIGURAZIONE_GESTORE_POLICY_TOKEN_TIPOLOGIA_RETRIEVE_POLICY_TOKEN);
  571.                     }
  572.                    
  573.                     List<GenericProperties> lista = confCore.gestorePolicyTokenList(idLista, tipologie, ricerca);
  574.                    
  575.                     confHelper.prepareGestorePolicyTokenList(ricerca, lista, idLista);
  576.                    
  577.                     // salvo l'oggetto ricerca nella sessione
  578.                     ServletUtils.setSearchObjectIntoSession(request, session, ricerca);
  579.                    
  580.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  581.                
  582.                     // Forward control to the specified success URI
  583.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CERTIFICATI, CostantiControlStation.TIPO_OPERAZIONE_VERIFICA_CERTIFICATI);
  584.                    
  585.                 }
  586.                 // verifica richiesta dal dettaglio, torno al dettaglio
  587.                 else {
  588.                
  589.                     ServletUtils.setPageDataTitle(pd, lstParam);
  590.                    
  591.                     TipoOperazione tipoOperazione = TipoOperazione.CHANGE;
  592.                    
  593.                     String nome = genericProperties.getNome();
  594.                     String descrizione = genericProperties.getDescrizione();
  595.                     String tipo = genericProperties.getTipo();
  596.                    
  597.                     List<String> nomiConfigurazioniPolicyGestioneToken = configManager.getNomiConfigurazioni(propertiesSourceConfiguration);
  598.                     List<String> labelConfigurazioniPolicyGestioneToken = configManager.convertToLabel(propertiesSourceConfiguration, nomiConfigurazioniPolicyGestioneToken);
  599.                    
  600.                     String[] propConfigPolicyGestioneTokenLabelList = labelConfigurazioniPolicyGestioneToken.toArray(new String[labelConfigurazioniPolicyGestioneToken.size()]);
  601.                     String[] propConfigPolicyGestioneTokenList= nomiConfigurazioniPolicyGestioneToken.toArray(new String[nomiConfigurazioniPolicyGestioneToken.size()]);
  602.                    
  603.                     Config configurazione = configManager.getConfigurazione(propertiesSourceConfiguration, genericProperties.getTipo());
  604.                    
  605.                     Map<String, Properties> mappaDB = confCore.readGestorePolicyTokenPropertiesConfiguration(genericProperties.getId());

  606.                     ConfigBean configurazioneBean = confCore.leggiConfigurazione(configurazione, mappaDB);
  607.                    
  608.                     // non viene supportata la modalità completa. Visualizzo allora solamente il nome
  609. /**                 confHelper.aggiornaConfigurazioneProperties(configurazioneBean);
  610. //                  
  611. //                  configurazioneBean.updateConfigurazione(configurazione);
  612. //                  ServletUtils.saveConfigurazioneBeanIntoSession(session, configurazioneBean, configurazioneBean.getId());*/
  613.                    
  614.                     // preparo i campi
  615.                     dati.add(ServletUtils.getDataElementForEditModeFinished());
  616.                    
  617.                     dati = confHelper.addPolicyGestioneTokenToDati(tipoOperazione,dati,id,nome,descrizione,tipo,propConfigPolicyGestioneTokenLabelList,propConfigPolicyGestioneTokenList,
  618.                             attributeAuthority, genericProperties);
  619.                            
  620.                     dati = confHelper.addPropertiesConfigToDati(tipoOperazione,dati, tipo, configurazioneBean,false);
  621.                    
  622.                     pd.setDati(dati);
  623.                    
  624.                     ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  625.                    
  626.                     return ServletUtils.getStrutsForwardEditModeFinished(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN, ForwardParams.CHANGE());
  627.                    
  628.                 }
  629.                
  630.             }
  631.        
  632.             else {

  633.                 ServletUtils.setGeneralAndPageDataIntoSession(request, session, gd, pd);
  634.                 return ServletUtils.getStrutsForwardEditModeInProgress(mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CERTIFICATI, ForwardParams.OTHER(""));
  635.             }
  636.            
  637.         } catch (Exception e) {
  638.             return ServletUtils.getStrutsForwardError(ControlStationCore.getLog(), e, pd, request, session, gd, mapping, ConfigurazioneCostanti.OBJECT_NAME_CONFIGURAZIONE_POLICY_GESTIONE_TOKEN_VERIFICA_CERTIFICATI, ForwardParams.OTHER(""));
  639.         }  
  640.     }
  641. }